From 7b13e180697f3e436e76595a2b4feec42d554d85 Mon Sep 17 00:00:00 2001 From: Ivan Gabriele Date: Thu, 2 Nov 2023 12:38:56 +0100 Subject: [PATCH] Fix end-date-less missions marked as done in mission list --- .../__tests__/getMissionStatus.test.ts | 32 +++++++++++++++++++ frontend/src/domain/entities/missions.ts | 24 ++++++++------ 2 files changed, 46 insertions(+), 10 deletions(-) create mode 100644 frontend/src/domain/entities/__tests__/getMissionStatus.test.ts diff --git a/frontend/src/domain/entities/__tests__/getMissionStatus.test.ts b/frontend/src/domain/entities/__tests__/getMissionStatus.test.ts new file mode 100644 index 0000000000..e8a3f7c56c --- /dev/null +++ b/frontend/src/domain/entities/__tests__/getMissionStatus.test.ts @@ -0,0 +1,32 @@ +import { describe, expect, it } from '@jest/globals' +import { customDayjs } from '@mtes-mct/monitor-ui' + +import { getMissionStatus } from '../missions' + +describe('getMissionStatus()', () => { + const yesterday = customDayjs.utc().subtract(1, 'day').toISOString() + const tomorrow = customDayjs.utc().add(1, 'day').toISOString() + + const openCases: Array<[string | undefined, string | undefined, boolean | undefined, string]> = [ + [yesterday, undefined, false, 'PENDING'], + [yesterday, yesterday, false, 'ENDED'], + [yesterday, tomorrow, false, 'PENDING'], + [tomorrow, yesterday, false, 'UPCOMING'], + [tomorrow, tomorrow, false, 'UPCOMING'] + ] + const closedCases: Array<[string | undefined, string | undefined, boolean | undefined, string]> = openCases.map( + ([startDateTimeUtc, endDateTimeUtc]) => [startDateTimeUtc, endDateTimeUtc, true, 'CLOSED'] + ) + const errorCases: Array<[string | undefined, string | undefined, boolean | undefined, string]> = openCases.map( + ([, endDateTimeUtc]) => [undefined, endDateTimeUtc, true, 'ERROR'] + ) + + it.each([...openCases, ...closedCases, ...errorCases])( + 'Given %p, %p and %p as `startDateTimeUtc`, `endDateTimeUtc` and `isClosed`. Should return %p', + (startDateTimeUtc, endDateTimeUtc, isClosed, expectedResult) => { + const result = getMissionStatus({ endDateTimeUtc, isClosed, startDateTimeUtc }) + + expect(result).toEqual(expectedResult) + } + ) +}) diff --git a/frontend/src/domain/entities/missions.ts b/frontend/src/domain/entities/missions.ts index abbbdfc924..e58d090412 100644 --- a/frontend/src/domain/entities/missions.ts +++ b/frontend/src/domain/entities/missions.ts @@ -1,4 +1,4 @@ -import { THEME, customDayjs as dayjs } from '@mtes-mct/monitor-ui' +import { THEME, customDayjs } from '@mtes-mct/monitor-ui' import type { LegacyControlUnit } from './legacyControlUnit' import type { SeaFrontEnum } from './seaFrontType' @@ -348,19 +348,23 @@ export const getMissionStatus = ({ isClosed?: Boolean startDateTimeUtc?: string | null }) => { + if (!startDateTimeUtc) { + return 'ERROR' + } + if (isClosed) { return MissionStatusEnum.CLOSED } - if (startDateTimeUtc) { - if (dayjs().isBefore(dayjs(startDateTimeUtc)) || dayjs().isSame(dayjs(startDateTimeUtc))) { - return MissionStatusEnum.UPCOMING - } - if (dayjs().isAfter(dayjs(endDateTimeUtc)) || dayjs().isSame(dayjs(endDateTimeUtc))) { - return MissionStatusEnum.ENDED - } - return MissionStatusEnum.PENDING + const now = customDayjs() + + if (customDayjs(startDateTimeUtc).isAfter(now)) { + return MissionStatusEnum.UPCOMING + } + + if (endDateTimeUtc && customDayjs(endDateTimeUtc).isBefore(now)) { + return MissionStatusEnum.ENDED } - return 'ERROR' + return MissionStatusEnum.PENDING }