feat: Allow setting createdAt and updatedAt during Parse.Object creation with maintenance key (#8696)
This commit is contained in:
@@ -103,6 +103,7 @@ const defaultConfiguration = {
|
||||
restAPIKey: 'rest',
|
||||
webhookKey: 'hook',
|
||||
masterKey: 'test',
|
||||
maintenanceKey: 'testing',
|
||||
readOnlyMasterKey: 'read-only-test',
|
||||
fileKey: 'test',
|
||||
directAccess: true,
|
||||
@@ -250,8 +251,8 @@ afterEach(function (done) {
|
||||
})
|
||||
.then(() => Parse.User.logOut())
|
||||
.then(
|
||||
() => {},
|
||||
() => {}
|
||||
() => { },
|
||||
() => { }
|
||||
) // swallow errors
|
||||
.then(() => {
|
||||
// Connection close events are not immediate on node 10+... wait a bit
|
||||
|
||||
@@ -136,6 +136,119 @@ describe('rest create', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('with maintenance key', () => {
|
||||
let req;
|
||||
|
||||
async function getObject(id) {
|
||||
const res = await request({
|
||||
headers: {
|
||||
'X-Parse-Application-Id': 'test',
|
||||
'X-Parse-REST-API-Key': 'rest'
|
||||
},
|
||||
method: 'GET',
|
||||
url: `http://localhost:8378/1/classes/TestObject/${id}`
|
||||
});
|
||||
|
||||
return res.data;
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
req = {
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Parse-Application-Id': 'test',
|
||||
'X-Parse-REST-API-Key': 'rest',
|
||||
'X-Parse-Maintenance-Key': 'testing'
|
||||
},
|
||||
method: 'POST',
|
||||
url: 'http://localhost:8378/1/classes/TestObject'
|
||||
};
|
||||
});
|
||||
|
||||
it('allows createdAt', async () => {
|
||||
const createdAt = { __type: 'Date', iso: '2019-01-01T00:00:00.000Z' };
|
||||
req.body = { createdAt };
|
||||
|
||||
const res = await request(req);
|
||||
expect(res.data.createdAt).toEqual(createdAt.iso);
|
||||
});
|
||||
|
||||
it('allows createdAt and updatedAt', async () => {
|
||||
const createdAt = { __type: 'Date', iso: '2019-01-01T00:00:00.000Z' };
|
||||
const updatedAt = { __type: 'Date', iso: '2019-02-01T00:00:00.000Z' };
|
||||
req.body = { createdAt, updatedAt };
|
||||
|
||||
const res = await request(req);
|
||||
|
||||
const obj = await getObject(res.data.objectId);
|
||||
expect(obj.createdAt).toEqual(createdAt.iso);
|
||||
expect(obj.updatedAt).toEqual(updatedAt.iso);
|
||||
});
|
||||
|
||||
it('allows createdAt, updatedAt, and additional field', async () => {
|
||||
const createdAt = { __type: 'Date', iso: '2019-01-01T00:00:00.000Z' };
|
||||
const updatedAt = { __type: 'Date', iso: '2019-02-01T00:00:00.000Z' };
|
||||
req.body = { createdAt, updatedAt, testing: 123 };
|
||||
|
||||
const res = await request(req);
|
||||
|
||||
const obj = await getObject(res.data.objectId);
|
||||
expect(obj.createdAt).toEqual(createdAt.iso);
|
||||
expect(obj.updatedAt).toEqual(updatedAt.iso);
|
||||
expect(obj.testing).toEqual(123);
|
||||
});
|
||||
|
||||
it('cannot set updatedAt dated before createdAt', async () => {
|
||||
const createdAt = { __type: 'Date', iso: '2019-01-01T00:00:00.000Z' };
|
||||
const updatedAt = { __type: 'Date', iso: '2018-12-01T00:00:00.000Z' };
|
||||
req.body = { createdAt, updatedAt };
|
||||
|
||||
try {
|
||||
await request(req);
|
||||
fail();
|
||||
}
|
||||
catch (err) {
|
||||
expect(err.data.code).toEqual(Parse.Error.VALIDATION_ERROR);
|
||||
}
|
||||
});
|
||||
|
||||
it('cannot set updatedAt without createdAt', async () => {
|
||||
const updatedAt = { __type: 'Date', iso: '2018-12-01T00:00:00.000Z' };
|
||||
req.body = { updatedAt };
|
||||
|
||||
const res = await request(req);
|
||||
|
||||
const obj = await getObject(res.data.objectId);
|
||||
expect(obj.updatedAt).not.toEqual(updatedAt.iso);
|
||||
});
|
||||
|
||||
it('handles bad types for createdAt and updatedAt', async () => {
|
||||
const createdAt = 12345;
|
||||
const updatedAt = true;
|
||||
req.body = { createdAt, updatedAt };
|
||||
|
||||
try {
|
||||
await request(req);
|
||||
fail();
|
||||
}
|
||||
catch (err) {
|
||||
expect(err.data.code).toEqual(Parse.Error.INCORRECT_TYPE);
|
||||
}
|
||||
});
|
||||
|
||||
it('cannot set createdAt or updatedAt without maintenance key', async () => {
|
||||
const createdAt = { __type: 'Date', iso: '2019-01-01T00:00:00.000Z' };
|
||||
const updatedAt = { __type: 'Date', iso: '2019-02-01T00:00:00.000Z' };
|
||||
req.body = { createdAt, updatedAt };
|
||||
delete req.headers['X-Parse-Maintenance-Key'];
|
||||
|
||||
const res = await request(req);
|
||||
|
||||
expect(res.data.createdAt).not.toEqual(createdAt.iso);
|
||||
expect(res.data.updatedAt).not.toEqual(updatedAt.iso);
|
||||
});
|
||||
});
|
||||
|
||||
it('handles array, object, date', done => {
|
||||
const now = new Date();
|
||||
const obj = {
|
||||
|
||||
Reference in New Issue
Block a user