* 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>
108 lines
3.3 KiB
JavaScript
108 lines
3.3 KiB
JavaScript
import { useState } from 'react';
|
|
import { shallow } from '@edx/react-unit-test-utils';
|
|
|
|
import FeedbackWidget from './index';
|
|
import useFeedbackWidget from './useFeedbackWidget';
|
|
|
|
jest.mock('react', () => ({
|
|
...jest.requireActual('react'),
|
|
useState: jest.fn((value) => [value, jest.fn()]),
|
|
}));
|
|
jest.mock('@openedx/paragon', () => jest.requireActual('@edx/react-unit-test-utils').mockComponents({
|
|
ActionRow: {
|
|
Spacer: 'Spacer',
|
|
},
|
|
IconButton: 'IconButton',
|
|
Icon: 'Icon',
|
|
}));
|
|
jest.mock('@openedx/paragon/icons', () => ({
|
|
Close: 'Close',
|
|
ThumbUpOutline: 'ThumbUpOutline',
|
|
ThumbDownOffAlt: 'ThumbDownOffAlt',
|
|
}));
|
|
jest.mock('./useFeedbackWidget');
|
|
jest.mock('@edx/frontend-platform/i18n', () => {
|
|
const i18n = jest.requireActual('@edx/frontend-platform/i18n');
|
|
const { formatMessage } = jest.requireActual('@edx/react-unit-test-utils');
|
|
return {
|
|
...i18n,
|
|
useIntl: jest.fn(() => ({
|
|
formatMessage,
|
|
})),
|
|
};
|
|
});
|
|
|
|
describe('<FeedbackWidget />', () => {
|
|
const props = {
|
|
courseId: 'course-v1:edX+DemoX+Demo_Course',
|
|
translationLanguage: 'es',
|
|
unitId:
|
|
'block-v1:edX+DemoX+Demo_Course+type@vertical+block@37b72b3915204b70acb00c55b604b563',
|
|
userId: '123',
|
|
};
|
|
|
|
const mockUseFeedbackWidget = ({ showFeedbackWidget, showGratitudeText }) => {
|
|
useFeedbackWidget.mockReturnValueOnce({
|
|
closeFeedbackWidget: jest.fn().mockName('closeFeedbackWidget'),
|
|
sendFeedback: jest.fn().mockName('sendFeedback'),
|
|
onThumbsUpClick: jest.fn().mockName('onThumbsUpClick'),
|
|
onThumbsDownClick: jest.fn().mockName('onThumbsDownClick'),
|
|
showFeedbackWidget,
|
|
showGratitudeText,
|
|
});
|
|
};
|
|
|
|
it('renders hidden by default', () => {
|
|
mockUseFeedbackWidget({
|
|
showFeedbackWidget: true,
|
|
showGratitudeText: true,
|
|
});
|
|
const wrapper = shallow(<FeedbackWidget {...props} />);
|
|
expect(wrapper.snapshot).toMatchSnapshot();
|
|
expect(wrapper.instance.findByType('div')[0].props.className).toContain(
|
|
'd-none',
|
|
);
|
|
});
|
|
|
|
it('renders show when elemReady is true', () => {
|
|
mockUseFeedbackWidget({
|
|
showFeedbackWidget: true,
|
|
showGratitudeText: true,
|
|
});
|
|
useState.mockReturnValueOnce([true, jest.fn()]);
|
|
const wrapper = shallow(<FeedbackWidget {...props} />);
|
|
expect(wrapper.snapshot).toMatchSnapshot();
|
|
expect(wrapper.instance.findByType('div')[0].props.className).not.toContain(
|
|
'd-none',
|
|
);
|
|
});
|
|
|
|
it('render empty when showFeedbackWidget and showGratitudeText are false', () => {
|
|
mockUseFeedbackWidget({
|
|
showFeedbackWidget: false,
|
|
showGratitudeText: false,
|
|
});
|
|
useState.mockReturnValueOnce([true, jest.fn()]);
|
|
const wrapper = shallow(<FeedbackWidget {...props} />);
|
|
expect(wrapper.instance.findByType('div')[0].children.length).toBe(0);
|
|
});
|
|
|
|
it('render feedback widget', () => {
|
|
mockUseFeedbackWidget({
|
|
showFeedbackWidget: true,
|
|
showGratitudeText: false,
|
|
});
|
|
const wrapper = shallow(<FeedbackWidget {...props} />);
|
|
expect(wrapper.snapshot).toMatchSnapshot();
|
|
});
|
|
|
|
it('render gratitude text', () => {
|
|
mockUseFeedbackWidget({
|
|
showFeedbackWidget: false,
|
|
showGratitudeText: true,
|
|
});
|
|
const wrapper = shallow(<FeedbackWidget {...props} />);
|
|
expect(wrapper.snapshot).toMatchSnapshot();
|
|
});
|
|
});
|