diff --git a/__tests__/index.test.jsx b/__tests__/index.test.jsx index d6789513dc..83490ec5ce 100644 --- a/__tests__/index.test.jsx +++ b/__tests__/index.test.jsx @@ -1,11 +1,11 @@ import { mount } from 'enzyme'; -import { main } from '../src/index'; +import { main, getLanguage } from '../src/index'; const render = template => mount(template); const data = { custom_logo: 'foo', custom_login_info: '' } describe('index.jsx', () => { - test('initialization', async (done) => { + test('login loads when unauthenticated', async (done) => { const isAuthenticated = () => false; const getRoot = jest.fn(() => Promise.resolve({ data })); @@ -13,7 +13,7 @@ describe('index.jsx', () => { const wrapper = await main(render, api); expect(api.getRoot).toHaveBeenCalled(); - expect(wrapper.find('Dashboard')).toHaveLength(0); + expect(wrapper.find('App')).toHaveLength(0); expect(wrapper.find('Login')).toHaveLength(1); const { src } = wrapper.find('Login Brand img').props(); @@ -22,7 +22,7 @@ describe('index.jsx', () => { done(); }); - test('dashboard is loaded when authenticated', async (done) => { + test('app loads when authenticated', async (done) => { const isAuthenticated = () => true; const getRoot = jest.fn(() => Promise.resolve({ data })); @@ -30,9 +30,22 @@ describe('index.jsx', () => { const wrapper = await main(render, api); expect(api.getRoot).toHaveBeenCalled(); - expect(wrapper.find('Dashboard')).toHaveLength(1); + expect(wrapper.find('App')).toHaveLength(1); + expect(wrapper.find('Login')).toHaveLength(0); + + wrapper.find('header a').simulate('click'); + wrapper.update(); + + expect(wrapper.find('App')).toHaveLength(1); expect(wrapper.find('Login')).toHaveLength(0); done(); }); + + test('getLanguage returns the expected language code', () => { + expect(getLanguage({ languages: ['es-US'] })).toEqual('es'); + expect(getLanguage({ languages: ['es-US'], language: 'fr-FR', userLanguage: 'en-US' })).toEqual('es'); + expect(getLanguage({ language: 'fr-FR', userLanguage: 'en-US' })).toEqual('fr'); + expect(getLanguage({ userLanguage: 'en-US' })).toEqual('en'); + }); }); diff --git a/src/index.jsx b/src/index.jsx index 8f450e9c4a..dfd6b421d9 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -60,21 +60,25 @@ const http = axios.create({ xsrfCookieName: 'csrftoken', xsrfHeaderName: 'X-CSRF // see: https://developer.mozilla.org/en-US/docs/Web/API/Navigator // -const language = (navigator.languages && navigator.languages[0]) - || navigator.language - || navigator.userLanguage; -const languageWithoutRegionCode = language.toLowerCase().split(/[_-]+/)[0]; -const catalogs = { en, ja }; +export function getLanguage (nav) { + const language = (nav.languages && nav.languages[0]) || nav.language || nav.userLanguage; + const languageWithoutRegionCode = language.toLowerCase().split(/[_-]+/)[0]; + + return languageWithoutRegionCode; +}; // // Function Main // export async function main (render, api) { + const catalogs = { en, ja }; + const language = getLanguage(navigator); + const el = document.getElementById('app'); - // fetch additional config from server const { data: { custom_logo, custom_login_info } } = await api.getRoot(); + const defaultRedirect = () => (); const loginRoutes = ( @@ -102,8 +106,8 @@ export async function main (render, api) { {!api.isAuthenticated() ? loginRoutes : ( - ()} /> - ()} /> + + (