Skip to content

Commit 863b235

Browse files
committed
Missing only one test
1 parent 5ddab74 commit 863b235

File tree

5 files changed

+50
-27
lines changed

5 files changed

+50
-27
lines changed

spec/.eslintrc.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
"jequal": true,
2626
"create": true,
2727
"arrayContains": true,
28-
"expectAsync": true
28+
"expectAsync": true,
29+
"databaseAdapter": true
2930
},
3031
"rules": {
3132
"no-console": [0],

spec/batch.spec.js

Lines changed: 44 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,7 @@ describe('batch', () => {
7070
});
7171

7272
it('should handle a batch request without transaction', done => {
73-
let calls = 0;
74-
Parse.Cloud.beforeSave('MyObject', ({ database }) => {
75-
calls++;
76-
expect(database._transactionalSession).toEqual(null);
77-
});
73+
spyOn(databaseAdapter, 'createObject').and.callThrough();
7874

7975
request({
8076
method: 'POST',
@@ -102,7 +98,9 @@ describe('batch', () => {
10298
expect(response.data[1].success.createdAt).toBeDefined();
10399
const query = new Parse.Query('MyObject');
104100
query.find().then(results => {
105-
expect(calls).toBe(2);
101+
expect(databaseAdapter.createObject.calls.count()).toBe(2);
102+
expect(databaseAdapter.createObject.calls.argsFor(0)[3]).toEqual(null);
103+
expect(databaseAdapter.createObject.calls.argsFor(1)[3]).toEqual(null);
106104
expect(results.map(result => result.get('key')).sort()).toEqual([
107105
'value1',
108106
'value2',
@@ -113,11 +111,7 @@ describe('batch', () => {
113111
});
114112

115113
it('should handle a batch request with transaction = false', done => {
116-
let calls = 0;
117-
Parse.Cloud.beforeSave('MyObject', ({ database }) => {
118-
calls++;
119-
expect(database._transactionalSession).toEqual(null);
120-
});
114+
spyOn(databaseAdapter, 'createObject').and.callThrough();
121115

122116
request({
123117
method: 'POST',
@@ -146,7 +140,9 @@ describe('batch', () => {
146140
expect(response.data[1].success.createdAt).toBeDefined();
147141
const query = new Parse.Query('MyObject');
148142
query.find().then(results => {
149-
expect(calls).toBe(2);
143+
expect(databaseAdapter.createObject.calls.count()).toBe(2);
144+
expect(databaseAdapter.createObject.calls.argsFor(0)[3]).toEqual(null);
145+
expect(databaseAdapter.createObject.calls.argsFor(1)[3]).toEqual(null);
150146
expect(results.map(result => result.get('key')).sort()).toEqual([
151147
'value1',
152148
'value2',
@@ -170,17 +166,7 @@ describe('batch', () => {
170166
});
171167

172168
it('should handle a batch request with transaction = true', done => {
173-
let calls = 0;
174-
let transactionalSession = null;
175-
Parse.Cloud.beforeSave('MyObject', ({ database }) => {
176-
calls++;
177-
expect(database._transactionalSession).not.toEqual(null);
178-
if (transactionalSession) {
179-
expect(database._transactionalSession).toBe(transactionalSession);
180-
} else {
181-
transactionalSession = database._transactionalSession;
182-
}
183-
});
169+
spyOn(databaseAdapter, 'createObject').and.callThrough();
184170

185171
request({
186172
method: 'POST',
@@ -209,7 +195,10 @@ describe('batch', () => {
209195
expect(response.data[1].success.createdAt).toBeDefined();
210196
const query = new Parse.Query('MyObject');
211197
query.find().then(results => {
212-
expect(calls).toBe(2);
198+
expect(databaseAdapter.createObject.calls.count()).toBe(2);
199+
expect(databaseAdapter.createObject.calls.argsFor(0)[3]).toBe(
200+
databaseAdapter.createObject.calls.argsFor(1)[3]
201+
);
213202
expect(results.map(result => result.get('key')).sort()).toEqual([
214203
'value1',
215204
'value2',
@@ -219,7 +208,37 @@ describe('batch', () => {
219208
});
220209
});
221210

222-
it('should generate separate session for each call', done => {
211+
it('should not save anything when one operation fails in a transaction', done => {
212+
request({
213+
method: 'POST',
214+
headers: headers,
215+
url: 'http://localhost:8378/1/batch',
216+
body: JSON.stringify({
217+
requests: [
218+
{
219+
method: 'POST',
220+
path: '/1/classes/MyObject',
221+
body: { key: 'value1' },
222+
},
223+
{
224+
method: 'POST',
225+
path: '/1/classes/MyObject',
226+
body: { key: 10 },
227+
},
228+
],
229+
transaction: true,
230+
}),
231+
}).catch(error => {
232+
expect(error.data.error).toEqual('Could not add field key');
233+
const query = new Parse.Query('MyObject');
234+
query.find().then(results => {
235+
expect(results.length).toBe(0);
236+
done();
237+
});
238+
});
239+
});
240+
241+
xit('should generate separate session for each call', done => {
223242
let myObjectCalls = 0;
224243
//let myObjectTransactionalSession = null;
225244

spec/helper.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,7 @@ global.reconfigureServer = reconfigureServer;
417417
global.defaultConfiguration = defaultConfiguration;
418418
global.mockCustomAuthenticator = mockCustomAuthenticator;
419419
global.mockFacebookAuthenticator = mockFacebookAuthenticator;
420+
global.databaseAdapter = databaseAdapter;
420421
global.jfail = function(err) {
421422
fail(JSON.stringify(err));
422423
};

src/batch.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@ function handleBatch(router, req) {
107107
return { success: response.response };
108108
},
109109
error => {
110+
if (req.body.transaction) {
111+
return Promise.reject(error);
112+
}
110113
return { error: { code: error.code, error: error.message } };
111114
}
112115
);

src/triggers.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,6 @@ export function getRequestObject(
179179
log: config.loggerController,
180180
headers: config.headers,
181181
ip: config.ip,
182-
database: config.database,
183182
};
184183

185184
if (originalParseObject) {

0 commit comments

Comments
 (0)