From 0eff7864d7b80c155b556ba6f16df92601b6b517 Mon Sep 17 00:00:00 2001 From: Sam Ilic Date: Sat, 13 Apr 2019 21:44:46 +1000 Subject: [PATCH 01/10] Fix failing tests --- spec/MongoStorageAdapter.spec.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/spec/MongoStorageAdapter.spec.js b/spec/MongoStorageAdapter.spec.js index 8ca5db2ef3..ec40c1080d 100644 --- a/spec/MongoStorageAdapter.spec.js +++ b/spec/MongoStorageAdapter.spec.js @@ -6,6 +6,11 @@ const { MongoClient } = require('mongodb'); const databaseURI = 'mongodb://localhost:27017/parseServerMongoAdapterTestDatabase'; +const fakeClient = { + s: { options: { dbName: null } }, + db: () => null, +}; + // These tests are specific to the mongo storage adapter + mongo storage format // and will eventually be moved into their own repo describe_only_db('mongo')('MongoStorageAdapter', () => { @@ -16,7 +21,7 @@ describe_only_db('mongo')('MongoStorageAdapter', () => { }); it('auto-escapes symbols in auth information', () => { - spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(null)); + spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(fakeClient)); new MongoStorageAdapter({ uri: 'mongodb://user!with@+ symbols:password!with@+ symbols@localhost:1234/parse', @@ -28,7 +33,7 @@ describe_only_db('mongo')('MongoStorageAdapter', () => { }); it("doesn't double escape already URI-encoded information", () => { - spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(null)); + spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(fakeClient)); new MongoStorageAdapter({ uri: 'mongodb://user!with%40%2B%20symbols:password!with%40%2B%20symbols@localhost:1234/parse', @@ -41,7 +46,7 @@ describe_only_db('mongo')('MongoStorageAdapter', () => { // https://github.com/parse-community/parse-server/pull/148#issuecomment-180407057 it('preserves replica sets', () => { - spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(null)); + spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(fakeClient)); new MongoStorageAdapter({ uri: 'mongodb://test:testpass@ds056315-a0.mongolab.com:59325,ds059315-a1.mongolab.com:59315/testDBname?replicaSet=rs-ds059415', From 5549dd7d00dde139df83d910b29a82b610f9844f Mon Sep 17 00:00:00 2001 From: Arthur Cinader <700572+acinader@users.noreply.github.com> Date: Sun, 14 Apr 2019 14:06:48 -0500 Subject: [PATCH 02/10] just ignore the test for now. --- spec/index.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/index.spec.js b/spec/index.spec.js index 6cebb23bc2..40f2731434 100644 --- a/spec/index.spec.js +++ b/spec/index.spec.js @@ -57,7 +57,7 @@ describe('server', () => { }); }); - it('fails if database is unreachable', done => { + xit('fails if database is unreachable', done => { reconfigureServer({ databaseAdapter: new MongoStorageAdapter({ uri: 'mongodb://fake:fake@localhost:43605/drew3', From 5705b49fd424b20aeb7686a4c6e70da077ca992b Mon Sep 17 00:00:00 2001 From: = Date: Wed, 1 May 2019 16:00:33 -0700 Subject: [PATCH 03/10] Bumping jasmine --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cc54ae3444..1d6a423420 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "flow-bin": "0.98.0", "gaze": "1.1.3", "husky": "2.1.0", - "jasmine": "3.1.0", + "jasmine": "3.4.0", "jasmine-spec-reporter": "4.2.1", "jsdoc": "3.5.5", "jsdoc-babel": "0.5.0", From 30f7b57f00fcb90dbf1b218b1b1d89c639e07664 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 1 May 2019 22:46:09 -0700 Subject: [PATCH 04/10] Fix pg unhandled exception --- spec/ParseServer.spec.js | 16 +++++++++------- src/ParseServer.js | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/spec/ParseServer.spec.js b/spec/ParseServer.spec.js index 8ecd5a6534..be61e252a8 100644 --- a/spec/ParseServer.spec.js +++ b/spec/ParseServer.spec.js @@ -64,13 +64,15 @@ describe('Server Url Checks', () => { databaseAdapter, }); const parseServer = ParseServer.start(newConfiguration, () => { - parseServer.handleShutdown(); - parseServer.server.close(err => { - if (err) { - done.fail('Close Server Error'); - } - reconfigureServer({}).then(() => { - done(); + parseServer.dbInitPromise.then(() => { + parseServer.handleShutdown(); + parseServer.server.close(err => { + if (err) { + done.fail('Close Server Error'); + } + reconfigureServer({}).then(() => { + done(); + }); }); }); }); diff --git a/src/ParseServer.js b/src/ParseServer.js index 02621ff75d..1e8cfa08a1 100644 --- a/src/ParseServer.js +++ b/src/ParseServer.js @@ -96,12 +96,12 @@ class ParseServer { this.config = Config.put(Object.assign({}, options, allControllers)); logging.setLogger(loggerController); - const dbInitPromise = databaseController.performInitialization(); + this.dbInitPromise = databaseController.performInitialization(); hooksController.load(); // Note: Tests will start to fail if any validation happens after this is called. if (process.env.TESTING) { - __indexBuildCompletionCallbackForTests(dbInitPromise); + __indexBuildCompletionCallbackForTests(this.dbInitPromise); } if (cloud) { From caad5b4cb62687f5f48c20a82b078cc10445d53a Mon Sep 17 00:00:00 2001 From: = Date: Wed, 8 May 2019 13:51:35 -0700 Subject: [PATCH 05/10] Improving the way the test is fixed --- spec/ParseServer.spec.js | 23 ++++++++++++----------- src/ParseServer.js | 4 ++-- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/spec/ParseServer.spec.js b/spec/ParseServer.spec.js index be61e252a8..e747e810ce 100644 --- a/spec/ParseServer.spec.js +++ b/spec/ParseServer.spec.js @@ -62,19 +62,20 @@ describe('Server Url Checks', () => { } const newConfiguration = Object.assign({}, defaultConfiguration, { databaseAdapter, - }); - const parseServer = ParseServer.start(newConfiguration, () => { - parseServer.dbInitPromise.then(() => { - parseServer.handleShutdown(); - parseServer.server.close(err => { - if (err) { - done.fail('Close Server Error'); - } - reconfigureServer({}).then(() => { - done(); + __indexBuildCompletionCallbackForTests: promise => { + promise.then(() => { + parseServer.handleShutdown(); + parseServer.server.close(err => { + if (err) { + done.fail('Close Server Error'); + } + reconfigureServer({}).then(() => { + done(); + }); }); }); - }); + }, }); + const parseServer = ParseServer.start(newConfiguration); }); }); diff --git a/src/ParseServer.js b/src/ParseServer.js index 1e8cfa08a1..02621ff75d 100644 --- a/src/ParseServer.js +++ b/src/ParseServer.js @@ -96,12 +96,12 @@ class ParseServer { this.config = Config.put(Object.assign({}, options, allControllers)); logging.setLogger(loggerController); - this.dbInitPromise = databaseController.performInitialization(); + const dbInitPromise = databaseController.performInitialization(); hooksController.load(); // Note: Tests will start to fail if any validation happens after this is called. if (process.env.TESTING) { - __indexBuildCompletionCallbackForTests(this.dbInitPromise); + __indexBuildCompletionCallbackForTests(dbInitPromise); } if (cloud) { From f2e2de1353c648702fca4b9a9881d97ad4e9429a Mon Sep 17 00:00:00 2001 From: = Date: Wed, 8 May 2019 19:18:32 -0700 Subject: [PATCH 06/10] Fix unhandled failed promise in postgres test --- src/ParseServer.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ParseServer.js b/src/ParseServer.js index 02621ff75d..63e43ab1f3 100644 --- a/src/ParseServer.js +++ b/src/ParseServer.js @@ -97,11 +97,13 @@ class ParseServer { logging.setLogger(loggerController); const dbInitPromise = databaseController.performInitialization(); - hooksController.load(); + const hooksLoadPromise = hooksController.load(); // Note: Tests will start to fail if any validation happens after this is called. if (process.env.TESTING) { - __indexBuildCompletionCallbackForTests(dbInitPromise); + __indexBuildCompletionCallbackForTests( + Promise.all([dbInitPromise, hooksLoadPromise]) + ); } if (cloud) { From 00fd5bc04b22eab8a7032245b7c234165f392585 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 8 May 2019 20:52:17 -0700 Subject: [PATCH 07/10] Solving unhandled promise fail on redis test --- spec/ParseLiveQueryServer.spec.js | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/spec/ParseLiveQueryServer.spec.js b/spec/ParseLiveQueryServer.spec.js index 15ba12a0f7..bda04e814c 100644 --- a/spec/ParseLiveQueryServer.spec.js +++ b/spec/ParseLiveQueryServer.spec.js @@ -158,11 +158,14 @@ describe('ParseLiveQueryServer', function() { classNames: ['Yolo'], }, startLiveQueryServer: true, + __indexBuildCompletionCallbackForTests: promise => { + promise.then(() => { + expect(parseServer.liveQueryServer).not.toBeUndefined(); + expect(parseServer.liveQueryServer.server).toBe(parseServer.server); + parseServer.server.close(() => done()); + }); + }, }); - - expect(parseServer.liveQueryServer).not.toBeUndefined(); - expect(parseServer.liveQueryServer.server).toBe(parseServer.server); - parseServer.server.close(() => done()); }); it('can be initialized through ParseServer with liveQueryServerOptions', function(done) { @@ -178,12 +181,18 @@ describe('ParseLiveQueryServer', function() { liveQueryServerOptions: { port: 22347, }, + __indexBuildCompletionCallbackForTests: promise => { + promise.then(() => { + expect(parseServer.liveQueryServer).not.toBeUndefined(); + expect(parseServer.liveQueryServer.server).not.toBe( + parseServer.server + ); + parseServer.liveQueryServer.server.close(() => { + parseServer.server.close(() => done()); + }); + }); + }, }); - - expect(parseServer.liveQueryServer).not.toBeUndefined(); - expect(parseServer.liveQueryServer.server).not.toBe(parseServer.server); - parseServer.liveQueryServer.server.close(); - parseServer.server.close(() => done()); }); }); From 4f0d48b433fcded3229f886d75400dfb95eb527c Mon Sep 17 00:00:00 2001 From: = Date: Wed, 8 May 2019 21:01:08 -0700 Subject: [PATCH 08/10] Returning the excluded test --- spec/index.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/index.spec.js b/spec/index.spec.js index 40f2731434..6cebb23bc2 100644 --- a/spec/index.spec.js +++ b/spec/index.spec.js @@ -57,7 +57,7 @@ describe('server', () => { }); }); - xit('fails if database is unreachable', done => { + it('fails if database is unreachable', done => { reconfigureServer({ databaseAdapter: new MongoStorageAdapter({ uri: 'mongodb://fake:fake@localhost:43605/drew3', From fb8be99a70bfead525c4af132b7f622ae4b953dd Mon Sep 17 00:00:00 2001 From: = Date: Wed, 8 May 2019 22:08:16 -0700 Subject: [PATCH 09/10] Fixing package-lock --- package-lock.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1ecdf16e5a..f8691ded2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6003,19 +6003,19 @@ } }, "jasmine": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.1.0.tgz", - "integrity": "sha1-K9Wf1+xuwOistk4J9Fpo7SrRlSo=", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.4.0.tgz", + "integrity": "sha512-sR9b4n+fnBFDEd7VS2el2DeHgKcPiMVn44rtKFumq9q7P/t8WrxsVIZPob4UDdgcDNCwyDqwxCt4k9TDRmjPoQ==", "dev": true, "requires": { - "glob": "^7.0.6", - "jasmine-core": "~3.1.0" + "glob": "^7.1.3", + "jasmine-core": "~3.4.0" } }, "jasmine-core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.1.0.tgz", - "integrity": "sha1-pHheE11d9lAk38kiSVPfWFvSdmw=", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.4.0.tgz", + "integrity": "sha512-HU/YxV4i6GcmiH4duATwAbJQMlE0MsDIR5XmSVxURxKHn3aGAdbY1/ZJFmVRbKtnLwIxxMJD7gYaPsypcbYimg==", "dev": true }, "jasmine-spec-reporter": { From d890afe263df0fa7081e1b94582865fb84a43f07 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 8 May 2019 23:19:24 -0700 Subject: [PATCH 10/10] Fix unhandled promise from redis test --- spec/Schema.spec.js | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/spec/Schema.spec.js b/spec/Schema.spec.js index 6de696c557..b95783023e 100644 --- a/spec/Schema.spec.js +++ b/spec/Schema.spec.js @@ -440,13 +440,20 @@ describe('SchemaController', () => { // If two callers race to create the same schema, the response to the // race loser should be the same as if they hadn't been racing. config.database.loadSchema().then(schema => { - const p1 = schema.addClassIfNotExists('NewClass', { - foo: { type: 'String' }, - }); - const p2 = schema.addClassIfNotExists('NewClass', { - foo: { type: 'String' }, - }); - Promise.race([p1, p2]).then(actualSchema => { + const p1 = schema + .addClassIfNotExists('NewClass', { + foo: { type: 'String' }, + }) + .then(validateSchema) + .catch(validateError); + const p2 = schema + .addClassIfNotExists('NewClass', { + foo: { type: 'String' }, + }) + .then(validateSchema) + .catch(validateError); + let schemaValidated = false; + function validateSchema(actualSchema) { const expectedSchema = { className: 'NewClass', fields: { @@ -467,10 +474,17 @@ describe('SchemaController', () => { }, }; expect(dd(actualSchema, expectedSchema)).toEqual(undefined); - }); - Promise.all([p1, p2]).catch(error => { + schemaValidated = true; + } + let errorValidated = false; + function validateError(error) { expect(error.code).toEqual(Parse.Error.INVALID_CLASS_NAME); expect(error.message).toEqual('Class NewClass already exists.'); + errorValidated = true; + } + Promise.all([p1, p2]).then(() => { + expect(schemaValidated).toEqual(true); + expect(errorValidated).toEqual(true); done(); }); });