From cdcaf51c9b3b34f72537e60e36db644eb93667b2 Mon Sep 17 00:00:00 2001 From: dblythy Date: Thu, 10 Mar 2022 18:11:56 +1100 Subject: [PATCH 01/11] fix: improved LQ error logging --- spec/ParseLiveQuery.spec.js | 87 +++++++++++++++++++++++++++ src/LiveQuery/ParseLiveQueryServer.js | 22 +++++-- src/triggers.js | 28 ++++----- 3 files changed, 114 insertions(+), 23 deletions(-) diff --git a/spec/ParseLiveQuery.spec.js b/spec/ParseLiveQuery.spec.js index 65d1836c5f..462a1b6e0a 100644 --- a/spec/ParseLiveQuery.spec.js +++ b/spec/ParseLiveQuery.spec.js @@ -319,6 +319,39 @@ describe('ParseLiveQuery', function () { await object.save(); }); + it('can log on afterLiveQueryEvent throw', async () => { + await reconfigureServer({ + liveQuery: { + classNames: ['TestObject'], + }, + startLiveQueryServer: true, + verbose: false, + silent: true, + }); + + const object = new TestObject(); + await object.save(); + + const logger = require('../lib/logger').logger; + spyOn(logger, 'error').and.callFake(() => {}); + + Parse.Cloud.afterLiveQueryEvent('TestObject', () => { + /* eslint-disable no-undef */ + foo.bar(); + /* eslint-enable no-undef */ + }); + + const query = new Parse.Query(TestObject); + query.equalTo('objectId', object.id); + const subscription = await query.subscribe(); + object.set({ foo: 'bar' }); + await object.save(); + await new Promise(resolve => subscription.on('error', resolve)); + expect(logger.error).toHaveBeenCalledWith( + `Failed running afterLiveQueryEvent on class TestObject for event update with session undefined with:\n Error: {"message":"foo is not defined","code":141}` + ); + }); + it('can handle afterEvent sendEvent to false', async done => { await reconfigureServer({ liveQuery: { @@ -528,6 +561,30 @@ describe('ParseLiveQuery', function () { await query.subscribe(); }); + it('can log on beforeConnect throw', async () => { + await reconfigureServer({ + liveQuery: { + classNames: ['TestObject'], + }, + startLiveQueryServer: true, + verbose: false, + silent: true, + }); + + const logger = require('../lib/logger').logger; + spyOn(logger, 'error').and.callFake(() => {}); + Parse.Cloud.beforeConnect(() => { + /* eslint-disable no-undef */ + foo.bar(); + /* eslint-enable no-undef */ + }); + new Parse.Query(TestObject).subscribe(); + await new Promise(resolve => Parse.LiveQuery.on('error', resolve)); + expect(logger.error).toHaveBeenCalledWith( + `Failed running beforeConnect for session undefined with:\n Error: {"message":"foo is not defined","code":141}` + ); + }); + it('can handle beforeSubscribe error', async done => { await reconfigureServer({ liveQuery: { @@ -556,6 +613,36 @@ describe('ParseLiveQuery', function () { }); }); + it('can log on beforeSubscribe error', async () => { + await reconfigureServer({ + liveQuery: { + classNames: ['TestObject'], + }, + startLiveQueryServer: true, + verbose: false, + silent: true, + }); + + const logger = require('../lib/logger').logger; + spyOn(logger, 'error').and.callFake(() => {}); + + Parse.Cloud.beforeSubscribe(TestObject, () => { + /* eslint-disable no-undef */ + foo.bar(); + /* eslint-enable no-undef */ + }); + Parse.LiveQuery.on('error', error => { + expect(error).toBe('You shall not subscribe!'); + }); + const query = new Parse.Query(TestObject); + const subscription = await query.subscribe(); + await new Promise(resolve => subscription.on('error', resolve)); + + expect(logger.error).toHaveBeenCalledWith( + `Failed running beforeSubscribe on TestObject for session undefined with:\n Error: {"message":"foo is not defined","code":141}` + ); + }); + it('can handle mutate beforeSubscribe query', async done => { await reconfigureServer({ liveQuery: { diff --git a/src/LiveQuery/ParseLiveQueryServer.js b/src/LiveQuery/ParseLiveQueryServer.js index 5a44ae5c8b..0e3492613a 100644 --- a/src/LiveQuery/ParseLiveQueryServer.js +++ b/src/LiveQuery/ParseLiveQueryServer.js @@ -10,7 +10,7 @@ import { ParsePubSub } from './ParsePubSub'; import SchemaController from '../Controllers/SchemaController'; import _ from 'lodash'; import { v4 as uuidv4 } from 'uuid'; -import { runLiveQueryEventHandlers, getTrigger, runTrigger } from '../triggers'; +import { runLiveQueryEventHandlers, getTrigger, runTrigger, resolveError } from '../triggers'; import { getAuthForSessionToken, Auth } from '../Auth'; import { getCacheController } from '../Controllers'; import LRU from 'lru-cache'; @@ -187,7 +187,8 @@ class ParseLiveQueryServer { deletedParseObject.className = className; } client.pushDelete(requestId, deletedParseObject); - } catch (error) { + } catch (e) { + const error = resolveError(e); Client.pushError( client.parseWebSocket, error.code || 141, @@ -341,7 +342,8 @@ class ParseLiveQueryServer { if (client[functionName]) { client[functionName](requestId, currentParseObject, originalParseObject); } - } catch (error) { + } catch (e) { + const error = resolveError(e); Client.pushError( client.parseWebSocket, error.code || 141, @@ -664,7 +666,8 @@ class ParseLiveQueryServer { logger.info(`Create new client: ${parseWebsocket.clientId}`); client.pushConnect(); runLiveQueryEventHandlers(req); - } catch (error) { + } catch (e) { + const error = resolveError(e); Client.pushError(parseWebsocket, error.code || 141, error.message || error, false); logger.error( `Failed running beforeConnect for session ${request.sessionToken} with:\n Error: ` + @@ -779,10 +782,17 @@ class ParseLiveQueryServer { installationId: client.installationId, }); } catch (e) { - Client.pushError(parseWebsocket, e.code || 141, e.message || e, false, request.requestId); + const error = resolveError(e); + Client.pushError( + parseWebsocket, + error.code || 141, + error.message || error, + false, + request.requestId + ); logger.error( `Failed running beforeSubscribe on ${className} for session ${request.sessionToken} with:\n Error: ` + - JSON.stringify(e) + JSON.stringify(error) ); } } diff --git a/src/triggers.js b/src/triggers.js index cdd4353128..4e008e4003 100644 --- a/src/triggers.js +++ b/src/triggers.js @@ -577,28 +577,22 @@ export function maybeRunQueryTrigger( ); } -export function resolveError(message, defaultOpts) { - if (!defaultOpts) { - defaultOpts = {}; - } - if (!message) { - return new Parse.Error( - defaultOpts.code || Parse.Error.SCRIPT_FAILED, - defaultOpts.message || 'Script failed.' - ); +export function resolveError(e, defaultOpts = {}) { + const { code = Parse.Error.SCRIPT_FAILED, message = 'Script failed.' } = defaultOpts; + if (!e) { + return new Parse.Error(code, message); } - if (message instanceof Parse.Error) { - return message; + if (e instanceof Parse.Error) { + return e; } - const code = defaultOpts.code || Parse.Error.SCRIPT_FAILED; // If it's an error, mark it as a script failed - if (typeof message === 'string') { - return new Parse.Error(code, message); + if (typeof e === 'string') { + return new Parse.Error(code, e); } - const error = new Parse.Error(code, message.message || message); - if (message instanceof Error) { - error.stack = message.stack; + const error = new Parse.Error(code, e.message || message); + if (e instanceof Error) { + error.stack = e.stack; } return error; } From a10b844fa4417ef1f7a108d2b3186823dc8a1b36 Mon Sep 17 00:00:00 2001 From: dblythy Date: Thu, 10 Mar 2022 18:14:18 +1100 Subject: [PATCH 02/11] Update ParseLiveQueryServer.js --- src/LiveQuery/ParseLiveQueryServer.js | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/src/LiveQuery/ParseLiveQueryServer.js b/src/LiveQuery/ParseLiveQueryServer.js index 0e3492613a..d4618b1cfd 100644 --- a/src/LiveQuery/ParseLiveQueryServer.js +++ b/src/LiveQuery/ParseLiveQueryServer.js @@ -189,13 +189,7 @@ class ParseLiveQueryServer { client.pushDelete(requestId, deletedParseObject); } catch (e) { const error = resolveError(e); - Client.pushError( - client.parseWebSocket, - error.code || 141, - error.message || error, - false, - requestId - ); + Client.pushError(client.parseWebSocket, error.code, error.message, false, requestId); logger.error( `Failed running afterLiveQueryEvent on class ${className} for event ${res.event} with session ${res.sessionToken} with:\n Error: ` + JSON.stringify(error) @@ -344,13 +338,7 @@ class ParseLiveQueryServer { } } catch (e) { const error = resolveError(e); - Client.pushError( - client.parseWebSocket, - error.code || 141, - error.message || error, - false, - requestId - ); + Client.pushError(client.parseWebSocket, error.code, error.message, false, requestId); logger.error( `Failed running afterLiveQueryEvent on class ${className} for event ${res.event} with session ${res.sessionToken} with:\n Error: ` + JSON.stringify(error) @@ -668,7 +656,7 @@ class ParseLiveQueryServer { runLiveQueryEventHandlers(req); } catch (e) { const error = resolveError(e); - Client.pushError(parseWebsocket, error.code || 141, error.message || error, false); + Client.pushError(parseWebsocket, error.code, error.message, false); logger.error( `Failed running beforeConnect for session ${request.sessionToken} with:\n Error: ` + JSON.stringify(error) @@ -783,13 +771,7 @@ class ParseLiveQueryServer { }); } catch (e) { const error = resolveError(e); - Client.pushError( - parseWebsocket, - error.code || 141, - error.message || error, - false, - request.requestId - ); + Client.pushError(parseWebsocket, error.code, error.message, false, request.requestId); logger.error( `Failed running beforeSubscribe on ${className} for session ${request.sessionToken} with:\n Error: ` + JSON.stringify(error) From 7570d2b46e858d4eedcc229f671ce70615dae19d Mon Sep 17 00:00:00 2001 From: dblythy Date: Thu, 10 Mar 2022 18:49:29 +1100 Subject: [PATCH 03/11] refactor hooks error --- spec/ParseHooks.spec.js | 7 +++---- spec/ParseLiveQuery.spec.js | 1 + src/triggers.js | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/spec/ParseHooks.spec.js b/spec/ParseHooks.spec.js index d5d980d3d0..70907a5a7e 100644 --- a/spec/ParseHooks.spec.js +++ b/spec/ParseHooks.spec.js @@ -441,7 +441,7 @@ describe('Hooks', () => { it('should run the function on the test server (error handling)', done => { app.post('/SomeFunctionError', function (req, res) { - res.json({ error: { code: 1337, error: 'hacking that one!' } }); + res.json({ error: { code: 1337, message: 'hacking that one!' } }); }); // The function is deleted as the DB is dropped between calls Parse.Hooks.createFunction('SOME_TEST_FUNCTION', hookServerURL + '/SomeFunctionError') @@ -464,9 +464,8 @@ describe('Hooks', () => { expect(err).not.toBe(undefined); expect(err).not.toBe(null); if (err) { - expect(err.code).toBe(Parse.Error.SCRIPT_FAILED); - expect(err.message.code).toEqual(1337); - expect(err.message.error).toEqual('hacking that one!'); + expect(err.code).toBe(1337); + expect(err.message).toEqual('hacking that one!'); } done(); } diff --git a/spec/ParseLiveQuery.spec.js b/spec/ParseLiveQuery.spec.js index 904e1ef990..046de7e556 100644 --- a/spec/ParseLiveQuery.spec.js +++ b/spec/ParseLiveQuery.spec.js @@ -618,6 +618,7 @@ describe('ParseLiveQuery', function () { }); new Parse.Query(TestObject).subscribe(); await new Promise(resolve => Parse.LiveQuery.on('error', resolve)); + Parse.LiveQuery.removeAllListeners('error'); expect(logger.error).toHaveBeenCalledWith( `Failed running beforeConnect for session undefined with:\n Error: {"message":"foo is not defined","code":141}` ); diff --git a/src/triggers.js b/src/triggers.js index c4abbaf16c..0d3e3926c2 100644 --- a/src/triggers.js +++ b/src/triggers.js @@ -612,7 +612,8 @@ export function resolveError(e, defaultOpts = {}) { if (typeof e === 'string') { return new Parse.Error(code, e); } - const error = new Parse.Error(code, e.message || message); + const error = new Parse.Error(e.code || code, e.message || message); + console.log(error); if (e instanceof Error) { error.stack = e.stack; } From ea57032bb7e2c7d1a628344b543bbd8cf1ab5da7 Mon Sep 17 00:00:00 2001 From: dblythy Date: Thu, 10 Mar 2022 18:50:30 +1100 Subject: [PATCH 04/11] Update triggers.js --- src/triggers.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/triggers.js b/src/triggers.js index 0d3e3926c2..3ddcc8e703 100644 --- a/src/triggers.js +++ b/src/triggers.js @@ -613,7 +613,6 @@ export function resolveError(e, defaultOpts = {}) { return new Parse.Error(code, e); } const error = new Parse.Error(e.code || code, e.message || message); - console.log(error); if (e instanceof Error) { error.stack = e.stack; } From f144a5a635d722acab18d82522893a0a78dc7162 Mon Sep 17 00:00:00 2001 From: dblythy Date: Thu, 10 Mar 2022 19:02:30 +1100 Subject: [PATCH 05/11] Update ParseLiveQuery.spec.js --- spec/ParseLiveQuery.spec.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/spec/ParseLiveQuery.spec.js b/spec/ParseLiveQuery.spec.js index 046de7e556..7df70649ff 100644 --- a/spec/ParseLiveQuery.spec.js +++ b/spec/ParseLiveQuery.spec.js @@ -670,9 +670,7 @@ describe('ParseLiveQuery', function () { foo.bar(); /* eslint-enable no-undef */ }); - Parse.LiveQuery.on('error', error => { - expect(error).toBe('You shall not subscribe!'); - }); + const query = new Parse.Query(TestObject); const subscription = await query.subscribe(); await new Promise(resolve => subscription.on('error', resolve)); From a758aece0257e4bfd16d54b2601a6514ddd823b8 Mon Sep 17 00:00:00 2001 From: dblythy Date: Thu, 10 Mar 2022 19:15:32 +1100 Subject: [PATCH 06/11] Update ParseLiveQuery.spec.js --- spec/ParseLiveQuery.spec.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/spec/ParseLiveQuery.spec.js b/spec/ParseLiveQuery.spec.js index 7df70649ff..fe5f5ded68 100644 --- a/spec/ParseLiveQuery.spec.js +++ b/spec/ParseLiveQuery.spec.js @@ -4,6 +4,13 @@ const Config = require('../lib/Config'); const validatorFail = () => { throw 'you are not authorized'; }; +const sessionToken = () => { + const current = Parse.User.current(); + if (!current) { + return undefined; + } + return current.getSessionToken(); +}; describe('ParseLiveQuery', function () { it('access user on onLiveQueryEvent disconnect', async done => { @@ -348,7 +355,7 @@ describe('ParseLiveQuery', function () { await object.save(); await new Promise(resolve => subscription.on('error', resolve)); expect(logger.error).toHaveBeenCalledWith( - `Failed running afterLiveQueryEvent on class TestObject for event update with session undefined with:\n Error: {"message":"foo is not defined","code":141}` + `Failed running afterLiveQueryEvent on class TestObject for event update with session ${sessionToken()} with:\n Error: {"message":"foo is not defined","code":141}` ); }); @@ -620,7 +627,7 @@ describe('ParseLiveQuery', function () { await new Promise(resolve => Parse.LiveQuery.on('error', resolve)); Parse.LiveQuery.removeAllListeners('error'); expect(logger.error).toHaveBeenCalledWith( - `Failed running beforeConnect for session undefined with:\n Error: {"message":"foo is not defined","code":141}` + `Failed running beforeConnect for session ${sessionToken()} with:\n Error: {"message":"foo is not defined","code":141}` ); }); From adf20af4558710abbf4a005d1be76523317c596f Mon Sep 17 00:00:00 2001 From: dblythy Date: Thu, 10 Mar 2022 21:18:56 +1100 Subject: [PATCH 07/11] add token check --- spec/ParseLiveQuery.spec.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/spec/ParseLiveQuery.spec.js b/spec/ParseLiveQuery.spec.js index fe5f5ded68..d9b79bc588 100644 --- a/spec/ParseLiveQuery.spec.js +++ b/spec/ParseLiveQuery.spec.js @@ -4,13 +4,6 @@ const Config = require('../lib/Config'); const validatorFail = () => { throw 'you are not authorized'; }; -const sessionToken = () => { - const current = Parse.User.current(); - if (!current) { - return undefined; - } - return current.getSessionToken(); -}; describe('ParseLiveQuery', function () { it('access user on onLiveQueryEvent disconnect', async done => { @@ -342,7 +335,9 @@ describe('ParseLiveQuery', function () { const logger = require('../lib/logger').logger; spyOn(logger, 'error').and.callFake(() => {}); - Parse.Cloud.afterLiveQueryEvent('TestObject', () => { + let session = undefined; + Parse.Cloud.afterLiveQueryEvent('TestObject', ({ sessionToken }) => { + session = sessionToken; /* eslint-disable no-undef */ foo.bar(); /* eslint-enable no-undef */ @@ -355,7 +350,7 @@ describe('ParseLiveQuery', function () { await object.save(); await new Promise(resolve => subscription.on('error', resolve)); expect(logger.error).toHaveBeenCalledWith( - `Failed running afterLiveQueryEvent on class TestObject for event update with session ${sessionToken()} with:\n Error: {"message":"foo is not defined","code":141}` + `Failed running afterLiveQueryEvent on class TestObject for event update with session ${session} with:\n Error: {"message":"foo is not defined","code":141}` ); }); @@ -618,7 +613,9 @@ describe('ParseLiveQuery', function () { const logger = require('../lib/logger').logger; spyOn(logger, 'error').and.callFake(() => {}); - Parse.Cloud.beforeConnect(() => { + let token = undefined; + Parse.Cloud.beforeConnect(({ sessionToken }) => { + token = sessionToken; /* eslint-disable no-undef */ foo.bar(); /* eslint-enable no-undef */ @@ -627,7 +624,7 @@ describe('ParseLiveQuery', function () { await new Promise(resolve => Parse.LiveQuery.on('error', resolve)); Parse.LiveQuery.removeAllListeners('error'); expect(logger.error).toHaveBeenCalledWith( - `Failed running beforeConnect for session ${sessionToken()} with:\n Error: {"message":"foo is not defined","code":141}` + `Failed running beforeConnect for session ${token} with:\n Error: {"message":"foo is not defined","code":141}` ); }); From 13d46115690fb04d1df2a8eef8864b2949b451a9 Mon Sep 17 00:00:00 2001 From: dblythy Date: Thu, 10 Mar 2022 22:08:38 +1100 Subject: [PATCH 08/11] Update triggers.js --- src/triggers.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/triggers.js b/src/triggers.js index 3ddcc8e703..adf9bb0c25 100644 --- a/src/triggers.js +++ b/src/triggers.js @@ -612,10 +612,13 @@ export function resolveError(e, defaultOpts = {}) { if (typeof e === 'string') { return new Parse.Error(code, e); } - const error = new Parse.Error(e.code || code, e.message || message); + const error = new Parse.Error(code, e.message || message); if (e instanceof Error) { error.stack = e.stack; } + if (Number.isInteger(e.code)) { + error.code = e.code; + } return error; } export function maybeRunValidator(request, functionName, auth) { From 62c87152c87ade15ee9255c35527369902792e48 Mon Sep 17 00:00:00 2001 From: Manuel <5673677+mtrezza@users.noreply.github.com> Date: Fri, 18 Mar 2022 16:41:27 +0100 Subject: [PATCH 09/11] docs: improve reverting in CONTRIBUTION guide (#7866) --- CONTRIBUTING.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index df5df279e5..3e0752541c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -363,6 +363,22 @@ If the commit reverts a previous commit, use the prefix `revert:`, followed by t This reverts commit 1234567890abcdef. ``` +⚠️ A `revert` prefix will *always* trigger a release. Generally, a commit that did not trigger a release when it was initially merged should also not trigger a release when it is reverted. For example, do not use the `revert` prefix when reverting a commit that has a `ci` prefix: + + ``` + ci: add something + ``` + is reverted with: + ``` + ci: remove something + ``` + instead of: + ``` + revert: ci: add something + + This reverts commit 1234567890abcdef. + ``` + ### Major Release / Long-Term-Support Long-Term-Support (LTS) is provided for the previous Parse Server major version. For example, Parse Server 4.x will receive security updates until Parse Server 5.x is superseded by Parse Server 6.x and becomes the new LTS version. While the current major version is published on branch `release`, a LTS version is published on branch `release-#.x.x`, for example `release-4.x.x` for the Parse Server 4.x LTS branch. From 26e0545c0262e4011a75343b817bd4734d1e74df Mon Sep 17 00:00:00 2001 From: dblythy Date: Wed, 23 Mar 2022 11:39:41 +1100 Subject: [PATCH 10/11] revert refactoring --- spec/ParseHooks.spec.js | 4 +++- src/triggers.js | 31 +++++++++++++++++-------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/spec/ParseHooks.spec.js b/spec/ParseHooks.spec.js index 70907a5a7e..1e141a5874 100644 --- a/spec/ParseHooks.spec.js +++ b/spec/ParseHooks.spec.js @@ -465,7 +465,9 @@ describe('Hooks', () => { expect(err).not.toBe(null); if (err) { expect(err.code).toBe(1337); - expect(err.message).toEqual('hacking that one!'); + expect(err.code).toBe(Parse.Error.SCRIPT_FAILED); + expect(err.message.code).toEqual(1337); + expect(err.message.error).toEqual('hacking that one!'); } done(); } diff --git a/src/triggers.js b/src/triggers.js index adf9bb0c25..8320b5fb74 100644 --- a/src/triggers.js +++ b/src/triggers.js @@ -599,25 +599,28 @@ export function maybeRunQueryTrigger( ); } -export function resolveError(e, defaultOpts = {}) { - const { code = Parse.Error.SCRIPT_FAILED, message = 'Script failed.' } = defaultOpts; - if (!e) { - return new Parse.Error(code, message); +export function resolveError(message, defaultOpts) { + if (!defaultOpts) { + defaultOpts = {}; + } + if (!message) { + return new Parse.Error( + defaultOpts.code || Parse.Error.SCRIPT_FAILED, + defaultOpts.message || 'Script failed.' + ); } - if (e instanceof Parse.Error) { - return e; + if (message instanceof Parse.Error) { + return message; } + const code = defaultOpts.code || Parse.Error.SCRIPT_FAILED; // If it's an error, mark it as a script failed - if (typeof e === 'string') { - return new Parse.Error(code, e); - } - const error = new Parse.Error(code, e.message || message); - if (e instanceof Error) { - error.stack = e.stack; + if (typeof message === 'string') { + return new Parse.Error(code, message); } - if (Number.isInteger(e.code)) { - error.code = e.code; + const error = new Parse.Error(code, message.message || message); + if (message instanceof Error) { + error.stack = message.stack; } return error; } From 58e5f9bf99dd8d4614a8fbdaea230833e97b849d Mon Sep 17 00:00:00 2001 From: dblythy Date: Wed, 23 Mar 2022 11:41:23 +1100 Subject: [PATCH 11/11] Update ParseHooks.spec.js --- spec/ParseHooks.spec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spec/ParseHooks.spec.js b/spec/ParseHooks.spec.js index 1e141a5874..d5d980d3d0 100644 --- a/spec/ParseHooks.spec.js +++ b/spec/ParseHooks.spec.js @@ -441,7 +441,7 @@ describe('Hooks', () => { it('should run the function on the test server (error handling)', done => { app.post('/SomeFunctionError', function (req, res) { - res.json({ error: { code: 1337, message: 'hacking that one!' } }); + res.json({ error: { code: 1337, error: 'hacking that one!' } }); }); // The function is deleted as the DB is dropped between calls Parse.Hooks.createFunction('SOME_TEST_FUNCTION', hookServerURL + '/SomeFunctionError') @@ -464,7 +464,6 @@ describe('Hooks', () => { expect(err).not.toBe(undefined); expect(err).not.toBe(null); if (err) { - expect(err.code).toBe(1337); expect(err.code).toBe(Parse.Error.SCRIPT_FAILED); expect(err.message.code).toEqual(1337); expect(err.message.error).toEqual('hacking that one!');