diff --git a/app/sagas/__tests__/init.fallbackServer.test.ts b/app/sagas/__tests__/init.fallbackServer.test.ts new file mode 100644 index 0000000000..07f689eee0 --- /dev/null +++ b/app/sagas/__tests__/init.fallbackServer.test.ts @@ -0,0 +1,50 @@ +const FALLBACK_SERVER = 'https://fallback.rocket.chat'; +const FALLBACK_VERSION = '7.0.0'; +const LOGGED_OUT_SERVER = 'https://loggedout.rocket.chat'; + +jest.mock('../../lib/database', () => ({ + __esModule: true, + default: { + servers: { + get: () => ({ + query: () => ({ fetch: () => Promise.resolve([{ id: FALLBACK_SERVER, version: FALLBACK_VERSION }]) }) + }) + } + } +})); + +jest.mock('../../lib/methods/helpers/localAuthentication', () => ({ + localAuthenticate: jest.fn() +})); + +import { appInit } from '../../actions/app'; +import { SERVER } from '../../actions/actionsTypes'; +import { CURRENT_SERVER, TOKEN_KEY } from '../../lib/constants/keys'; +import UserPreferences from '../../lib/methods/userPreferences'; +import { cancelSagaTasks, createRecordingStore, flushSagaMicrotasks } from '../../lib/testUtils/sagaStore'; +import initRoot from '../init'; + +describe('init saga — fallback workspace', () => { + beforeEach(() => { + UserPreferences.setString(CURRENT_SERVER, LOGGED_OUT_SERVER); + UserPreferences.removeItem(`${TOKEN_KEY}-${LOGGED_OUT_SERVER}`); + UserPreferences.setString(`${TOKEN_KEY}-${FALLBACK_SERVER}`, 'userId'); + }); + + afterEach(() => { + cancelSagaTasks(); + UserPreferences.removeItem(CURRENT_SERVER); + UserPreferences.removeItem(`${TOKEN_KEY}-${FALLBACK_SERVER}`); + }); + + it('requests the fallback workspace with the version from its own record', async () => { + const { store, dispatchedActions } = createRecordingStore(initRoot); + + store.dispatch(appInit()); + await flushSagaMicrotasks(); + + expect(dispatchedActions.find(action => action.type === SERVER.SELECT_REQUEST)).toEqual( + expect.objectContaining({ server: FALLBACK_SERVER, version: FALLBACK_VERSION }) + ); + }); +}); diff --git a/app/sagas/init.js b/app/sagas/init.js index d9d6024abe..4e4a89a38b 100644 --- a/app/sagas/init.js +++ b/app/sagas/init.js @@ -36,10 +36,10 @@ const restore = function* restore() { // Check if there're other logged in servers and picks first one if (servers.length > 0) { for (let i = 0; i < servers.length; i += 1) { - const newServer = servers[i].id; + const { id: newServer, version } = servers[i]; userId = UserPreferences.getString(`${TOKEN_KEY}-${newServer}`); if (userId) { - return yield put(selectServerRequest(newServer, newServer.version)); + return yield put(selectServerRequest(newServer, version)); } } } diff --git a/app/sagas/login.js b/app/sagas/login.js index 76140daa21..4c02e2e697 100644 --- a/app/sagas/login.js +++ b/app/sagas/login.js @@ -394,10 +394,10 @@ const handleLogout = function* handleLogout({ forcedByServer, message }) { // see if there're other logged in servers and selects first one if (servers.length > 0) { for (let i = 0; i < servers.length; i += 1) { - const newServer = servers[i].id; + const { id: newServer, version } = servers[i]; const token = UserPreferences.getString(`${TOKEN_KEY}-${newServer}`); if (token) { - yield put(selectServerRequest(newServer, newServer.version)); + yield put(selectServerRequest(newServer, version)); return; } } @@ -461,10 +461,10 @@ const handleDeleteAccount = function* handleDeleteAccount() { // see if there're other logged in servers and selects first one if (servers.length > 0) { for (let i = 0; i < servers.length; i += 1) { - const newServer = servers[i].id; + const { id: newServer, version } = servers[i]; const token = UserPreferences.getString(`${TOKEN_KEY}-${newServer}`); if (token) { - yield put(selectServerRequest(newServer, newServer.version)); + yield put(selectServerRequest(newServer, version)); return; } }