From 3b6c06f970b8a1890035f173586b706b9669d2c5 Mon Sep 17 00:00:00 2001 From: Julien Calixte Date: Sun, 23 Apr 2023 12:43:52 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20(task=20record)=20test=20all=20task?= =?UTF-8?q?=20record=20preview?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/TaskRecordPreview.test.ts | 82 +++++++++++++++++++ .../record/hooks/useTaskRecordMetadata.ts | 1 + 2 files changed, 83 insertions(+) create mode 100644 src/modules/record/components/TaskRecordPreview.test.ts diff --git a/src/modules/record/components/TaskRecordPreview.test.ts b/src/modules/record/components/TaskRecordPreview.test.ts new file mode 100644 index 0000000..45de6d9 --- /dev/null +++ b/src/modules/record/components/TaskRecordPreview.test.ts @@ -0,0 +1,82 @@ +import { createTaskFixture } from '@/modules/task/models/task.fixture' +import { router } from '@/router' +import { toISODate } from '@/shared/types/date' +import { withPlugins } from '@/tests/utils' +import { faker } from '@faker-js/faker' +import { mount } from '@vue/test-utils' +import { describe, expect, it, vi } from 'vitest' +import { createRecordableFixture } from '../interfaces/recordable.fixture' +import TaskRecordPreview from './TaskRecordPreview.vue' + +const mountTaskRecordPreview = (withRecord = false) => { + const task = createTaskFixture() + const end = toISODate(new Date('2023-04-17T20:00:00.000Z')) + const record = createRecordableFixture({ + taskId: task.id, + stepRecords: { + [faker.datatype.uuid()]: { + start: toISODate(new Date('2023-04-17T19:00:00.000Z')), + end + } + }, + end + }) + + const wrapper = mount(TaskRecordPreview, { + ...withPlugins({ + 'task-store': { tasks: [task] }, + 'task-record-store': withRecord + ? { + currentStepId: null, + records: { + [task.id]: record + } + } + : undefined + }), + props: { + taskId: task.id + } + }) + + return { + task, + wrapper + } +} + +describe('Task Record Preview', () => { + it('displays a start recording', () => { + const { wrapper } = mountTaskRecordPreview() + + expect(wrapper.text()).toContain('start recording') + }) + + it('displays no record yet if there is no record', () => { + const { wrapper } = mountTaskRecordPreview() + + expect(wrapper.text()).toContain('No record yet') + }) + + it('displays the duration of a recorded task', () => { + const { wrapper } = mountTaskRecordPreview(true) + + expect(wrapper.text()).toContain('last time: 60 minutes') + }) + + it('navigates to recording view on click', async () => { + const { task, wrapper } = mountTaskRecordPreview() + + const spyOnPush = vi.spyOn(router, 'push') + + await wrapper.find('a').trigger('click') + + expect(spyOnPush).toHaveBeenCalledTimes(1) + expect(spyOnPush).toHaveBeenCalledWith({ + name: 'record-view', + params: { + taskId: task.id + } + }) + }) +}) diff --git a/src/modules/record/hooks/useTaskRecordMetadata.ts b/src/modules/record/hooks/useTaskRecordMetadata.ts index 216e8e8..9e82390 100644 --- a/src/modules/record/hooks/useTaskRecordMetadata.ts +++ b/src/modules/record/hooks/useTaskRecordMetadata.ts @@ -7,6 +7,7 @@ export const useTaskRecordMetadata = ( ) => { const taskDurations = computed(() => { const recordValue = isRef(record) ? record.value : record + if (!recordValue?.end) { return [] }