diff --git a/services/app/apps/codebattle/assets/js/__tests__/UserSettings.test.jsx b/services/app/apps/codebattle/assets/js/__tests__/UserSettings.test.jsx index b724a1963..446639cd4 100644 --- a/services/app/apps/codebattle/assets/js/__tests__/UserSettings.test.jsx +++ b/services/app/apps/codebattle/assets/js/__tests__/UserSettings.test.jsx @@ -5,9 +5,12 @@ import { } from '@testing-library/react'; import { configureStore, combineReducers } from '@reduxjs/toolkit'; import { Provider } from 'react-redux'; +import axios from 'axios'; + import reducers from '../widgets/slices'; import UserSettings from '../widgets/containers/UserSettings'; import UserSettingsForm from '../widgets/components/User/UserSettingsForm'; +import languages from '../widgets/config/languages'; jest.mock('@fortawesome/react-fontawesome', () => ({ FontAwesomeIcon: 'img', @@ -15,6 +18,8 @@ jest.mock('@fortawesome/react-fontawesome', () => ({ jest.mock('axios'); +jest.useFakeTimers(); + const reducer = combineReducers(reducers); const preloadedState = { @@ -25,7 +30,7 @@ const preloadedState = { }, id: 11, name: 'Diman', - lang: 'typescript', + lang: 'ts', avatar_url: '/assets/images/logo.svg', discord_name: null, discord_id: null, @@ -49,6 +54,8 @@ jest.mock( { virtual: true }, ); +const settings = Object.keys(languages); + const vdom = () => render( @@ -60,16 +67,25 @@ describe('UserSettings test cases', () => { expect(getByText(/settings/i)).toBeInTheDocument(); }); it('show success notification', async () => { + const settingUpdaterSpy = jest.spyOn(axios, 'patch').mockResolvedValueOnce({ data: {} }); const { getByRole, } = vdom(); const save = getByRole('button', { name: /save/i }); const alert = getByRole('alert'); + + fireEvent.change(screen.getByLabelText(/your name/i), { + target: { value: 'Dmitry' }, + }); fireEvent.click(save); - setTimeout(() => expect(alert).toHaveClass('editSuccess'), 300); + await waitFor(() => { + expect(settingUpdaterSpy).toHaveBeenCalled(); + expect(alert).toHaveClass('alert-success'); + }); }); - it('editing profile test', async () => { + + test.each(settings)('editing profile test with lang %s', async lang => { const handleSubmit = jest.fn(); render( { target: { value: 'Dmitry' }, }); fireEvent.change(screen.getByTestId('langSelect'), { - target: { value: 'java' }, + target: { value: lang }, }); const saveBtn = screen.getByRole('button', { name: /save/i }); fireEvent.click(saveBtn); @@ -89,7 +105,7 @@ describe('UserSettings test cases', () => { expect(handleSubmit).toHaveBeenCalled(); expect(handleSubmit).toHaveBeenCalledWith({ name: 'Dmitry', - lang: 'java', + lang, sound_settings: { level: 6, type: 'standart', diff --git a/services/app/apps/codebattle/assets/js/widgets/components/User/UserSettingsForm.jsx b/services/app/apps/codebattle/assets/js/widgets/components/User/UserSettingsForm.jsx index 7ebb3429a..bb6145e25 100644 --- a/services/app/apps/codebattle/assets/js/widgets/components/User/UserSettingsForm.jsx +++ b/services/app/apps/codebattle/assets/js/widgets/components/User/UserSettingsForm.jsx @@ -34,7 +34,7 @@ const TextInput = ({ label, ...props }) => { export default ({ onSubmit, settings }) => { const renderLanguages = langs => langs.map(([slug, lang]) => ( - ));