add a breaktime service to change all unfinished steps

This commit is contained in:
Julien Calixte
2023-04-17 21:13:45 +02:00
parent 4ac450a8bd
commit bdee3d14b0
2 changed files with 77 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
import { toISODate } from '@/shared/types/date'
import { describe, expect, it } from 'vitest'
import { createRecordableFixture } from '../interfaces/recordable.fixture'
import { addBreakTimeToStepRecords } from './breaktime-service'
describe('Break Time Service', () => {
it('adds no break time if there is no break time', () => {
const record = createRecordableFixture({
breakTime: undefined
})
expect(addBreakTimeToStepRecords(record)).toEqual(record)
})
it('adds no break time if the break is not over yet', () => {
const record = createRecordableFixture({
breakTime: {
start: toISODate(new Date('2023-04-17T19:00:00.000Z'))
},
stepRecords: {
'step-id-1': {
start: toISODate(new Date('2023-04-17T18:00:00.000Z'))
}
}
})
expect(addBreakTimeToStepRecords(record)).toEqual(record)
})
it('adds the break time if the break time is over', () => {
const record = createRecordableFixture({
breakTime: {
start: toISODate(new Date('2023-04-17T19:00:00.000Z')),
end: toISODate(new Date('2023-04-17T20:00:00.000Z'))
},
stepRecords: {
'step-id-1': {
start: toISODate(new Date('2023-04-17T18:00:00.000Z'))
}
}
})
expect(addBreakTimeToStepRecords(record)).toEqual({
...record,
stepRecords: {
'step-id-1': {
start: toISODate(new Date('2023-04-17T19:00:00.000Z'))
}
}
})
})
})

View File

@@ -0,0 +1,25 @@
import { toISODate } from '@/shared/types/date'
import type { Recordable } from '../interfaces/recordable'
export const addBreakTimeToStepRecords = (record: Recordable): Recordable => {
const breakTime = record.breakTime
if (!breakTime || !breakTime.end) {
return record
}
const diffInMs =
new Date(breakTime.end).getTime() - new Date(breakTime.start).getTime()
const stepRecords = record.stepRecords
for (const stepId in stepRecords) {
if (!stepRecords[stepId].end) {
const newStart = new Date(stepRecords[stepId].start).getTime() + diffInMs
stepRecords[stepId].start = toISODate(new Date(newStart))
}
}
return { ...record, stepRecords }
}