Skip to content

Commit 5404ba9

Browse files
committed
Independent sessions test
1 parent 47be348 commit 5404ba9

File tree

2 files changed

+159
-0
lines changed

2 files changed

+159
-0
lines changed

spec/batch.spec.js

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,12 @@ describe('batch', () => {
6969
});
7070

7171
it('should handle a batch request without transaction', done => {
72+
let calls = 0;
73+
Parse.Cloud.beforeSave('MyObject', ({ config }) => {
74+
calls++;
75+
expect(config.database._transactionalSession).toEqual(null);
76+
});
77+
7278
request({
7379
method: 'POST',
7480
headers: headers,
@@ -95,6 +101,7 @@ describe('batch', () => {
95101
expect(response.data[1].success.createdAt).toBeDefined();
96102
const query = new Parse.Query('MyObject');
97103
query.find().then(results => {
104+
expect(calls).toBe(2);
98105
expect(results.map(result => result.get('key')).sort()).toEqual([
99106
'value1',
100107
'value2',
@@ -105,6 +112,12 @@ describe('batch', () => {
105112
});
106113

107114
it('should handle a batch request with transaction = false', done => {
115+
let calls = 0;
116+
Parse.Cloud.beforeSave('MyObject', ({ config }) => {
117+
calls++;
118+
expect(config.database._transactionalSession).toEqual(null);
119+
});
120+
108121
request({
109122
method: 'POST',
110123
headers: headers,
@@ -132,6 +145,7 @@ describe('batch', () => {
132145
expect(response.data[1].success.createdAt).toBeDefined();
133146
const query = new Parse.Query('MyObject');
134147
query.find().then(results => {
148+
expect(calls).toBe(2);
135149
expect(results.map(result => result.get('key')).sort()).toEqual([
136150
'value1',
137151
'value2',
@@ -142,6 +156,20 @@ describe('batch', () => {
142156
});
143157

144158
it('should handle a batch request with transaction = true', done => {
159+
let calls = 0;
160+
let transactionalSession = null;
161+
Parse.Cloud.beforeSave('MyObject', ({ config }) => {
162+
calls++;
163+
expect(config.database._transactionalSession).not.toEqual(null);
164+
if (transactionalSession) {
165+
expect(config.database._transactionalSession).toBe(
166+
transactionalSession
167+
);
168+
} else {
169+
transactionalSession = config.database._transactionalSession;
170+
}
171+
});
172+
145173
request({
146174
method: 'POST',
147175
headers: headers,
@@ -169,6 +197,7 @@ describe('batch', () => {
169197
expect(response.data[1].success.createdAt).toBeDefined();
170198
const query = new Parse.Query('MyObject');
171199
query.find().then(results => {
200+
expect(calls).toBe(2);
172201
expect(results.map(result => result.get('key')).sort()).toEqual([
173202
'value1',
174203
'value2',
@@ -177,4 +206,133 @@ describe('batch', () => {
177206
});
178207
});
179208
});
209+
210+
it('should generate separate session for each call', done => {
211+
let myObjectCalls = 0;
212+
let myObjectTransactionalSession = null;
213+
214+
Parse.Cloud.beforeSave('MyObject', ({ config }) => {
215+
myObjectCalls++;
216+
expect(config.database._transactionalSession).not.toEqual(null);
217+
if (myObjectTransactionalSession) {
218+
expect(config.database._transactionalSession).toBe(
219+
myObjectTransactionalSession
220+
);
221+
} else {
222+
myObjectTransactionalSession = config.database._transactionalSession;
223+
}
224+
225+
if (myObjectCalls === 1) {
226+
return request({
227+
method: 'POST',
228+
headers: headers,
229+
url: 'http://localhost:8378/1/batch',
230+
body: JSON.stringify({
231+
requests: [
232+
{
233+
method: 'POST',
234+
path: '/1/classes/MyObject2',
235+
body: { key: 'value1' },
236+
},
237+
{
238+
method: 'POST',
239+
path: '/1/classes/MyObject2',
240+
body: { key: 'value2' },
241+
},
242+
],
243+
transaction: true,
244+
}),
245+
}).then(() => Promise.resolve());
246+
}
247+
});
248+
249+
let myObject2Calls = 0;
250+
let myObject2TransactionalSession = null;
251+
Parse.Cloud.beforeSave('MyObject2', ({ config }) => {
252+
myObject2Calls++;
253+
expect(config.database._transactionalSession).not.toEqual(null);
254+
if (myObject2TransactionalSession) {
255+
expect(config.database._transactionalSession).toBe(
256+
myObject2TransactionalSession
257+
);
258+
} else {
259+
myObject2TransactionalSession = config.database._transactionalSession;
260+
}
261+
262+
if (myObject2Calls === 1) {
263+
return request({
264+
method: 'POST',
265+
headers: headers,
266+
url: 'http://localhost:8378/1/batch',
267+
body: JSON.stringify({
268+
requests: [
269+
{
270+
method: 'POST',
271+
path: '/1/classes/MyObject3',
272+
body: { key: 'value1' },
273+
},
274+
{
275+
method: 'POST',
276+
path: '/1/classes/MyObject3',
277+
body: { key: 'value2' },
278+
},
279+
],
280+
}),
281+
}).then(() => Promise.resolve());
282+
}
283+
});
284+
285+
let myObject3Calls = 0;
286+
Parse.Cloud.beforeSave('MyObject3', ({ config }) => {
287+
myObject3Calls++;
288+
expect(config.database._transactionalSession).toEqual(null);
289+
});
290+
291+
request({
292+
method: 'POST',
293+
headers: headers,
294+
url: 'http://localhost:8378/1/batch',
295+
body: JSON.stringify({
296+
requests: [
297+
{
298+
method: 'POST',
299+
path: '/1/classes/MyObject',
300+
body: { key: 'value1' },
301+
},
302+
{
303+
method: 'POST',
304+
path: '/1/classes/MyObject',
305+
body: { key: 'value2' },
306+
},
307+
],
308+
transaction: true,
309+
}),
310+
}).then(() => {
311+
const query = new Parse.Query('MyObject');
312+
query.find().then(results => {
313+
expect(myObjectCalls).toBe(2);
314+
expect(results.map(result => result.get('key')).sort()).toEqual([
315+
'value1',
316+
'value2',
317+
]);
318+
const query = new Parse.Query('MyObject2');
319+
query.find().then(results => {
320+
expect(myObject2Calls).toBe(2);
321+
expect(results.map(result => result.get('key')).sort()).toEqual([
322+
'value1',
323+
'value2',
324+
]);
325+
const query = new Parse.Query('MyObject3');
326+
query.find().then(results => {
327+
expect(myObject3Calls).toBe(2);
328+
expect(results.map(result => result.get('key')).sort()).toEqual([
329+
'value1',
330+
'value2',
331+
]);
332+
done();
333+
});
334+
});
335+
});
336+
});
337+
});
180338
});

src/triggers.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ export function getRequestObject(
179179
log: config.loggerController,
180180
headers: config.headers,
181181
ip: config.ip,
182+
config: config,
182183
};
183184

184185
if (originalParseObject) {

0 commit comments

Comments
 (0)