Skip to content

Commit 24a25d1

Browse files
committed
Unify all beforeSave with custom hooks into a single describe(), reset the global state on before/after test.
1 parent 69efeac commit 24a25d1

File tree

1 file changed

+142
-134
lines changed

1 file changed

+142
-134
lines changed

spec/ParseAPI.spec.js

Lines changed: 142 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ describe('miscellaneous', function() {
139139
return new Parse.Query(TestObject).find();
140140
}).then((results) => {
141141
expect(results.length).toEqual(100);
142-
done();
142+
done();
143143
}, (error) => {
144144
fail(error);
145145
done();
@@ -281,7 +281,7 @@ describe('miscellaneous', function() {
281281
// We should have been able to fetch the object again
282282
fail(error);
283283
});
284-
})
284+
});
285285

286286
it('basic beforeDelete rejection via promise', function(done) {
287287
var obj = new Parse.Object('BeforeDeleteFailWithPromise');
@@ -384,90 +384,154 @@ describe('miscellaneous', function() {
384384
});
385385
});
386386

387-
it('test beforeSave get full object on create and update', function(done) {
388-
var triggerTime = 0;
389-
// Register a mock beforeSave hook
390-
Parse.Cloud.beforeSave('GameScore', function(req, res) {
391-
var object = req.object;
392-
expect(object instanceof Parse.Object).toBeTruthy();
393-
expect(object.get('fooAgain')).toEqual('barAgain');
394-
if (triggerTime == 0) {
395-
// Create
396-
expect(object.get('foo')).toEqual('bar');
397-
// No objectId/createdAt/updatedAt
398-
expect(object.id).toBeUndefined();
399-
expect(object.createdAt).toBeUndefined();
400-
expect(object.updatedAt).toBeUndefined();
401-
} else if (triggerTime == 1) {
402-
// Update
403-
expect(object.get('foo')).toEqual('baz');
404-
expect(object.id).not.toBeUndefined();
405-
expect(object.createdAt).not.toBeUndefined();
406-
expect(object.updatedAt).not.toBeUndefined();
407-
} else {
408-
res.error();
409-
}
410-
triggerTime++;
411-
res.success();
387+
describe('beforeSave', () => {
388+
beforeEach(done => {
389+
// Make sure the required mock for all tests is unset.
390+
delete Parse.Cloud.Triggers.beforeSave.GameScore;
391+
done();
412392
});
413393

414-
var obj = new Parse.Object('GameScore');
415-
obj.set('foo', 'bar');
416-
obj.set('fooAgain', 'barAgain');
417-
obj.save().then(function() {
418-
// We only update foo
419-
obj.set('foo', 'baz');
420-
return obj.save();
421-
}).then(function() {
422-
// Make sure the checking has been triggered
423-
expect(triggerTime).toBe(2);
424-
// Clear mock beforeSave
394+
afterEach(done => {
395+
// Make sure the required mock for all tests is unset.
425396
delete Parse.Cloud.Triggers.beforeSave.GameScore;
426397
done();
427-
}, function(error) {
428-
fail(error);
429-
done();
430398
});
431-
});
432399

433-
it('test beforeSave get dirtyKeys on update', function(done) {
434-
var triggerTime = 0;
435-
// Register a mock beforeSave hook
436-
Parse.Cloud.beforeSave('GameScore', function(req, res) {
437-
var object = req.object;
438-
expect(object instanceof Parse.Object).toBeTruthy();
439-
expect(object.get('fooAgain')).toEqual('barAgain');
440-
if (triggerTime == 0) {
441-
// Create
442-
expect(object.get('foo')).toEqual('bar');
443-
} else if (triggerTime == 1) {
444-
// Update
445-
expect(object.dirtyKeys()).toEqual(['foo']);
446-
expect(object.dirty('foo')).toBeTruthy();
447-
expect(object.get('foo')).toEqual('baz');
448-
} else {
449-
res.error();
450-
}
451-
triggerTime++;
452-
res.success();
400+
it('object is set on create and update', done => {
401+
let triggerTime = 0;
402+
// Register a mock beforeSave hook
403+
Parse.Cloud.beforeSave('GameScore', (req, res) => {
404+
let object = req.object;
405+
expect(object instanceof Parse.Object).toBeTruthy();
406+
expect(object.get('fooAgain')).toEqual('barAgain');
407+
if (triggerTime == 0) {
408+
// Create
409+
expect(object.get('foo')).toEqual('bar');
410+
// No objectId/createdAt/updatedAt
411+
expect(object.id).toBeUndefined();
412+
expect(object.createdAt).toBeUndefined();
413+
expect(object.updatedAt).toBeUndefined();
414+
} else if (triggerTime == 1) {
415+
// Update
416+
expect(object.get('foo')).toEqual('baz');
417+
expect(object.id).not.toBeUndefined();
418+
expect(object.createdAt).not.toBeUndefined();
419+
expect(object.updatedAt).not.toBeUndefined();
420+
} else {
421+
res.error();
422+
}
423+
triggerTime++;
424+
res.success();
425+
});
426+
427+
let obj = new Parse.Object('GameScore');
428+
obj.set('foo', 'bar');
429+
obj.set('fooAgain', 'barAgain');
430+
obj.save().then(() => {
431+
// We only update foo
432+
obj.set('foo', 'baz');
433+
return obj.save();
434+
}).then(() => {
435+
// Make sure the checking has been triggered
436+
expect(triggerTime).toBe(2);
437+
done();
438+
}, error => {
439+
fail(error);
440+
done();
441+
});
453442
});
454443

455-
var obj = new Parse.Object('GameScore');
456-
obj.set('foo', 'bar');
457-
obj.set('fooAgain', 'barAgain');
458-
obj.save().then(function() {
459-
// We only update foo
460-
obj.set('foo', 'baz');
461-
return obj.save();
462-
}).then(function() {
463-
// Make sure the checking has been triggered
464-
expect(triggerTime).toBe(2);
465-
// Clear mock beforeSave
466-
delete Parse.Cloud.Triggers.beforeSave.GameScore;
467-
done();
468-
}, function(error) {
469-
fail(error);
470-
done();
444+
it('dirtyKeys are set on update', done => {
445+
let triggerTime = 0;
446+
// Register a mock beforeSave hook
447+
Parse.Cloud.beforeSave('GameScore', (req, res) => {
448+
var object = req.object;
449+
expect(object instanceof Parse.Object).toBeTruthy();
450+
expect(object.get('fooAgain')).toEqual('barAgain');
451+
if (triggerTime == 0) {
452+
// Create
453+
expect(object.get('foo')).toEqual('bar');
454+
} else if (triggerTime == 1) {
455+
// Update
456+
expect(object.dirtyKeys()).toEqual(['foo']);
457+
expect(object.dirty('foo')).toBeTruthy();
458+
expect(object.get('foo')).toEqual('baz');
459+
} else {
460+
res.error();
461+
}
462+
triggerTime++;
463+
res.success();
464+
});
465+
466+
let obj = new Parse.Object('GameScore');
467+
obj.set('foo', 'bar');
468+
obj.set('fooAgain', 'barAgain');
469+
obj.save().then(() => {
470+
// We only update foo
471+
obj.set('foo', 'baz');
472+
return obj.save();
473+
}).then(() => {
474+
// Make sure the checking has been triggered
475+
expect(triggerTime).toBe(2);
476+
done();
477+
}, function(error) {
478+
fail(error);
479+
done();
480+
});
481+
});
482+
483+
it('original object is set on update', done => {
484+
let triggerTime = 0;
485+
// Register a mock beforeSave hook
486+
Parse.Cloud.beforeSave('GameScore', (req, res) => {
487+
let object = req.object;
488+
expect(object instanceof Parse.Object).toBeTruthy();
489+
expect(object.get('fooAgain')).toEqual('barAgain');
490+
let originalObject = req.original;
491+
if (triggerTime == 0) {
492+
// No id/createdAt/updatedAt
493+
expect(object.id).toBeUndefined();
494+
expect(object.createdAt).toBeUndefined();
495+
expect(object.updatedAt).toBeUndefined();
496+
// Create
497+
expect(object.get('foo')).toEqual('bar');
498+
// Check the originalObject is undefined
499+
expect(originalObject).toBeUndefined();
500+
} else if (triggerTime == 1) {
501+
// Update
502+
expect(object.id).not.toBeUndefined();
503+
expect(object.createdAt).not.toBeUndefined();
504+
expect(object.updatedAt).not.toBeUndefined();
505+
expect(object.get('foo')).toEqual('baz');
506+
// Check the originalObject
507+
expect(originalObject instanceof Parse.Object).toBeTruthy();
508+
expect(originalObject.get('fooAgain')).toEqual('barAgain');
509+
expect(originalObject.id).not.toBeUndefined();
510+
expect(originalObject.createdAt).not.toBeUndefined();
511+
expect(originalObject.updatedAt).not.toBeUndefined();
512+
expect(originalObject.get('foo')).toEqual('bar');
513+
} else {
514+
res.error();
515+
}
516+
triggerTime++;
517+
res.success();
518+
});
519+
520+
let obj = new Parse.Object('GameScore');
521+
obj.set('foo', 'bar');
522+
obj.set('fooAgain', 'barAgain');
523+
obj.save().then(() => {
524+
// We only update foo
525+
obj.set('foo', 'baz');
526+
return obj.save();
527+
}).then(() => {
528+
// Make sure the checking has been triggered
529+
expect(triggerTime).toBe(2);
530+
done();
531+
}, error => {
532+
fail(error);
533+
done();
534+
});
471535
});
472536
});
473537

@@ -513,62 +577,6 @@ describe('miscellaneous', function() {
513577
});
514578
});
515579

516-
it('test beforeSave get original object on update', function(done) {
517-
var triggerTime = 0;
518-
// Register a mock beforeSave hook
519-
Parse.Cloud.beforeSave('GameScore', function(req, res) {
520-
var object = req.object;
521-
expect(object instanceof Parse.Object).toBeTruthy();
522-
expect(object.get('fooAgain')).toEqual('barAgain');
523-
var originalObject = req.original;
524-
if (triggerTime == 0) {
525-
// No id/createdAt/updatedAt
526-
expect(object.id).toBeUndefined();
527-
expect(object.createdAt).toBeUndefined();
528-
expect(object.updatedAt).toBeUndefined();
529-
// Create
530-
expect(object.get('foo')).toEqual('bar');
531-
// Check the originalObject is undefined
532-
expect(originalObject).toBeUndefined();
533-
} else if (triggerTime == 1) {
534-
// Update
535-
expect(object.id).not.toBeUndefined();
536-
expect(object.createdAt).not.toBeUndefined();
537-
expect(object.updatedAt).not.toBeUndefined();
538-
expect(object.get('foo')).toEqual('baz');
539-
// Check the originalObject
540-
expect(originalObject instanceof Parse.Object).toBeTruthy();
541-
expect(originalObject.get('fooAgain')).toEqual('barAgain');
542-
expect(originalObject.id).not.toBeUndefined();
543-
expect(originalObject.createdAt).not.toBeUndefined();
544-
expect(originalObject.updatedAt).not.toBeUndefined();
545-
expect(originalObject.get('foo')).toEqual('bar');
546-
} else {
547-
res.error();
548-
}
549-
triggerTime++;
550-
res.success();
551-
});
552-
553-
var obj = new Parse.Object('GameScore');
554-
obj.set('foo', 'bar');
555-
obj.set('fooAgain', 'barAgain');
556-
obj.save().then(function() {
557-
// We only update foo
558-
obj.set('foo', 'baz');
559-
return obj.save();
560-
}).then(function() {
561-
// Make sure the checking has been triggered
562-
expect(triggerTime).toBe(2);
563-
// Clear mock beforeSave
564-
delete Parse.Cloud.Triggers.beforeSave.GameScore;
565-
done();
566-
}, function(error) {
567-
fail(error);
568-
done();
569-
});
570-
});
571-
572580
it('test afterSave get original object on update', function(done) {
573581
var triggerTime = 0;
574582
// Register a mock beforeSave hook

0 commit comments

Comments
 (0)