UNPKG

xdl

Version:

The Expo Development Library

184 lines (141 loc) 6.25 kB
'use strict'; var _fsExtra; function _load_fsExtra() { return _fsExtra = _interopRequireDefault(require('fs-extra')); } var _path = _interopRequireDefault(require('path')); var _hashids; function _load_hashids() { return _hashids = _interopRequireDefault(require('hashids')); } var _uuid; function _load_uuid() { return _uuid = _interopRequireDefault(require('uuid')); } var _ApiV; function _load_ApiV() { return _ApiV = _interopRequireDefault(require('../ApiV2')); } var _User; function _load_User() { return _User = require('../User'); } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } const XDL_TEST_CLIENT_ID = 'o0YygTgKhOTdoWj10Yl9nY2P0SMTw38Y'; const _makeShortId = (salt, minLength = 10) => { const hashIds = new (_hashids || _load_hashids()).default(salt, minLength); return hashIds.encode(Date.now()); }; describe('UserManager', () => { let userForTest; let userForTestPassword; beforeAll(_asyncToGenerator(function* () { process.env.__UNSAFE_EXPO_HOME_DIRECTORY = _path.default.join('/', 'tmp', `.expo-${_makeShortId((_uuid || _load_uuid()).default.v1())}`); const UserManager = _newTestUserManager(); const username = `xdl-test-${_makeShortId((_uuid || _load_uuid()).default.v1())}`; const password = (_uuid || _load_uuid()).default.v1(); // Register a new user that we can use for this test run const newUser = yield UserManager.registerAsync({ username, password, email: `adam+${username}@getexponent.com`, givenName: 'XDL', familyName: 'Test User' }); userForTest = newUser; userForTestPassword = password; // save password so we can use it to login yield UserManager.logoutAsync(); // log us out so we're in a clean state for these tests })); afterAll(_asyncToGenerator(function* () { if (process.env.__UNSAFE_EXPO_HOME_DIRECTORY) { (_fsExtra || _load_fsExtra()).default.removeSync(process.env.__UNSAFE_EXPO_HOME_DIRECTORY); } const api = (_ApiV || _load_ApiV()).default.clientForUser(userForTest); try { yield api.postAsync('auth/deleteUser'); } catch (e) { console.error(e); } })); it('should make available a global, shared UserManager singleton', () => { const { default: UserManager } = require('../User'); expect(UserManager).toBeDefined(); expect(UserManager.initialize).toBeDefined(); }); it('should not have a currently logged in user', _asyncToGenerator(function* () { const UserManager = _newTestUserManager(); try { yield UserManager.ensureLoggedInAsync({ noTrackError: true }); } catch (e) { expect(e.message).toEqual('Not logged in'); } })); it('should login successfully', _asyncToGenerator(function* () { const UserManager = _newTestUserManager(); yield UserManager.loginAsync('user-pass', { username: userForTest.username, password: userForTestPassword }); const user = yield UserManager.getCurrentUserAsync(); expect(user).not.toBeNull(); if (!user) { return; } expect(user.username).toBe(userForTest.username); expect(user.idToken).not.toBeFalsy(); })); it('should use cached user after first run of getCurrentUserAsync() instead of verifying token with Auth0', _asyncToGenerator(function* () { const UserManager = _newTestUserManager(); yield UserManager.loginAsync('user-pass', { username: userForTest.username, password: userForTestPassword }); // Spy on getProfileAsync const _getProfileSpy = jest.fn(UserManager._getProfileAsync); // $FlowFixMe UserManager._getProfileAsync = _getProfileSpy; yield UserManager.getCurrentUserAsync(); expect(_getProfileSpy).not.toHaveBeenCalled(); })); it('should correctly use lock to prevent getting session twice, simulatenously', _asyncToGenerator(function* () { const UserManager = _newTestUserManager(); yield UserManager.loginAsync('user-pass', { username: userForTest.username, password: userForTestPassword }); UserManager._currentUser = null; // Spy on getProfileAsync const _getProfileSpy = jest.fn(UserManager._getProfileAsync); // $FlowFixMe UserManager._getProfileAsync = _getProfileSpy; const users = yield Promise.all([UserManager.getCurrentUserAsync(), UserManager.getCurrentUserAsync()]); expect(_getProfileSpy).toHaveBeenCalledTimes(1); // This shouldn't have changed, but just double check it expect(users[0].idToken).toEqual(users[1].idToken); expect(users[0].refreshToken).toEqual(users[1].refreshToken); })); it('should detect expired token when calling getCurrentUserAsync', _asyncToGenerator(function* () { const UserManager = _newTestUserManager(); // Make sure we have a session const initialUser = yield UserManager.loginAsync('user-pass', { username: userForTest.username, password: userForTestPassword }); // set the refresh session threshold to a very high value, simulating an expired token UserManager.refreshSessionThreshold = 63072000; // Spy on _auth0RefreshToken const _auth0RefreshTokenSpy = jest.fn(UserManager._auth0RefreshToken); // $FlowFixMe UserManager._auth0RefreshToken = _auth0RefreshTokenSpy; const currentUser = yield UserManager.getCurrentUserAsync(); expect(_auth0RefreshTokenSpy).toBeCalled(); expect(currentUser.idToken).not.toEqual(initialUser.idToken); })); }); function _newTestUserManager() { const UserManager = new (_User || _load_User()).UserManagerInstance(); UserManager.initialize(XDL_TEST_CLIENT_ID); // XDL Test Client return UserManager; } //# sourceMappingURL=../__sourcemaps__/__integration_tests__/UserManager-test.js.map