Skip to content

Commit

Permalink
feat: Improve workTimes mocks
Browse files Browse the repository at this point in the history
  • Loading branch information
jhnns committed Feb 21, 2023
1 parent de0e90d commit 3499590
Show file tree
Hide file tree
Showing 4 changed files with 135 additions and 124 deletions.
36 changes: 28 additions & 8 deletions src/lib/mocks.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
// These date helpers are not meant to replace an actual date library.
// They are inaccurate and sometimes just wrong, see https://gist.github.com/timvisee/fcda9bbdff88d45cc9061606b4b923ca
// They should only be used for generating mock data.

import { faker } from "@faker-js/faker";

/**
* The number of milliseconds in a typical day.
* Should only be used for calculating mock data.
* The number of milliseconds on a typical day.
*/
export const ONE_DAY = 24 * 60 * 60 * 1000;

/**
* The number of milliseconds in a typical year.
* Should only be used for calculating mock data.
* The number of milliseconds on a typical year.
*/
export const ONE_YEAR = 356 * ONE_DAY;

Expand All @@ -26,13 +28,13 @@ export const endOfYear = (dateTime: Date) => {
return new Date(dateTime.getFullYear() + 1, 0, 0, 23, 59, 59, 999);
};

export const nextDay = (date: Date) => {
const nextDay = new Date(date.getTime() + ONE_DAY);
export const startOfNextDay = (date: Date) => {
const nextDay = new Date(startOfDay(date).getTime() + 1.5 * ONE_DAY);

return new Date(nextDay.getFullYear(), nextDay.getMonth(), nextDay.getDate());
};

export const generateWithMaxDuplicates = <Value>({
const generateWithMaxDuplicates = <Value>({
count,
maxDuplicates = 1,
generate,
Expand Down Expand Up @@ -61,7 +63,25 @@ This usually happens when the generated values create too many conflicts (e.g. t
acceptedCount++;
}

return Array.from(accepted.values()).flatMap((values) => values);
return Array.from(accepted.values()).flat();
};

export const generateRandomDateTimes = ({
count,
between: [from, to],
maxDuplicates = 1,
}: {
count: number;
between: readonly [Date, Date];
maxDuplicates?: number;
}) => {
return generateWithMaxDuplicates({
count,
maxDuplicates,
generate: () => {
return faker.date.between(from, to).getTime();
},
}).sort();
};

export const generateRandomDates = ({
Expand Down
120 changes: 66 additions & 54 deletions src/models/__snapshots__/workTimes.mocks.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@ Array [
Object {
"changes": Array [
Object {
"timeSince": "2020-03-24T15:24:20Z",
"timeUntil": "2020-03-24T16:25:46Z",
"type": 2,
"timeSince": "2020-03-24T14:09:16Z",
"timeUntil": "2020-03-24T15:47:12Z",
"type": 1,
},
Object {
"timeSince": "2020-03-24T17:28:08Z",
"timeUntil": "2020-03-24T17:43:43Z",
"timeSince": "2020-03-24T17:13:53Z",
"timeUntil": "2020-03-24T21:15:34Z",
"type": 2,
},
Object {
"timeSince": "2020-03-24T18:43:19Z",
"timeUntil": "2020-03-24T22:24:41Z",
"type": 2,
"timeSince": "2020-03-24T21:16:02Z",
"timeUntil": "2020-03-24T22:43:14Z",
"type": 1,
},
],
"date": "2020-03-24",
Expand All @@ -27,19 +27,19 @@ Array [
Object {
"changes": Array [
Object {
"timeSince": "2020-04-14T12:05:31Z",
"timeUntil": "2020-04-14T15:35:44Z",
"timeSince": "2020-04-14T07:21:31Z",
"timeUntil": "2020-04-14T12:14:10Z",
"type": 1,
},
Object {
"timeSince": "2020-04-14T16:43:44Z",
"timeUntil": "2020-04-14T18:10:26Z",
"timeSince": "2020-04-14T13:24:38Z",
"timeUntil": "2020-04-14T13:37:27Z",
"type": 2,
},
Object {
"timeSince": "2020-04-14T18:17:50Z",
"timeUntil": "2020-04-14T19:31:25Z",
"type": 1,
"timeSince": "2020-04-14T15:32:32Z",
"timeUntil": "2020-04-14T19:03:20Z",
"type": 2,
},
],
"date": "2020-04-14",
Expand All @@ -49,13 +49,8 @@ Array [
Object {
"changes": Array [
Object {
"timeSince": "2020-06-05T13:59:37Z",
"timeUntil": "2020-06-05T14:13:14Z",
"type": 2,
},
Object {
"timeSince": "2020-06-05T14:39:21Z",
"timeUntil": "2020-06-05T19:05:46Z",
"timeSince": "2020-06-05T05:25:56Z",
"timeUntil": "2020-06-05T20:40:26Z",
"type": 2,
},
],
Expand All @@ -66,13 +61,18 @@ Array [
Object {
"changes": Array [
Object {
"timeSince": "2020-09-11T12:29:09Z",
"timeUntil": "2020-09-11T15:04:18Z",
"timeSince": "2020-09-11T06:00:33Z",
"timeUntil": "2020-09-11T08:12:39Z",
"type": 1,
},
Object {
"timeSince": "2020-09-11T08:22:47Z",
"timeUntil": "2020-09-11T14:33:58Z",
"type": 1,
},
Object {
"timeSince": "2020-09-11T21:25:45Z",
"timeUntil": "2020-09-11T21:41:56Z",
"timeSince": "2020-09-11T19:09:46Z",
"timeUntil": "2020-09-11T21:42:42Z",
"type": 1,
},
],
Expand All @@ -83,14 +83,14 @@ Array [
Object {
"changes": Array [
Object {
"timeSince": "2020-09-17T13:19:29Z",
"timeUntil": "2020-09-17T15:40:51Z",
"type": 2,
"timeSince": "2020-09-17T11:08:48Z",
"timeUntil": "2020-09-17T15:48:36Z",
"type": 1,
},
Object {
"timeSince": "2020-09-17T18:34:06Z",
"timeUntil": "2020-09-17T21:15:06Z",
"type": 2,
"timeSince": "2020-09-17T19:13:32Z",
"timeUntil": "2020-09-18T00:23:10Z",
"type": 1,
},
],
"date": "2020-09-17",
Expand All @@ -106,16 +106,16 @@ Array [
"date": "2020-03-24",
"intervals": Array [
Object {
"timeSince": "2020-03-24T15:24:20Z",
"timeUntil": "2020-03-24T16:25:46Z",
"timeSince": "2020-03-24T14:09:16Z",
"timeUntil": "2020-03-24T15:47:12Z",
},
Object {
"timeSince": "2020-03-24T17:28:08Z",
"timeUntil": "2020-03-24T17:43:43Z",
"timeSince": "2020-03-24T17:13:53Z",
"timeUntil": "2020-03-24T21:15:34Z",
},
Object {
"timeSince": "2020-03-24T18:43:19Z",
"timeUntil": "2020-03-24T22:24:41Z",
"timeSince": "2020-03-24T21:16:02Z",
"timeUntil": "2020-03-24T22:43:14Z",
},
],
"offset": 0,
Expand All @@ -125,12 +125,20 @@ Array [
"date": "2020-04-14",
"intervals": Array [
Object {
"timeSince": "2020-04-14T12:05:31Z",
"timeUntil": "2020-04-14T13:03:41Z",
"timeSince": "2020-04-14T07:21:31Z",
"timeUntil": "2020-04-14T12:14:10Z",
},
Object {
"timeSince": "2020-04-14T15:35:44Z",
"timeUntil": "2020-04-14T18:10:26Z",
"timeSince": "2020-04-14T13:24:38Z",
"timeUntil": "2020-04-14T13:37:27Z",
},
Object {
"timeSince": "2020-04-14T13:51:43Z",
"timeUntil": "2020-04-14T15:32:32Z",
},
Object {
"timeSince": "2020-04-14T17:54:45Z",
"timeUntil": "2020-04-14T20:26:09Z",
},
],
"offset": 0,
Expand All @@ -140,16 +148,16 @@ Array [
"date": "2020-06-05",
"intervals": Array [
Object {
"timeSince": "2020-06-05T13:50:29Z",
"timeUntil": "2020-06-05T14:13:14Z",
"timeSince": "2020-06-05T05:25:56Z",
"timeUntil": "2020-06-05T09:52:27Z",
},
Object {
"timeSince": "2020-06-05T14:39:21Z",
"timeUntil": "2020-06-05T14:43:25Z",
"timeSince": "2020-06-05T11:46:46Z",
"timeUntil": "2020-06-05T14:31:32Z",
},
Object {
"timeSince": "2020-06-05T16:25:38Z",
"timeUntil": "2020-06-05T19:44:36Z",
"timeSince": "2020-06-05T20:40:26Z",
"timeUntil": "2020-06-05T21:29:49Z",
},
],
"offset": 0,
Expand All @@ -159,12 +167,12 @@ Array [
"date": "2020-09-11",
"intervals": Array [
Object {
"timeSince": "2020-09-11T10:25:10Z",
"timeUntil": "2020-09-11T11:46:26Z",
"timeSince": "2020-09-11T08:22:47Z",
"timeUntil": "2020-09-11T18:15:13Z",
},
Object {
"timeSince": "2020-09-11T16:09:25Z",
"timeUntil": "2020-09-11T22:37:45Z",
"timeSince": "2020-09-11T19:09:46Z",
"timeUntil": "2020-09-11T21:42:42Z",
},
],
"offset": 0,
Expand All @@ -174,8 +182,12 @@ Array [
"date": "2020-09-17",
"intervals": Array [
Object {
"timeSince": "2020-09-17T14:53:25Z",
"timeUntil": "2020-09-17T19:53:41Z",
"timeSince": "2020-09-17T06:00:33Z",
"timeUntil": null,
},
Object {
"timeSince": "2020-09-17T16:45:26Z",
"timeUntil": "2020-09-17T21:05:45Z",
},
],
"offset": 0,
Expand Down
4 changes: 2 additions & 2 deletions src/models/targethours.mocks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
generateRandomMonths,
toPairs,
endOfMonth,
nextDay,
startOfNextDay,
} from "../lib/mocks.js";
import {
TargethoursRow,
Expand Down Expand Up @@ -53,7 +53,7 @@ export const createTargethoursRowWeeklyMocks = ({
const dateSince =
// Make it more unlikely that there are "holes" between to and from
previousTo !== undefined && faker.datatype.number({ min: 0, max: 10 }) < 7
? nextDay(new Date(previousTo))
? startOfNextDay(new Date(previousTo))
: new Date(from);
const commonTargethoursRow = createCommonTargethoursRowMock(dateSince);
const isLastOne = index === count - 1;
Expand Down
Loading

0 comments on commit 3499590

Please sign in to comment.