Skip to content

Commit bbf7769

Browse files
committed
Fix the other transactions related tests that became flaky because now Parse Server tries to submit the transaction multilpe times in the case of TransientError
1 parent a32e997 commit bbf7769

File tree

2 files changed

+35
-23
lines changed

2 files changed

+35
-23
lines changed

spec/ParseServerRESTController.spec.js

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -219,10 +219,13 @@ describe('ParseServerRESTController', () => {
219219
expect(response[1].success.createdAt).toBeDefined();
220220
const query = new Parse.Query('MyObject');
221221
return query.find().then(results => {
222-
expect(databaseAdapter.createObject.calls.count()).toBe(2);
223-
expect(databaseAdapter.createObject.calls.argsFor(0)[3]).toBe(
224-
databaseAdapter.createObject.calls.argsFor(1)[3]
225-
);
222+
expect(databaseAdapter.createObject.calls.count() % 2).toBe(0);
223+
expect(databaseAdapter.createObject.calls.count() > 0).toEqual(true);
224+
for (let i = 0; i + 1 < databaseAdapter.createObject.calls.length; i = i + 2) {
225+
expect(databaseAdapter.createObject.calls.argsFor(i)[3]).toBe(
226+
databaseAdapter.createObject.calls.argsFor(i + 1)[3]
227+
);
228+
}
226229
expect(results.map(result => result.get('key')).sort()).toEqual([
227230
'value1',
228231
'value2',
@@ -347,7 +350,7 @@ describe('ParseServerRESTController', () => {
347350
});
348351
});
349352

350-
it('should generate separate session for each call', async () => {
353+
fit('should generate separate session for each call', async () => {
351354
const myObject = new Parse.Object('MyObject'); // This is important because transaction only works on pre-existing collections
352355
await myObject.save();
353356
await myObject.destroy();
@@ -514,18 +517,18 @@ describe('ParseServerRESTController', () => {
514517
const results3 = await query3.find();
515518
expect(results3.map(result => result.get('key')).sort()).toEqual(['value1', 'value2']);
516519

517-
expect(databaseAdapter.createObject.calls.count()).toBe(13);
520+
expect(databaseAdapter.createObject.calls.count() >= 13).toEqual(true);
518521
let transactionalSession;
519522
let transactionalSession2;
520523
let myObjectDBCalls = 0;
521524
let myObject2DBCalls = 0;
522525
let myObject3DBCalls = 0;
523-
for (let i = 0; i < 13; i++) {
526+
for (let i = 0; i < databaseAdapter.createObject.calls.count(); i++) {
524527
const args = databaseAdapter.createObject.calls.argsFor(i);
525528
switch (args[0]) {
526529
case 'MyObject':
527530
myObjectDBCalls++;
528-
if (!transactionalSession) {
531+
if (!transactionalSession || (myObjectDBCalls - 1) % 2 === 0) {
529532
transactionalSession = args[3];
530533
} else {
531534
expect(transactionalSession).toBe(args[3]);
@@ -536,7 +539,7 @@ describe('ParseServerRESTController', () => {
536539
break;
537540
case 'MyObject2':
538541
myObject2DBCalls++;
539-
if (!transactionalSession2) {
542+
if (!transactionalSession2 || (myObject2DBCalls - 1) % 9 === 0) {
540543
transactionalSession2 = args[3];
541544
} else {
542545
expect(transactionalSession2).toBe(args[3]);
@@ -551,9 +554,12 @@ describe('ParseServerRESTController', () => {
551554
break;
552555
}
553556
}
554-
expect(myObjectDBCalls).toEqual(2);
555-
expect(myObject2DBCalls).toEqual(9);
556-
expect(myObject3DBCalls).toEqual(2);
557+
expect(myObjectDBCalls % 2).toEqual(0);
558+
expect(myObjectDBCalls > 0).toEqual(true);
559+
expect(myObject2DBCalls % 9).toEqual(0);
560+
expect(myObject2DBCalls > 0).toEqual(true);
561+
expect(myObject3DBCalls % 2).toEqual(0);
562+
expect(myObject3DBCalls > 0).toEqual(true);
557563
});
558564
});
559565
}

spec/batch.spec.js

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,13 @@ describe('batch', () => {
228228
expect(response.data[1].success.createdAt).toBeDefined();
229229
const query = new Parse.Query('MyObject');
230230
query.find().then(results => {
231-
expect(databaseAdapter.createObject.calls.count()).toBe(2);
232-
expect(databaseAdapter.createObject.calls.argsFor(0)[3]).toBe(
233-
databaseAdapter.createObject.calls.argsFor(1)[3]
234-
);
231+
expect(databaseAdapter.createObject.calls.count() % 2).toBe(0);
232+
expect(databaseAdapter.createObject.calls.count() > 0).toEqual(true);
233+
for (let i = 0; i + 1 < databaseAdapter.createObject.calls.length; i = i + 2) {
234+
expect(databaseAdapter.createObject.calls.argsFor(i)[3]).toBe(
235+
databaseAdapter.createObject.calls.argsFor(i + 1)[3]
236+
);
237+
}
235238
expect(results.map(result => result.get('key')).sort()).toEqual([
236239
'value1',
237240
'value2',
@@ -542,18 +545,18 @@ describe('batch', () => {
542545
const results3 = await query3.find();
543546
expect(results3.map(result => result.get('key')).sort()).toEqual(['value1', 'value2']);
544547

545-
expect(databaseAdapter.createObject.calls.count()).toBe(13);
548+
expect(databaseAdapter.createObject.calls.count() >= 13).toEqual(true);
546549
let transactionalSession;
547550
let transactionalSession2;
548551
let myObjectDBCalls = 0;
549552
let myObject2DBCalls = 0;
550553
let myObject3DBCalls = 0;
551-
for (let i = 0; i < 13; i++) {
554+
for (let i = 0; i < databaseAdapter.createObject.calls.count(); i++) {
552555
const args = databaseAdapter.createObject.calls.argsFor(i);
553556
switch (args[0]) {
554557
case 'MyObject':
555558
myObjectDBCalls++;
556-
if (!transactionalSession) {
559+
if (!transactionalSession || (myObjectDBCalls - 1) % 2 === 0) {
557560
transactionalSession = args[3];
558561
} else {
559562
expect(transactionalSession).toBe(args[3]);
@@ -564,7 +567,7 @@ describe('batch', () => {
564567
break;
565568
case 'MyObject2':
566569
myObject2DBCalls++;
567-
if (!transactionalSession2) {
570+
if (!transactionalSession2 || (myObject2DBCalls - 1) % 9 === 0) {
568571
transactionalSession2 = args[3];
569572
} else {
570573
expect(transactionalSession2).toBe(args[3]);
@@ -579,9 +582,12 @@ describe('batch', () => {
579582
break;
580583
}
581584
}
582-
expect(myObjectDBCalls).toEqual(2);
583-
expect(myObject2DBCalls).toEqual(9);
584-
expect(myObject3DBCalls).toEqual(2);
585+
expect(myObjectDBCalls % 2).toEqual(0);
586+
expect(myObjectDBCalls > 0).toEqual(true);
587+
expect(myObject2DBCalls % 9).toEqual(0);
588+
expect(myObject2DBCalls > 0).toEqual(true);
589+
expect(myObject3DBCalls % 2).toEqual(0);
590+
expect(myObject3DBCalls > 0).toEqual(true);
585591
});
586592
});
587593
}

0 commit comments

Comments
 (0)