import fetchMock from 'fetch-mock'; import PageApi from './page-api'; import { pageVersion } from '../constants/test-constants'; import { afterEach, describe, expect, it } from 'vitest'; const schedule = (id = '1', startHours = 0, endHours = 4) => { return { id, cmsPageVersionId: id, recurrenceStartTime: { hours: startHours, minutes: 0 }, recurrenceEndTime: { hours: endHours, minutes: 0 }, selectedDay: 'Monday' }; }; describe('Page API', () => { afterEach(() => { fetchMock.restore(); }); it('should return scheduled version ids for pageId', async () => { fetchMock.get(/api\/pages\/schedules\/1/, { status: 200, body: [pageVersion.id] }); const versionIds = await PageApi.scheduledVersionIds('1'); expect(versionIds).toEqual([pageVersion.id]); }); it('should return scheduled version ids for pageId', async () => { fetchMock.get(/api\/pages\/schedules\/1/, { status: 200, body: [pageVersion.id] }); const versionIds = await PageApi.scheduledVersionIds('1'); expect(versionIds).toEqual([pageVersion.id]); }); it('should post and return daily schedule', async () => { fetchMock.post(/api\/versions\/schedule/, { status: 200, body: schedule() }); const createdSchedule = await PageApi.scheduleDaily(schedule()); expect(createdSchedule).toEqual(schedule()); }); it('should return recurrent schedules for id', async () => { const schedules = [schedule(), schedule('2')]; fetchMock.get(/api\/versions\/schedules\/1/, { status: 200, body: schedules }); const schedulesForId = await PageApi.getRecurrentSchedulesForId('1'); expect(schedulesForId).toEqual(schedules); }); it('should return a preview url for version and versionCounter', () => { const versionCounter = 1; const previewUrl = PageApi.previewUrl(pageVersion, versionCounter); const expectedPreviewUrl = `/api/versions/preview/${pageVersion.id}?counter=${versionCounter}`; expect(previewUrl).toEqual(expectedPreviewUrl); }); it('should return null for a preview url if the version does not have an id', () => { const previewUrl = PageApi.previewUrl({ ...pageVersion, id: '' }, 1); expect(previewUrl).toBeNull(); }); });