Skip to content

Commit 45c3f4a

Browse files
Added Unit Tests for Deletion of View Only Channels
1 parent 7a94635 commit 45c3f4a

File tree

2 files changed

+80
-4
lines changed

2 files changed

+80
-4
lines changed

contentcuration/contentcuration/frontend/channelList/views/Channel/__tests__/channelItem.spec.js

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,37 @@ describe('channelItem', () => {
7676
wrapper.find('[data-test="token-listitem"]').trigger('click');
7777
expect(wrapper.vm.tokenDialog).toBe(true);
7878
});
79-
it('clicking delete button in dialog should delete the channel', () => {
79+
it('when user can edit, clicking delete button in dialog should call deleteChannel', async () => {
80+
const deleteChannelSpy = jest.fn().mockResolvedValue();
81+
const removeViewerSpy = jest.fn().mockResolvedValue();
82+
wrapper = makeWrapper(true, deleteStub);
83+
wrapper.setMethods({
84+
deleteChannel: deleteChannelSpy,
85+
removeViewer: removeViewerSpy,
86+
});
87+
88+
wrapper.setData({ deleteDialog: true });
89+
wrapper.find('[data-test="delete-modal"]').trigger('submit');
90+
await wrapper.vm.$nextTick(() => {
91+
expect(deleteChannelSpy).toHaveBeenCalledWith(channelId);
92+
expect(removeViewerSpy).not.toHaveBeenCalled();
93+
});
94+
});
95+
96+
it('when user cannot edit, clicking delete button in dialog should call removeViewer', async () => {
97+
const deleteChannelSpy = jest.fn().mockResolvedValue();
98+
const removeViewerSpy = jest.fn().mockResolvedValue();
99+
wrapper = makeWrapper(false, deleteStub);
100+
wrapper.setMethods({
101+
deleteChannel: deleteChannelSpy,
102+
removeViewer: removeViewerSpy,
103+
});
104+
80105
wrapper.setData({ deleteDialog: true });
81106
wrapper.find('[data-test="delete-modal"]').trigger('submit');
82-
wrapper.vm.$nextTick(() => {
83-
expect(deleteStub).toHaveBeenCalled();
107+
await wrapper.vm.$nextTick(() => {
108+
expect(removeViewerSpy).toHaveBeenCalledWith({ channelId, userId: 0 });
109+
expect(deleteChannelSpy).not.toHaveBeenCalled();
84110
});
85111
});
86112

contentcuration/contentcuration/frontend/shared/data/__tests__/resources.spec.js

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import { UpdatedDescendantsChange } from '../changes';
2+
import { ViewerM2M, ChannelUser, Channel, ContentNode } from '../resources';
23
import db from 'shared/data/db';
34
import { CHANGE_TYPES, TABLE_NAMES } from 'shared/data/constants';
45
import { ContentKindsNames } from 'shared/leUtils/ContentKinds';
5-
import { ContentNode } from 'shared/data/resources';
66
import { mockChannelScope, resetMockChannelScope } from 'shared/utils/testing';
7+
import client from 'shared/client';
8+
import urls from 'shared/urls';
79

810
const CLIENTID = 'test-client-id';
911

@@ -170,5 +172,53 @@ describe('Resources', () => {
170172
expect(change.mods).toEqual(changes);
171173
});
172174
});
175+
describe('ChannelUser resource', () => {
176+
const testChannelId = 'test-channel-id';
177+
const testUserId = 'test-user-id';
178+
179+
beforeEach(async () => {
180+
await db[TABLE_NAMES.VIEWER_M2M].clear();
181+
await db[TABLE_NAMES.CHANNEL].clear();
182+
jest.spyOn(client, 'delete').mockResolvedValue({});
183+
jest.spyOn(Channel.table, 'delete').mockResolvedValue(true);
184+
jest.spyOn(urls, 'channeluser_remove_self').mockReturnValue(`fake_url_for_${testUserId}`);
185+
});
186+
187+
afterEach(() => {
188+
client.delete.mockRestore();
189+
Channel.table.delete.mockRestore();
190+
urls.channeluser_remove_self.mockRestore();
191+
});
192+
193+
it('should remove the user from the ViewerM2M table when removeViewer is called', async () => {
194+
await ViewerM2M.add({ user: testUserId, channel: testChannelId });
195+
let viewer = await ViewerM2M.get([testUserId, testChannelId]);
196+
expect(viewer).toBeTruthy();
197+
198+
await ChannelUser.removeViewer(testChannelId, testUserId);
199+
200+
viewer = await ViewerM2M.get([testUserId, testChannelId]);
201+
expect(viewer).toBeUndefined();
202+
expect(client.delete).toHaveBeenCalledWith(urls.channeluser_remove_self(testUserId), {
203+
params: { channel_id: testChannelId },
204+
});
205+
});
206+
207+
it('should call Channel.table.delete(channel) when removeViewer is called', async () => {
208+
await ViewerM2M.add({ user: testUserId, channel: testChannelId });
209+
const viewer = await ViewerM2M.get([testUserId, testChannelId]);
210+
expect(viewer).toBeTruthy();
211+
await ChannelUser.removeViewer(testChannelId, testUserId);
212+
expect(Channel.table.delete).toHaveBeenCalledWith(testChannelId);
213+
});
214+
215+
it('should handle error from client.delete when removeViewer is called', async () => {
216+
jest.spyOn(client, 'delete').mockRejectedValue(new Error('error deleting'));
217+
await ViewerM2M.add({ user: testUserId, channel: testChannelId });
218+
await expect(ChannelUser.removeViewer(testChannelId, testUserId)).rejects.toThrow(
219+
'error deleting'
220+
);
221+
});
222+
});
173223
});
174224
});

0 commit comments

Comments
 (0)