|
5 | 5 | var DatabaseAdapter = require('../src/DatabaseAdapter');
|
6 | 6 | const MongoStorageAdapter = require('../src/Adapters/Storage/Mongo/MongoStorageAdapter');
|
7 | 7 | var request = require('request');
|
| 8 | +const rp = require('request-promise'); |
8 | 9 | const Parse = require("parse/node");
|
9 | 10 | let Config = require('../src/Config');
|
10 | 11 | let defaultColumns = require('../src/Controllers/SchemaController').defaultColumns;
|
@@ -1347,4 +1348,111 @@ describe('miscellaneous', function() {
|
1347 | 1348 | done();
|
1348 | 1349 | });
|
1349 | 1350 | });
|
| 1351 | + |
| 1352 | + it('purge all objects in class', (done) => { |
| 1353 | + let object = new Parse.Object('TestObject'); |
| 1354 | + object.set('foo', 'bar'); |
| 1355 | + let object2 = new Parse.Object('TestObject'); |
| 1356 | + object2.set('alice', 'wonderland'); |
| 1357 | + Parse.Object.saveAll([object, object2]) |
| 1358 | + .then(() => { |
| 1359 | + let query = new Parse.Query(TestObject); |
| 1360 | + return query.count() |
| 1361 | + }).then((count) => { |
| 1362 | + expect(count).toBe(2); |
| 1363 | + let headers = { |
| 1364 | + 'Content-Type': 'application/json', |
| 1365 | + 'X-Parse-Application-Id': 'test', |
| 1366 | + 'X-Parse-Master-Key': 'test' |
| 1367 | + }; |
| 1368 | + request.del({ |
| 1369 | + headers: headers, |
| 1370 | + url: 'http://localhost:8378/1/purge/TestObject', |
| 1371 | + json: true |
| 1372 | + }, (err, res, body) => { |
| 1373 | + expect(err).toBe(null); |
| 1374 | + let query = new Parse.Query(TestObject); |
| 1375 | + return query.count().then((count) => { |
| 1376 | + expect(count).toBe(0); |
| 1377 | + done(); |
| 1378 | + }); |
| 1379 | + }); |
| 1380 | + }); |
| 1381 | + }); |
| 1382 | + |
| 1383 | + it('fail on purge all objects in class without master key', (done) => { |
| 1384 | + let headers = { |
| 1385 | + 'Content-Type': 'application/json', |
| 1386 | + 'X-Parse-Application-Id': 'test', |
| 1387 | + 'X-Parse-REST-API-Key': 'rest' |
| 1388 | + }; |
| 1389 | + rp({ |
| 1390 | + method: 'DELETE', |
| 1391 | + headers: headers, |
| 1392 | + uri: 'http://localhost:8378/1/purge/TestObject', |
| 1393 | + json: true |
| 1394 | + }).then(body => { |
| 1395 | + fail('Should not succeed'); |
| 1396 | + }).catch(err => { |
| 1397 | + expect(err.error.error).toEqual('unauthorized: master key is required'); |
| 1398 | + done(); |
| 1399 | + }); |
| 1400 | + }); |
| 1401 | + |
| 1402 | + it('purge all objects in _Role also purge cache', (done) => { |
| 1403 | + let headers = { |
| 1404 | + 'Content-Type': 'application/json', |
| 1405 | + 'X-Parse-Application-Id': 'test', |
| 1406 | + 'X-Parse-Master-Key': 'test' |
| 1407 | + }; |
| 1408 | + var user, object; |
| 1409 | + createTestUser().then((x) => { |
| 1410 | + user = x; |
| 1411 | + let acl = new Parse.ACL(); |
| 1412 | + acl.setPublicReadAccess(true); |
| 1413 | + acl.setPublicWriteAccess(false); |
| 1414 | + let role = new Parse.Object('_Role'); |
| 1415 | + role.set('name', 'TestRole'); |
| 1416 | + role.setACL(acl); |
| 1417 | + let users = role.relation('users'); |
| 1418 | + users.add(user); |
| 1419 | + return role.save({}, { useMasterKey: true }); |
| 1420 | + }).then((x) => { |
| 1421 | + let query = new Parse.Query('_Role'); |
| 1422 | + return query.find({ useMasterKey: true }); |
| 1423 | + }).then((x) => { |
| 1424 | + expect(x.length).toEqual(1); |
| 1425 | + let relation = x[0].relation('users').query(); |
| 1426 | + return relation.first({ useMasterKey: true }); |
| 1427 | + }).then((x) => { |
| 1428 | + expect(x.id).toEqual(user.id); |
| 1429 | + object = new Parse.Object('TestObject'); |
| 1430 | + let acl = new Parse.ACL(); |
| 1431 | + acl.setPublicReadAccess(false); |
| 1432 | + acl.setPublicWriteAccess(false); |
| 1433 | + acl.setRoleReadAccess('TestRole', true); |
| 1434 | + acl.setRoleWriteAccess('TestRole', true); |
| 1435 | + object.setACL(acl); |
| 1436 | + return object.save(); |
| 1437 | + }).then((x) => { |
| 1438 | + let query = new Parse.Query('TestObject'); |
| 1439 | + return query.find({ sessionToken: user.getSessionToken() }); |
| 1440 | + }).then((x) => { |
| 1441 | + expect(x.length).toEqual(1); |
| 1442 | + return rp({ |
| 1443 | + method: 'DELETE', |
| 1444 | + headers: headers, |
| 1445 | + uri: 'http://localhost:8378/1/purge/_Role', |
| 1446 | + json: true |
| 1447 | + }); |
| 1448 | + }).then((x) => { |
| 1449 | + let query = new Parse.Query('TestObject'); |
| 1450 | + return query.get(object.id, { sessionToken: user.getSessionToken() }); |
| 1451 | + }).then((x) => { |
| 1452 | + fail('Should not succeed'); |
| 1453 | + }, (e) => { |
| 1454 | + expect(e.code).toEqual(Parse.Error.OBJECT_NOT_FOUND); |
| 1455 | + done(); |
| 1456 | + }); |
| 1457 | + }); |
1350 | 1458 | });
|
0 commit comments