Skip to content

Commit b7f6a24

Browse files
committed
Purge cache
1 parent 4546983 commit b7f6a24

File tree

2 files changed

+61
-2
lines changed

2 files changed

+61
-2
lines changed

spec/ParseAPI.spec.js

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1408,10 +1408,67 @@ describe('miscellaneous', function() {
14081408
uri: 'http://localhost:8378/1/classes/TestObject',
14091409
json: true
14101410
}).then(body => {
1411-
fail('Should not succeed')
1411+
fail('Should not succeed');
14121412
}).catch(err => {
14131413
expect(err.error.error).toEqual('unauthorized: master key is required');
14141414
done();
14151415
});
14161416
});
1417+
1418+
it('purge all objects in _Role also purge cache', (done) => {
1419+
let headers = {
1420+
'Content-Type': 'application/json',
1421+
'X-Parse-Application-Id': 'test',
1422+
'X-Parse-Master-Key': 'test'
1423+
};
1424+
var user, object;
1425+
createTestUser().then((x) => {
1426+
user = x;
1427+
let acl = new Parse.ACL();
1428+
acl.setPublicReadAccess(true);
1429+
acl.setPublicWriteAccess(false);
1430+
let role = new Parse.Object('_Role');
1431+
role.set('name', 'TestRole');
1432+
role.setACL(acl);
1433+
let users = role.relation('users');
1434+
users.add(user);
1435+
return role.save({}, { useMasterKey: true });
1436+
}).then((x) => {
1437+
let query = new Parse.Query('_Role');
1438+
return query.find({ useMasterKey: true });
1439+
}).then((x) => {
1440+
expect(x.length).toEqual(1);
1441+
let relation = x[0].relation('users').query();
1442+
return relation.first({ useMasterKey: true });
1443+
}).then((x) => {
1444+
expect(x.id).toEqual(user.id);
1445+
object = new Parse.Object('TestObject');
1446+
let acl = new Parse.ACL();
1447+
acl.setPublicReadAccess(false);
1448+
acl.setPublicWriteAccess(false);
1449+
acl.setRoleReadAccess('TestRole', true);
1450+
acl.setRoleWriteAccess('TestRole', true);
1451+
object.setACL(acl);
1452+
return object.save();
1453+
}).then((x) => {
1454+
let query = new Parse.Query('TestObject');
1455+
return query.find({ sessionToken: user.getSessionToken() });
1456+
}).then((x) => {
1457+
expect(x.length).toEqual(1);
1458+
return rp({
1459+
method: 'DELETE',
1460+
headers: headers,
1461+
uri: 'http://localhost:8378/1/classes/_Role',
1462+
json: true
1463+
});
1464+
}).then((x) => {
1465+
let query = new Parse.Query('TestObject');
1466+
return query.get(object.id, { sessionToken: user.getSessionToken() });
1467+
}).then((x) => {
1468+
fail('Should not succeed');
1469+
}, (e) => {
1470+
expect(e.code).toEqual(Parse.Error.OBJECT_NOT_FOUND);
1471+
done();
1472+
});
1473+
});
14171474
});

src/Routers/ClassesRouter.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,11 @@ export class ClassesRouter extends PromiseRouter {
117117
handlePurge(req) {
118118
return req.config.database.purgeCollection(req.params.className)
119119
.then(() => {
120+
var cacheAdapter = req.config.cacheController;
120121
if (req.params.className == '_Session') {
121-
var cacheAdapter = req.config.cacheController;
122122
cacheAdapter.user.clear();
123+
} else if (req.params.className == '_Role') {
124+
cacheAdapter.role.clear();
123125
}
124126
return {response: {}};
125127
});

0 commit comments

Comments
 (0)