From ba9d512239eb5ed9b80648cfde291d483e6e390e Mon Sep 17 00:00:00 2001 From: Devlin Junker Date: Tue, 26 Sep 2023 15:54:33 -0700 Subject: tests Signed-off-by: Devlin Junker --- tests/javascript/unit/components/ShareItem.spec.ts | 75 ++++++++++++++++++++++ .../components/feed-display/FeedItemRow.spec.ts | 4 +- .../javascript/unit/services/share.service.spec.ts | 46 +++++++++++++ 3 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 tests/javascript/unit/components/ShareItem.spec.ts create mode 100644 tests/javascript/unit/services/share.service.spec.ts (limited to 'tests') diff --git a/tests/javascript/unit/components/ShareItem.spec.ts b/tests/javascript/unit/components/ShareItem.spec.ts new file mode 100644 index 000000000..f61c9e82b --- /dev/null +++ b/tests/javascript/unit/components/ShareItem.spec.ts @@ -0,0 +1,75 @@ +import { shallowMount, createLocalVue } from '@vue/test-utils' +import ShareItem from '../../../../src/components/ShareItem.vue' +import { ShareService } from '../../../../src/dataservices/share.service' + +describe('AddFeed.vue', () => { + 'use strict' + + let wrapper: any + beforeEach(() => { + const localVue = createLocalVue() + wrapper = shallowMount(ShareItem, { + localVue, + propsData: { + itemId: 123, + }, + }) + }) + + describe('clickUser()', () => { + it('should add to selected if user not selected before', () => { + wrapper.vm.selected = [] + + wrapper.vm.clickUser({ displayName: 'display', shareName: 'share' }) + + expect(wrapper.vm.selected.length).toEqual(1) + }) + + it('should remove from selected if user is selected before', () => { + wrapper.vm.selected = [{ displayName: 'display', shareName: 'share' }] + + wrapper.vm.clickUser({ displayName: 'display', shareName: 'share' }) + + expect(wrapper.vm.selected.length).toEqual(0) + }) + }) + + describe('searchUsers()', () => { + it('should call ShareService to fetch users to add to user (display) list', async () => { + ShareService.fetchUsers = jest.fn().mockReturnValue({ + data: { + ocs: { + data: { + users: [], + }, + }, + }, + }) + wrapper.vm.userName = 'search' + + await wrapper.vm.searchUsers() + + expect(ShareService.fetchUsers).toBeCalled() + }) + }) + + describe('share()', () => { + it('should call ShareService to share article id with backend', async () => { + ShareService.share = jest.fn() + wrapper.vm.selected = [{ displayName: 'display', shareName: 'share' }] + + await wrapper.vm.share() + + expect(ShareService.share).toBeCalled() + + wrapper.vm.selected = [{ displayName: 'display', shareName: 'share' }, { displayName: 'display2', shareName: 'share2' }] + + await wrapper.vm.share() + + let args = (ShareService.share as any).mock.calls[0] + expect(args[1]).toEqual(['share']) + args = (ShareService.share as any).mock.calls[1] + expect(args[1]).toEqual(['share', 'share2']) + }) + }) +}) diff --git a/tests/javascript/unit/components/feed-display/FeedItemRow.spec.ts b/tests/javascript/unit/components/feed-display/FeedItemRow.spec.ts index d6aa2cd9d..8c4b23042 100644 --- a/tests/javascript/unit/components/feed-display/FeedItemRow.spec.ts +++ b/tests/javascript/unit/components/feed-display/FeedItemRow.spec.ts @@ -68,13 +68,13 @@ describe('FeedItemRow.vue', () => { let relativeTimestamp = (wrapper.vm as any).getRelativeTimestamp(pastTimestamp) - expect(relativeTimestamp).toEqual('10 seconds') + expect(relativeTimestamp).toEqual('{num} seconds') pastTimestamp = currentTimestamp - 1000 * 60 * 10 // 10 minutes ago relativeTimestamp = (wrapper.vm as any).getRelativeTimestamp(pastTimestamp) - expect(relativeTimestamp).toEqual('10 minutes ago') + expect(relativeTimestamp).toEqual('{num} minutes ago') }) it('should retrieve feed by ID', () => { diff --git a/tests/javascript/unit/services/share.service.spec.ts b/tests/javascript/unit/services/share.service.spec.ts new file mode 100644 index 000000000..678c0eebf --- /dev/null +++ b/tests/javascript/unit/services/share.service.spec.ts @@ -0,0 +1,46 @@ +import { ShareService } from './../../../../src/dataservices/share.service' +import axios from '@nextcloud/axios' + +jest.mock('@nextcloud/axios') + +describe('share.service.ts', () => { + 'use strict' + + beforeEach(() => { + (axios.get as any).mockReset(); + (axios.post as any).mockReset() + }) + + describe('fetchUsers', () => { + it('should call GET to retrieve users', async () => { + (axios as any).get.mockResolvedValue({ data: { feeds: [] } }) + + await ShareService.fetchUsers('abc') + + expect(axios.get).toBeCalled() + const args = (axios.get as any).mock.calls[0] + + expect(args[0]).toContain('search=abc') + }) + }) + + describe('share', () => { + it('should call POST for each user passed', async () => { + await ShareService.share(123, ['share-user']) + + expect(axios.post).toBeCalledTimes(1) + let args = (axios.post as any).mock.calls[0] + + expect(args[0]).toContain('123/share/share-user') + + await ShareService.share(345, ['share-user', 'share2']) + + expect(axios.post).toBeCalledTimes(3) + + args = (axios.post as any).mock.calls[1] + expect(args[0]).toContain('345/share/share-user') + args = (axios.post as any).mock.calls[2] + expect(args[0]).toContain('345/share/share2') + }) + }) +}) -- cgit v1.2.3