* feat: add language selection chore: update tests so we have less error message test: update test * test: update tests * chore: remove duplicate translation * chore: lint for console * chore: remove comments * chore: make sure the affect url frame refresh after the language selection change * chore: add whole_course_translation and language to courseware meta (#1305) * feat: Add feedback widget UI mock Add unit tests Fix snapshot Clean Sequence component logEvent calls Clean unit test Put feedback widget behind whole course translation flag Fix useFeedbackWidget test * chore: add src and dest translation * feat: first iteration of plugin translation chore: update plugin instruction * feat: Connect FeedbackWidget with backend services (#1325) Connect FeedbackWidget with backend services Move feedback widget to unit translation plugin * feat: Add authentication to WCT feedback endpoints (#1329) * chore: add fetch config and move feedback widget for the plugin chore: rewrite and test the api request chore: rebase chore: update translation feedback chore: test chore: add more tests * chore: rebase * chore: update requested change * chore: update package * chore: upgrade frontend-lib-special-exams and frontend-lib-learning-assistant * chore: update tests * chore: remove unneeded package * chore: update example config * chore: add source-map-loader * fix: feedback widget render error after submit feedback (#1335) * fix: feedback widget render error after submit feedback * fix: widget logic --------- Co-authored-by: Rodrigo Martin <rodrigom_94@hotmail.com>
96 lines
2.9 KiB
JavaScript
96 lines
2.9 KiB
JavaScript
import { mockUseKeyedState } from '@edx/react-unit-test-utils';
|
|
import { useToggle } from '@openedx/paragon';
|
|
|
|
import useTranslationTour, { stateKeys } from './useTranslationTour';
|
|
|
|
jest.mock('react', () => ({
|
|
...jest.requireActual('react'),
|
|
useCallback: jest.fn((cb, prereqs) => () => {
|
|
cb();
|
|
return { useCallback: { cb, prereqs } };
|
|
}),
|
|
}));
|
|
jest.mock('@openedx/paragon', () => ({
|
|
useToggle: jest.fn(),
|
|
}));
|
|
jest.mock('@edx/frontend-platform/i18n', () => {
|
|
const i18n = jest.requireActual('@edx/frontend-platform/i18n');
|
|
const { formatMessage } = jest.requireActual('@edx/react-unit-test-utils');
|
|
// this provide consistent for the test on different platform/timezone
|
|
const formatDate = jest.fn(date => new Date(date).toISOString()).mockName('useIntl.formatDate');
|
|
return {
|
|
...i18n,
|
|
useIntl: jest.fn(() => ({
|
|
formatMessage,
|
|
formatDate,
|
|
})),
|
|
defineMessages: m => m,
|
|
FormattedMessage: () => 'FormattedMessage',
|
|
};
|
|
});
|
|
jest.mock('@src/data/localStorage', () => ({
|
|
getLocalStorage: jest.fn(),
|
|
setLocalStorage: jest.fn(),
|
|
}));
|
|
|
|
const state = mockUseKeyedState(stateKeys);
|
|
|
|
describe('useTranslationSelection', () => {
|
|
const mockLocalStroage = {
|
|
getItem: jest.fn(),
|
|
setItem: jest.fn(),
|
|
};
|
|
|
|
const toggleOpen = jest.fn();
|
|
const toggleClose = jest.fn();
|
|
|
|
useToggle.mockReturnValue([false, toggleOpen, toggleClose]);
|
|
|
|
beforeEach(() => {
|
|
jest.clearAllMocks();
|
|
state.mock();
|
|
window.localStorage = mockLocalStroage;
|
|
});
|
|
afterEach(() => {
|
|
state.resetVals();
|
|
delete window.localStorage;
|
|
});
|
|
|
|
it('do not have translation tour if user already seen it', () => {
|
|
mockLocalStroage.getItem.mockReturnValueOnce('not seen');
|
|
const { translationTour } = useTranslationTour();
|
|
|
|
expect(translationTour.enabled).toBe(true);
|
|
});
|
|
|
|
it('show translation tour if user has not seen it', () => {
|
|
mockLocalStroage.getItem.mockReturnValueOnce('true');
|
|
const { translationTour } = useTranslationTour();
|
|
|
|
expect(translationTour).toMatchObject({});
|
|
});
|
|
test('open and close as pass from useToggle', () => {
|
|
const { isOpen, open, close } = useTranslationTour();
|
|
expect(isOpen).toBe(false);
|
|
expect(toggleOpen).toBe(open);
|
|
expect(toggleClose).toBe(close);
|
|
});
|
|
test('end tour on dismiss button click', () => {
|
|
mockLocalStroage.getItem.mockReturnValueOnce('not seen');
|
|
const { translationTour } = useTranslationTour();
|
|
translationTour.onDismiss();
|
|
expect(mockLocalStroage.setItem).toHaveBeenCalledWith(
|
|
'hasSeenTranslationTour',
|
|
'true',
|
|
);
|
|
state.expectSetStateCalledWith(stateKeys.showTranslationTour, false);
|
|
});
|
|
test('end tour and open modal on try it button click', () => {
|
|
mockLocalStroage.getItem.mockReturnValueOnce('not seen');
|
|
const { translationTour } = useTranslationTour();
|
|
translationTour.onEnd();
|
|
state.expectSetStateCalledWith(stateKeys.showTranslationTour, false);
|
|
expect(toggleOpen).toHaveBeenCalled();
|
|
});
|
|
});
|