From d946f9d4b6c8cc80c79baf1fa9d5622530555825 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Fri, 7 Oct 2022 20:29:39 -0500 Subject: [PATCH 1/3] fix: Can't find variable: indexedDB --- src/IndexedDBStorageController.js | 6 ++++-- src/__tests__/Parse-test.js | 2 +- src/__tests__/Storage-test.js | 16 +++++++++++++--- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/IndexedDBStorageController.js b/src/IndexedDBStorageController.js index 9c963d6b6..94d1af777 100644 --- a/src/IndexedDBStorageController.js +++ b/src/IndexedDBStorageController.js @@ -1,10 +1,11 @@ /** * @flow */ +/* global window */ import { createStore, del, set, get, clear, keys } from 'idb-keyval'; -try { +if (window && window.indexedDB) { const ParseStore = createStore('parseDB', 'parseStore'); const IndexedDBStorageController = { @@ -27,6 +28,7 @@ try { }; module.exports = IndexedDBStorageController; -} catch (e) { +} else { // IndexedDB not supported + module.exports = undefined; } diff --git a/src/__tests__/Parse-test.js b/src/__tests__/Parse-test.js index 965668b7b..b3de9f4bf 100644 --- a/src/__tests__/Parse-test.js +++ b/src/__tests__/Parse-test.js @@ -16,6 +16,7 @@ jest.dontMock('../LocalDatastore'); jest.dontMock('crypto-js/aes'); jest.setMock('../EventuallyQueue', { poll: jest.fn() }); +global.indexedDB = require('./test_helpers/mockIndexedDB'); const CoreManager = require('../CoreManager'); const EventuallyQueue = require('../EventuallyQueue'); const Parse = require('../Parse'); @@ -240,7 +241,6 @@ describe('Parse module', () => { }); it('can get IndexedDB storage', () => { - console.log(Parse.IndexedDB); expect(Parse.IndexedDB).toBeDefined(); CoreManager.setStorageController(Parse.IndexedDB); const currentStorage = CoreManager.getStorageController(); diff --git a/src/__tests__/Storage-test.js b/src/__tests__/Storage-test.js index 356956ecd..4fd8bb32c 100644 --- a/src/__tests__/Storage-test.js +++ b/src/__tests__/Storage-test.js @@ -17,6 +17,7 @@ const CoreManager = require('../CoreManager'); global.wx = mockWeChat; global.localStorage = mockStorageInterface; +global.indexedDB = mockIndexedDB; jest.mock('idb-keyval', () => { return mockIndexedDB; }); @@ -165,10 +166,12 @@ describe('React Native StorageController', () => { }); }); -const IndexedDBStorageController = require('../IndexedDBStorageController'); - -describe('React Native StorageController', () => { +describe('IndexDB StorageController', () => { + let IndexedDBStorageController; beforeEach(() => { + jest.isolateModules(() => { + IndexedDBStorageController = require('../IndexedDBStorageController'); + }); IndexedDBStorageController.clear(); }); @@ -203,6 +206,13 @@ describe('React Native StorageController', () => { const keys = await IndexedDBStorageController.getAllKeysAsync(); expect(keys[0]).toBe('myKey'); }); + + it('handle indexedDB is not defined', async () => { + global.indexedDB = undefined; + const dbController = require('../IndexedDBStorageController'); + expect(dbController).toBeUndefined(); + global.indexedDB = mockIndexedDB; + }); }); const DefaultStorageController = require('../StorageController.default'); From 857f213bbbb7b131ff38e767f44ecfb75f77dff1 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Fri, 7 Oct 2022 20:49:20 -0500 Subject: [PATCH 2/3] Fixed Integration tests --- src/IndexedDBStorageController.js | 2 +- src/Parse.js | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/IndexedDBStorageController.js b/src/IndexedDBStorageController.js index 94d1af777..a223000e3 100644 --- a/src/IndexedDBStorageController.js +++ b/src/IndexedDBStorageController.js @@ -5,7 +5,7 @@ import { createStore, del, set, get, clear, keys } from 'idb-keyval'; -if (window && window.indexedDB) { +if (typeof window !== 'undefined' && window.indexedDB) { const ParseStore = createStore('parseDB', 'parseStore'); const IndexedDBStorageController = { diff --git a/src/Parse.js b/src/Parse.js index 7554b3c80..548fbfd6e 100644 --- a/src/Parse.js +++ b/src/Parse.js @@ -246,8 +246,9 @@ Parse.Storage = require('./Storage'); Parse.User = require('./ParseUser').default; Parse.LiveQuery = require('./ParseLiveQuery').default; Parse.LiveQueryClient = require('./LiveQueryClient').default; -Parse.IndexedDB = require('./IndexedDBStorageController'); - +if (process.env.PARSE_BUILD === 'browser') { + Parse.IndexedDB = require('./IndexedDBStorageController'); +} Parse._request = function (...args) { return CoreManager.getRESTController().request.apply(null, args); }; From f4a61de07bbeba63a70991df14e36a6932c17846 Mon Sep 17 00:00:00 2001 From: Diamond Lewis Date: Fri, 7 Oct 2022 21:35:00 -0500 Subject: [PATCH 3/3] improve tests --- src/__tests__/Parse-test.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/__tests__/Parse-test.js b/src/__tests__/Parse-test.js index b3de9f4bf..c33502842 100644 --- a/src/__tests__/Parse-test.js +++ b/src/__tests__/Parse-test.js @@ -19,9 +19,15 @@ jest.setMock('../EventuallyQueue', { poll: jest.fn() }); global.indexedDB = require('./test_helpers/mockIndexedDB'); const CoreManager = require('../CoreManager'); const EventuallyQueue = require('../EventuallyQueue'); -const Parse = require('../Parse'); describe('Parse module', () => { + let Parse; + beforeEach(() => { + jest.isolateModules(() => { + Parse = require('../Parse'); + }); + }); + it('can be initialized with keys', () => { Parse.initialize('A', 'B'); expect(CoreManager.get('APPLICATION_ID')).toBe('A'); @@ -166,6 +172,7 @@ describe('Parse module', () => { Parse.enableEncryptedUser(); expect(Parse.encryptedUser).toBe(true); expect(Parse.isEncryptedUserEnabled()).toBe(true); + process.env.PARSE_BUILD = 'node'; }); it('can set an encrypt token as String', () => { @@ -241,9 +248,13 @@ describe('Parse module', () => { }); it('can get IndexedDB storage', () => { - expect(Parse.IndexedDB).toBeDefined(); - CoreManager.setStorageController(Parse.IndexedDB); + expect(Parse.IndexedDB).toBeUndefined(); + process.env.PARSE_BUILD = 'browser'; + const ParseInstance = require('../Parse'); + expect(ParseInstance.IndexedDB).toBeDefined(); + CoreManager.setStorageController(ParseInstance.IndexedDB); const currentStorage = CoreManager.getStorageController(); - expect(currentStorage).toEqual(Parse.IndexedDB); + expect(currentStorage).toEqual(ParseInstance.IndexedDB); + process.env.PARSE_BUILD = 'node'; }); });