Skip to content

Commit b7e02d7

Browse files
committed
Add VTL tests for RearrangeChannelsPage skeleton and simple cases
1 parent 7353aa5 commit b7e02d7

1 file changed

Lines changed: 40 additions & 10 deletions

File tree

kolibri/plugins/device/frontend/views/__tests__/RearrangeChannelsPage.spec.js

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { render, screen, waitFor } from '@testing-library/vue';
1+
import { render, screen, waitFor, fireEvent } from '@testing-library/vue';
22
import VueRouter from 'vue-router';
33
import useUser, { useUserMock } from 'kolibri/composables/useUser'; // eslint-disable-line import-x/named
44
import useSnackbar, { useSnackbarMock } from 'kolibri/composables/useSnackbar'; // eslint-disable-line import-x/named
@@ -7,12 +7,28 @@ import RearrangeChannelsPage from '../RearrangeChannelsPage';
77
import makeStore from '../../__tests__/utils/makeStore';
88
import { PageNames } from '../../constants';
99

10-
const { instructions$, noChannels$ } = createTranslator(
10+
const { instructions$, noChannels$, successNotification$ } = createTranslator(
1111
RearrangeChannelsPage.name,
1212
RearrangeChannelsPage.$trs,
1313
);
1414

1515
jest.mock('../../composables/useContentTasks');
16+
jest.mock('kolibri-common/composables/usePageLoading');
17+
jest.mock('kolibri-common/components/sortable/DragContainer', () => ({
18+
default: {
19+
name: 'DragContainer',
20+
props: ['items'],
21+
template: `
22+
<div>
23+
<button data-testid="trigger-sort" @click="$emit('sort', { newArray: [items[1], items[0]] })">
24+
Trigger Sort
25+
</button>
26+
<slot />
27+
</div>
28+
`,
29+
},
30+
}
31+
));
1632
jest.mock('kolibri/composables/useUser');
1733
jest.mock('kolibri/composables/useSnackbar');
1834

@@ -30,9 +46,6 @@ const MOCK_CHANNELS = [
3046
{ id: '2', name: 'Channel 2' },
3147
];
3248

33-
RearrangeChannelsPage.methods.postNewOrder = () => Promise.resolve();
34-
RearrangeChannelsPage.methods.fetchChannels = () => Promise.resolve(MOCK_CHANNELS);
35-
3649
describe('RearrangeChannelsPage', () => {
3750
let createSnackbar;
3851

@@ -49,6 +62,8 @@ describe('RearrangeChannelsPage', () => {
4962

5063
beforeEach(() => {
5164
jest.clearAllMocks();
65+
RearrangeChannelsPage.methods.fetchChannels = () => Promise.resolve(MOCK_CHANNELS);
66+
RearrangeChannelsPage.methods.postNewOrder = () => Promise.resolve();
5267
});
5368

5469
it('loads the data on mount', async () => {
@@ -67,10 +82,25 @@ describe('RearrangeChannelsPage', () => {
6782
});
6883

6984
it('shows a message when there are no channels', async () => {
70-
RearrangeChannelsPage.methods.fetchChannels = () => Promise.resolve([]);
71-
await renderComponent();
72-
await waitFor(() => {
73-
expect(screen.getByText(noChannels$())).toBeInTheDocument();
85+
RearrangeChannelsPage.methods.fetchChannels = () => Promise.resolve([]);
86+
await renderComponent();
87+
await waitFor(() => {
88+
expect(screen.getByText(noChannels$())).toBeInTheDocument();
89+
});
90+
});
91+
92+
it('handles a successful @sort event properly', async () => {
93+
await renderComponent();
94+
await waitFor(() => screen.getByText(MOCK_CHANNELS[0].name));
95+
96+
await fireEvent.click(screen.getByTestId('trigger-sort'));
97+
98+
await waitFor(() => {
99+
expect(createSnackbar).toHaveBeenCalledWith(successNotification$());
100+
});
101+
const titles = screen
102+
.getAllByText(new RegExp(`^(${MOCK_CHANNELS[0].name}|${MOCK_CHANNELS[1].name})$`))
103+
.map(el => el.textContent);
104+
expect(titles).toEqual([MOCK_CHANNELS[1].name, MOCK_CHANNELS[0].name]);
74105
});
75106
});
76-
});

0 commit comments

Comments
 (0)