Skip to content

Commit 718a871

Browse files
committed
Add E2E tests
1 parent 24cc493 commit 718a871

File tree

4 files changed

+107
-7
lines changed

4 files changed

+107
-7
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@
104104
"posttest": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=4.0.4} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone} MONGODB_STORAGE_ENGINE=${MONGODB_STORAGE_ENGINE:=mmapv1} mongodb-runner stop",
105105
"coverage": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=4.0.4} MONGODB_TOPOLOGY=${MONGODB_TOPOLOGY:=standalone} MONGODB_STORAGE_ENGINE=${MONGODB_STORAGE_ENGINE:=mmapv1} TESTING=1 nyc jasmine",
106106
"start": "node ./bin/parse-server",
107+
"prettier": "prettier --write {src,spec}/**/*.js",
107108
"prepare": "npm run build",
108109
"postinstall": "node -p 'require(\"./postinstall.js\")()'"
109110
},

spec/ParseLiveQuery.spec.js

Lines changed: 93 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
describe('ParseLiveQuery', function() {
3+
describe('ParseLiveQuery', function () {
44
it('can subscribe to query', async done => {
55
await reconfigureServer({
66
liveQuery: {
@@ -24,6 +24,97 @@ describe('ParseLiveQuery', function() {
2424
await object.save();
2525
});
2626

27+
it('can handle beforeConnect / beforeSubscribe hooks', async done => {
28+
await reconfigureServer({
29+
liveQuery: {
30+
classNames: ['TestObject'],
31+
},
32+
startLiveQueryServer: true,
33+
verbose: false,
34+
silent: true,
35+
});
36+
const object = new TestObject();
37+
await object.save();
38+
39+
Parse.Cloud.beforeSubscribe('TestObject', req => {
40+
expect(req.op).toBe('subscribe');
41+
expect(req.requestId).toBe(1);
42+
expect(req.query).toBeDefined();
43+
expect(req.user).toBeUndefined();
44+
});
45+
46+
Parse.Cloud.beforeConnect(req => {
47+
expect(req.event).toBe('connect');
48+
expect(req.clients).toBe(0);
49+
expect(req.subscriptions).toBe(0);
50+
expect(req.useMasterKey).toBe(false);
51+
expect(req.installationId).toBeDefined();
52+
expect(req.user).toBeUndefined();
53+
expect(req.sessionToken).toBeUndefined();
54+
expect(req.client).toBeDefined();
55+
});
56+
const query = new Parse.Query(TestObject);
57+
query.equalTo('objectId', object.id);
58+
const subscription = await query.subscribe();
59+
subscription.on('update', async object => {
60+
expect(object.get('foo')).toBe('bar');
61+
done();
62+
});
63+
object.set({ foo: 'bar' });
64+
await object.save();
65+
});
66+
67+
it('can handle beforeConnect error', async done => {
68+
await reconfigureServer({
69+
liveQuery: {
70+
classNames: ['TestObject'],
71+
},
72+
startLiveQueryServer: true,
73+
verbose: false,
74+
silent: true,
75+
});
76+
const object = new TestObject();
77+
await object.save();
78+
79+
Parse.Cloud.beforeConnect(() => {
80+
throw new Error('You shall not pass!');
81+
});
82+
Parse.LiveQuery.on('error', error => {
83+
expect(error).toBe('You shall not pass!');
84+
done();
85+
});
86+
const query = new Parse.Query(TestObject);
87+
query.equalTo('objectId', object.id);
88+
await query.subscribe();
89+
});
90+
91+
it('can handle beforeSubscribe error', async done => {
92+
await reconfigureServer({
93+
liveQuery: {
94+
classNames: ['TestObject'],
95+
},
96+
startLiveQueryServer: true,
97+
verbose: false,
98+
silent: true,
99+
});
100+
const object = new TestObject();
101+
await object.save();
102+
103+
Parse.Cloud.beforeSubscribe(TestObject, () => {
104+
throw new Error('You shall not subscribe!');
105+
});
106+
Parse.LiveQuery.on('error', error => {
107+
expect(error).toBe('You shall not subscribe!');
108+
});
109+
const query = new Parse.Query(TestObject);
110+
query.equalTo('objectId', object.id);
111+
const subscription = await query.subscribe();
112+
subscription.on('error', error => {
113+
expect(error).toBe('You shall not subscribe!');
114+
done();
115+
});
116+
});
117+
27118
it('handle invalid websocket payload length', async done => {
28119
await reconfigureServer({
29120
liveQuery: {
@@ -61,7 +152,7 @@ describe('ParseLiveQuery', function() {
61152
}, 1000);
62153
});
63154

64-
afterEach(async function(done) {
155+
afterEach(async function (done) {
65156
const client = await Parse.CoreManager.getLiveQueryController().getDefaultLiveQueryClient();
66157
client.close();
67158
// Wait for live query client to disconnect

src/LiveQuery/Client.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,17 @@ class Client {
6262
parseWebSocket: any,
6363
code: number,
6464
error: string,
65-
reconnect: boolean = true
65+
reconnect: boolean = true,
66+
requestId: number | void = null
6667
): void {
6768
Client.pushResponse(
6869
parseWebSocket,
6970
JSON.stringify({
7071
op: 'error',
71-
error: error,
72-
code: code,
73-
reconnect: reconnect,
72+
error,
73+
code,
74+
reconnect,
75+
requestId,
7476
})
7577
);
7678
}

src/LiveQuery/ParseLiveQueryServer.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,13 @@ class ParseLiveQueryServer {
728728
installationId: client.installationId,
729729
});
730730
} catch (e) {
731-
Client.pushError(parseWebsocket, e.code || 101, e.message || e, false);
731+
Client.pushError(
732+
parseWebsocket,
733+
e.code || 101,
734+
e.message || e,
735+
false,
736+
request.requestId
737+
);
732738
logger.error(
733739
`Failed running beforeSubscribe on ${className} for session ${request.sessionToken} with:\n Error: ` +
734740
JSON.stringify(e)

0 commit comments

Comments
 (0)