"use strict"; function _fsExtra() { const data = _interopRequireDefault(require("fs-extra")); _fsExtra = function () { return data; }; return data; } function _path() { const data = _interopRequireDefault(require("path")); _path = function () { return data; }; return data; } function _hashids() { const data = _interopRequireDefault(require("hashids")); _hashids = function () { return data; }; return data; } function _uuid() { const data = _interopRequireDefault(require("uuid")); _uuid = function () { return data; }; return data; } function _ApiV() { const data = _interopRequireDefault(require("../ApiV2")); _ApiV = function () { return data; }; return data; } function _User() { const data = require("../User"); _User = function () { return data; }; return data; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const _makeShortId = (salt, minLength = 10) => { const hashIds = new (_hashids().default)(salt, minLength); return hashIds.encode(Date.now()); }; describe('UserManager', () => { let userForTest; let userForTestPassword; beforeAll(async () => { process.env.__UNSAFE_EXPO_HOME_DIRECTORY = _path().default.join('/', 'tmp', `.expo-${_makeShortId(_uuid().default.v1())}`); const UserManager = _newTestUserManager(); const username = `xdl-test-${_makeShortId(_uuid().default.v1())}`; const password = _uuid().default.v1(); // Register a new user that we can use for this test run const newUser = await 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 await UserManager.logoutAsync(); // log us out so we're in a clean state for these tests }); afterAll(async () => { if (process.env.__UNSAFE_EXPO_HOME_DIRECTORY) { _fsExtra().default.removeSync(process.env.__UNSAFE_EXPO_HOME_DIRECTORY); } const api = _ApiV().default.clientForUser(userForTest); try { await 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', async () => { const UserManager = _newTestUserManager(); try { await UserManager.ensureLoggedInAsync(); } catch (e) { expect(e.message).toEqual('Not logged in'); } }); it('should login successfully', async () => { const UserManager = _newTestUserManager(); await UserManager.loginAsync('user-pass', { username: userForTest.username, password: userForTestPassword }); const user = await UserManager.getCurrentUserAsync(); expect(user).not.toBeNull(); if (!user) { return; } expect(user.username).toBe(userForTest.username); expect(user.sessionSecret).not.toBeFalsy(); }); it('should use cached user after first run of getCurrentUserAsync() instead of making call to www', async () => { const UserManager = _newTestUserManager(); await UserManager.loginAsync('user-pass', { username: userForTest.username, password: userForTestPassword }); // Spy on getProfileAsync const _getProfileSpy = jest.fn(UserManager._getProfileAsync); UserManager._getProfileAsync = _getProfileSpy; await UserManager.getCurrentUserAsync(); expect(_getProfileSpy).not.toHaveBeenCalled(); }); it('should correctly use lock to prevent getting session twice, simulatenously', async () => { const UserManager = _newTestUserManager(); await UserManager.loginAsync('user-pass', { username: userForTest.username, password: userForTestPassword }); UserManager._currentUser = null; // Spy on getProfileAsync const _getProfileSpy = jest.fn(UserManager._getProfileAsync); UserManager._getProfileAsync = _getProfileSpy; const users = await Promise.all([UserManager.getCurrentUserAsync(), UserManager.getCurrentUserAsync()]); expect(_getProfileSpy).toHaveBeenCalledTimes(1); // This shouldn't have changed, but just double check it expect(users[0].sessionSecret).toEqual(users[1].sessionSecret); }); }); function _newTestUserManager() { const UserManager = new (_User().UserManagerInstance)(); UserManager.initialize(); return UserManager; } //# sourceMappingURL=../__sourcemaps__/__integration_tests__/UserManager-test.js.map