From 880d850cbe0548b265609af327bc95f22b6a63a5 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Sat, 2 Dec 2017 11:01:58 -0500 Subject: [PATCH 1/4] Adds interface to externally set RN Async Storage --- src/CoreManager.js | 8 ++++++++ src/Parse.js | 10 ++++++++++ src/StorageController.react-native.js | 22 +++++++++------------- src/__tests__/Storage-test.js | 10 +--------- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/CoreManager.js b/src/CoreManager.js index 87dcf3f41..997f9cf3d 100644 --- a/src/CoreManager.js +++ b/src/CoreManager.js @@ -333,6 +333,14 @@ module.exports = { return config['StorageController']; }, + setAsyncStorage(storage: any) { + config['AsyncStorage'] = storage; + }, + + getAsyncStorage() { + return config['AsyncStorage']; + }, + setUserController(controller: UserController) { requireMethods('UserController', [ 'setCurrentUser', diff --git a/src/Parse.js b/src/Parse.js index 7e6255bff..4b82d424c 100644 --- a/src/Parse.js +++ b/src/Parse.js @@ -45,6 +45,16 @@ var Parse = { CoreManager.set('JAVASCRIPT_KEY', javaScriptKey); CoreManager.set('MASTER_KEY', masterKey); CoreManager.set('USE_MASTER_KEY', false); + }, + + /** + * Call this method to set your AsyncStorage engine + * Starting Parse@1.11, the ParseSDK do not provide a React AsyncStorage as the ReactNative module + * is not provided at a stable path and changes over versions. + * @param {AsyncStorage} storage a react native async storage. + */ + setAsyncStorage(storage: any) { + CoreManager.setAsyncStorage(storage); } }; diff --git a/src/StorageController.react-native.js b/src/StorageController.react-native.js index 7c2c6a1b8..43643cd90 100644 --- a/src/StorageController.react-native.js +++ b/src/StorageController.react-native.js @@ -10,22 +10,18 @@ */ import ParsePromise from './ParsePromise'; - -// RN packager nonsense -let AsyncStorage; -try { - // for React Native 0.43+ - AsyncStorage = require('react-native/Libraries/react-native/react-native-implementation').AsyncStorage; -} catch (error) { - AsyncStorage = require('react-native/Libraries/react-native/react-native.js').AsyncStorage; -} +import CoreManager from './CoreManager'; var StorageController = { async: 1, + getAsyncStorage(): any { + return CoreManager.getAsyncStorage(); + }, + getItemAsync(path: string): ParsePromise { var p = new ParsePromise(); - AsyncStorage.getItem(path, function(err, value) { + this.getAsyncStorage().getItem(path, function(err, value) { if (err) { p.reject(err); } else { @@ -37,7 +33,7 @@ var StorageController = { setItemAsync(path: string, value: string): ParsePromise { var p = new ParsePromise(); - AsyncStorage.setItem(path, value, function(err) { + this.getAsyncStorage().setItem(path, value, function(err) { if (err) { p.reject(err); } else { @@ -49,7 +45,7 @@ var StorageController = { removeItemAsync(path: string): ParsePromise { var p = new ParsePromise(); - AsyncStorage.removeItem(path, function(err) { + this.getAsyncStorage().removeItem(path, function(err) { if (err) { p.reject(err); } else { @@ -60,7 +56,7 @@ var StorageController = { }, clear() { - AsyncStorage.clear(); + this.getAsyncStorage().clear(); } }; diff --git a/src/__tests__/Storage-test.js b/src/__tests__/Storage-test.js index d0eecbb5b..626a679bf 100644 --- a/src/__tests__/Storage-test.js +++ b/src/__tests__/Storage-test.js @@ -29,15 +29,6 @@ var mockRNStorageInterface = { }, }; -// for React Native 0.43+ -jest.mock('react-native/Libraries/react-native/react-native-implementation', () => { - return {AsyncStorage: mockRNStorageInterface}; -}, {virtual: true}); - -jest.mock('react-native/Libraries/react-native/react-native.js', () => { - return {AsyncStorage: mockRNStorageInterface}; -}, {virtual: true}); - var CoreManager = require('../CoreManager'); var ParsePromise = require('../ParsePromise').default; @@ -106,6 +97,7 @@ var RNStorageController = require('../StorageController.react-native'); describe('React Native StorageController', () => { beforeEach(() => { + CoreManager.setAsyncStorage(mockRNStorageInterface); RNStorageController.clear(); }); From 471fedd919f145cb93a7ce58e4110201f2e7d8e7 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Sat, 2 Dec 2017 13:52:23 -0500 Subject: [PATCH 2/4] mark method as static --- src/Parse.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Parse.js b/src/Parse.js index 4b82d424c..ed8a9587a 100644 --- a/src/Parse.js +++ b/src/Parse.js @@ -52,6 +52,7 @@ var Parse = { * Starting Parse@1.11, the ParseSDK do not provide a React AsyncStorage as the ReactNative module * is not provided at a stable path and changes over versions. * @param {AsyncStorage} storage a react native async storage. + * @static */ setAsyncStorage(storage: any) { CoreManager.setAsyncStorage(storage); From e0f16bf6bfeca2c469d97339c49e84bbf27bf4bd Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Sat, 2 Dec 2017 13:55:18 -0500 Subject: [PATCH 3/4] possible speedbump for travis: http://facebook.github.io/jest/docs/en/troubleshooting.html\#tests-are-extremely-slow-on-docker-and-or-continuous-integration-ci-server --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fc6cec052..2ba296d34 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,5 +22,5 @@ addons: - mongodb-org-server - g++-4.8 -script: npm test && ./run_integration.sh +script: npm test -- --maxWorkers=4 && ./run_integration.sh after_script: cat ./coverage/coverage-final.json | ./node_modules/codecov.io/bin/codecov.io.js && rm -rf ./coverage From 89cd2067d1d56f4bf5cb5b5ab5757d328ea9a464 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Sat, 2 Dec 2017 14:03:19 -0500 Subject: [PATCH 4/4] use mongodb-runner --- .travis.yml | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2ba296d34..414ae8625 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,18 +9,11 @@ branches: - /^greenkeeper/.*$/ env: - - CXX=g++-4.8 + - MONGODB_VERSION=3.2.13 services: mongodb - -addons: - apt: - sources: - - mongodb-3.0-precise - - ubuntu-toolchain-r-test - packages: - - mongodb-org-server - - g++-4.8 - +before_script: +- npm install -g mongodb-runner +- mongodb-runner start script: npm test -- --maxWorkers=4 && ./run_integration.sh after_script: cat ./coverage/coverage-final.json | ./node_modules/codecov.io/bin/codecov.io.js && rm -rf ./coverage