Skip to content

Commit

Permalink
test: add test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
kaustavb12 committed Aug 13, 2024
1 parent 1ed8812 commit cae4f3a
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 3 deletions.
29 changes: 26 additions & 3 deletions src/instructor-toolbar/masquerade-widget/MasqueradeWidget.test.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,13 @@ describe('Masquerade Widget Dropdown', () => {
courseware = store.getState().courseware;
axiosMock = new MockAdapter(getAuthenticatedHttpClient());
masqueradeUrl = `${getConfig().LMS_BASE_URL}/courses/${courseware.courseId}/masquerade`;
});

beforeEach(() => {
mockData = {
courseId: courseware.courseId,
onError: () => {},
};
});

beforeEach(() => {
mockResponse = {
success: true,
active: {
Expand Down Expand Up @@ -111,4 +110,28 @@ describe('Masquerade Widget Dropdown', () => {
});
});
});

it('handles the clicks with toggle', async () => {
const { container } = render(<MasqueradeWidget {...mockData} />);
await waitFor(() => expect(axiosMock.history.get).toHaveLength(1));

const dropdownToggle = container.querySelector('.dropdown-toggle');
await act(async () => {
await fireEvent.click(dropdownToggle);
});
const dropdownMenu = container.querySelector('.dropdown-menu');
const studentOption = getAllByRole(dropdownMenu, 'button', { hidden: true }).filter(
button => (button.textContent === 'Specific Student...'),
)[0];
await act(async () => {
await fireEvent.click(studentOption);
});
getAllByRole(dropdownMenu, 'button', { hidden: true }).forEach(button => {
if (button.textContent === 'Specific Student...') {
expect(button).toHaveClass('active');
} else {
expect(button).not.toHaveClass('active');
}
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import React from 'react';
import { getAllByRole } from '@testing-library/dom';
import { act } from '@testing-library/react';
import { getConfig } from '@edx/frontend-platform';
import MasqueradeWidgetOption from './MasqueradeWidgetOption';
import {
render, fireEvent, initializeTestStore,
} from '../../setupTest';

const originalConfig = jest.requireActual('@edx/frontend-platform').getConfig();
jest.mock('@edx/frontend-platform', () => ({
...jest.requireActual('@edx/frontend-platform'),
getConfig: jest.fn(),
}));
getConfig.mockImplementation(() => originalConfig);

describe('Masquerade Widget Dropdown', () => {
let courseware;
let mockDataStaff;
let mockDataStudent;
let active;

beforeAll(async () => {
const store = await initializeTestStore();
courseware = store.getState().courseware;
active = {
courseKey: courseware.courseId,
groupId: null,
role: 'staff',
userName: null,
userPartitionId: null,
groupName: null,
};
mockDataStaff = {
groupId: null,
groupName: 'Staff',
key: 'Staff',
role: 'staff',
selected: active,
userName: null,
userPartitionId: null,
userNameInputToggle: () => {},
onSubmit: () => {},
};
mockDataStudent = {
groupId: null,
groupName: 'Specific Student...',
key: 'Specific Student...',
role: 'student',
selected: active,
userName: '',
userPartitionId: null,
userNameInputToggle: () => {},
onSubmit: () => {},
};
Object.defineProperty(global, 'location', {
configurable: true,
value: { reload: jest.fn() },
});
});

it('renders masquerade active option correctly', async () => {
const { container } = render(<MasqueradeWidgetOption {...mockDataStaff} />);
const button = getAllByRole(container, 'button', { hidden: true })[0];
expect(button).toHaveTextContent('Staff');
expect(button).toHaveClass('active');
});

it('renders masquerade inactive option correctly', async () => {
const { container } = render(<MasqueradeWidgetOption {...mockDataStudent} />);
const button = getAllByRole(container, 'button', { hidden: true })[0];
expect(button).toHaveTextContent('Specific Student...');
expect(button).not.toHaveClass('active');
});

it('handles the clicks regular option', () => {
const onSubmit = jest.fn().mockImplementation(() => Promise.resolve());
const { container } = render(<MasqueradeWidgetOption {...mockDataStaff} onSubmit={onSubmit} />);
const button = getAllByRole(container, 'button', { hidden: true })[0];
act(() => {
fireEvent.click(button);
});
expect(onSubmit).toHaveBeenCalled();
});

it('handles the clicks student option', () => {
const userNameInputToggle = jest.fn().mockImplementation(() => Promise.resolve());
const { container } = render(
<MasqueradeWidgetOption {...mockDataStudent} userNameInputToggle={userNameInputToggle} />,
);
const button = getAllByRole(container, 'button', { hidden: true })[0];
act(() => {
fireEvent.click(button);
});
expect(userNameInputToggle).toHaveBeenCalled();
});
});

0 comments on commit cae4f3a

Please sign in to comment.