diff --git a/src/export/__fixtures__/csv/currentTimeForUnfinished.csv b/src/export/__fixtures__/csv/currentTimeForUnfinished.csv new file mode 100644 index 0000000..1480a12 --- /dev/null +++ b/src/export/__fixtures__/csv/currentTimeForUnfinished.csv @@ -0,0 +1,5 @@ +Block,Start Time,End time,Duration +Test,20-01-01 13:00:00,20-01-01 14:00:00,1.00h +Test 2,20-01-01 13:00:00,20-01-01 15:00:00,2.00h +Test Group,,,2.00h +Test 3,20-01-01 13:00:00,20-01-01 15:00:00,2.00h \ No newline at end of file diff --git a/src/export/__fixtures__/csv/currentTimeForUnfinished.ts b/src/export/__fixtures__/csv/currentTimeForUnfinished.ts new file mode 100644 index 0000000..17a5d43 --- /dev/null +++ b/src/export/__fixtures__/csv/currentTimeForUnfinished.ts @@ -0,0 +1,40 @@ +import fs from "fs/promises"; +import moment from "moment"; +import { v4 } from "uuid"; + +export const output = await fs.readFile("src/export/__fixtures__/csv/tableRows.csv", "utf-8"); + +export const start = moment("2020-01-01T00:00:00Z"); +export const currentTime = moment(start).add(2, "hours"); + +export const entries = [ + { + id: v4(), + name: "Test", + startTime: moment(start), + endTime: moment(start).add(1, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test 2", + startTime: moment(start), + endTime: moment(start).add(2, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test Group", + startTime: null, + endTime: null, + subEntries: [ + { + id: v4(), + name: "Test 3", + startTime: moment(start), + endTime: null, + subEntries: null, + }, + ], + }, +]; diff --git a/src/export/__fixtures__/csv/flattenGroupEntries.csv b/src/export/__fixtures__/csv/flattenGroupEntries.csv new file mode 100644 index 0000000..1480a12 --- /dev/null +++ b/src/export/__fixtures__/csv/flattenGroupEntries.csv @@ -0,0 +1,5 @@ +Block,Start Time,End time,Duration +Test,20-01-01 13:00:00,20-01-01 14:00:00,1.00h +Test 2,20-01-01 13:00:00,20-01-01 15:00:00,2.00h +Test Group,,,2.00h +Test 3,20-01-01 13:00:00,20-01-01 15:00:00,2.00h \ No newline at end of file diff --git a/src/export/__fixtures__/csv/flattenGroupEntries.ts b/src/export/__fixtures__/csv/flattenGroupEntries.ts new file mode 100644 index 0000000..b5f2585 --- /dev/null +++ b/src/export/__fixtures__/csv/flattenGroupEntries.ts @@ -0,0 +1,42 @@ +import fs from "fs/promises"; +import moment from "moment"; +import { v4 } from "uuid"; + +export const output = await fs.readFile( + "src/export/__fixtures__/csv/flattenGroupEntries.csv", + "utf-8" +); + +export const currentTime = moment("2020-01-01T00:00:00Z"); + +export const entries = [ + { + id: v4(), + name: "Test", + startTime: moment(currentTime), + endTime: moment(currentTime).add(1, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test 2", + startTime: moment(currentTime), + endTime: moment(currentTime).add(2, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test Group", + startTime: null, + endTime: null, + subEntries: [ + { + id: v4(), + name: "Test 3", + startTime: moment(currentTime), + endTime: moment(currentTime).add(2, "hour"), + subEntries: null, + }, + ], + }, +]; diff --git a/src/export/__fixtures__/csv/tableRows.csv b/src/export/__fixtures__/csv/tableRows.csv new file mode 100644 index 0000000..80ee923 --- /dev/null +++ b/src/export/__fixtures__/csv/tableRows.csv @@ -0,0 +1,3 @@ +Block,Start Time,End time,Duration +Test,20-01-01 13:00:00,20-01-01 14:00:00,1.00h +Test 2,20-01-01 13:00:00,20-01-01 15:00:00,2.00h \ No newline at end of file diff --git a/src/export/__fixtures__/csv/tableRows.ts b/src/export/__fixtures__/csv/tableRows.ts new file mode 100644 index 0000000..10e933b --- /dev/null +++ b/src/export/__fixtures__/csv/tableRows.ts @@ -0,0 +1,24 @@ +import fs from "fs/promises"; +import moment from "moment"; +import { v4 } from "uuid"; + +export const output = await fs.readFile("src/export/__fixtures__/csv/tableRows.csv", "utf-8"); + +export const currentTime = moment("2020-01-01T00:00:00Z"); + +export const entries = [ + { + id: v4(), + name: "Test", + startTime: moment(currentTime), + endTime: moment(currentTime).add(1, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test 2", + startTime: moment(currentTime), + endTime: moment(currentTime).add(2, "hour"), + subEntries: null, + }, +]; diff --git a/src/export/__fixtures__/markdown/currentTimeForUnfinished.md b/src/export/__fixtures__/markdown/currentTimeForUnfinished.md new file mode 100644 index 0000000..efc8374 --- /dev/null +++ b/src/export/__fixtures__/markdown/currentTimeForUnfinished.md @@ -0,0 +1,5 @@ +| Test | 20-01-01 13:00:00 | 20-01-01 14:00:00 | 1.00h | +| Test 2 | 20-01-01 13:00:00 | 20-01-01 15:00:00 | 2.00h | +| Test Group | | | 2.00h | +| Test 3 | 20-01-01 13:00:00 | 20-01-01 15:00:00 | 2.00h | +| **Total** | | | **5.00h** | diff --git a/src/export/__fixtures__/markdown/currentTimeForUnfinished.ts b/src/export/__fixtures__/markdown/currentTimeForUnfinished.ts new file mode 100644 index 0000000..9b2f020 --- /dev/null +++ b/src/export/__fixtures__/markdown/currentTimeForUnfinished.ts @@ -0,0 +1,40 @@ +import fs from "fs/promises"; +import moment from "moment"; +import { v4 } from "uuid"; + +export const output = await fs.readFile("src/export/__fixtures__/markdown/tableRows.md", "utf-8"); + +export const start = moment("2020-01-01T00:00:00Z"); +export const currentTime = moment(start).add(2, "hours"); + +export const entries = [ + { + id: v4(), + name: "Test", + startTime: moment(start), + endTime: moment(start).add(1, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test 2", + startTime: moment(start), + endTime: moment(start).add(2, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test Group", + startTime: null, + endTime: null, + subEntries: [ + { + id: v4(), + name: "Test 3", + startTime: moment(start), + endTime: null, + subEntries: null, + }, + ], + }, +]; diff --git a/src/export/__fixtures__/markdown/flattenGroupEntries.md b/src/export/__fixtures__/markdown/flattenGroupEntries.md new file mode 100644 index 0000000..351c589 --- /dev/null +++ b/src/export/__fixtures__/markdown/flattenGroupEntries.md @@ -0,0 +1,7 @@ +| Block | Start Time | End time | Duration | +| ---------- | ----------------- | ----------------- | --------- | +| Test | 20-01-01 13:00:00 | 20-01-01 14:00:00 | 1.00h | +| Test 2 | 20-01-01 13:00:00 | 20-01-01 15:00:00 | 2.00h | +| Test Group | | | 2.00h | +| Test 3 | 20-01-01 13:00:00 | 20-01-01 15:00:00 | 2.00h | +| **Total** | | | **5.00h** | diff --git a/src/export/__fixtures__/markdown/flattenGroupEntries.ts b/src/export/__fixtures__/markdown/flattenGroupEntries.ts new file mode 100644 index 0000000..d752c6d --- /dev/null +++ b/src/export/__fixtures__/markdown/flattenGroupEntries.ts @@ -0,0 +1,42 @@ +import fs from "fs/promises"; +import moment from "moment"; +import { v4 } from "uuid"; + +export const output = await fs.readFile( + "src/export/__fixtures__/markdown/flattenGroupEntries.md", + "utf-8" +); + +export const currentTime = moment("2020-01-01T00:00:00Z"); + +export const entries = [ + { + id: v4(), + name: "Test", + startTime: moment(currentTime), + endTime: moment(currentTime).add(1, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test 2", + startTime: moment(currentTime), + endTime: moment(currentTime).add(2, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test Group", + startTime: null, + endTime: null, + subEntries: [ + { + id: v4(), + name: "Test 3", + startTime: moment(currentTime), + endTime: moment(currentTime).add(2, "hour"), + subEntries: null, + }, + ], + }, +]; diff --git a/src/export/__fixtures__/markdown/tableRows.md b/src/export/__fixtures__/markdown/tableRows.md new file mode 100644 index 0000000..0e013b6 --- /dev/null +++ b/src/export/__fixtures__/markdown/tableRows.md @@ -0,0 +1,5 @@ +| Block | Start Time | End time | Duration | +| --------- | ----------------- | ----------------- | --------- | +| Test | 20-01-01 13:00:00 | 20-01-01 14:00:00 | 1.00h | +| Test 2 | 20-01-01 13:00:00 | 20-01-01 15:00:00 | 2.00h | +| **Total** | | | **3.00h** | diff --git a/src/export/__fixtures__/markdown/tableRows.ts b/src/export/__fixtures__/markdown/tableRows.ts new file mode 100644 index 0000000..8808685 --- /dev/null +++ b/src/export/__fixtures__/markdown/tableRows.ts @@ -0,0 +1,24 @@ +import fs from "fs/promises"; +import moment from "moment"; +import { v4 } from "uuid"; + +export const output = await fs.readFile("src/export/__fixtures__/markdown/tableRows.md", "utf-8"); + +export const currentTime = moment("2020-01-01T00:00:00Z"); + +export const entries = [ + { + id: v4(), + name: "Test", + startTime: moment(currentTime), + endTime: moment(currentTime).add(1, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test 2", + startTime: moment(currentTime), + endTime: moment(currentTime).add(2, "hour"), + subEntries: null, + }, +]; diff --git a/src/export/__fixtures__/raw/currentTimeForUnfinished.ts b/src/export/__fixtures__/raw/currentTimeForUnfinished.ts new file mode 100644 index 0000000..c502658 --- /dev/null +++ b/src/export/__fixtures__/raw/currentTimeForUnfinished.ts @@ -0,0 +1,44 @@ +import moment from "moment"; +import { v4 } from "uuid"; + +export const output = [ + ["Test", "20-01-01 13:00:00", "20-01-01 14:00:00", "1.00h"], + ["Test 2", "20-01-01 13:00:00", "20-01-01 15:00:00", "2.00h"], + ["Test Group", "", "", "2.00h"], + ["Test 3", "20-01-01 13:00:00", "20-01-01 15:00:00", "2.00h"], +]; + +export const start = moment("2020-01-01T00:00:00Z"); +export const currentTime = moment(start).add(2, "hours"); + +export const entries = [ + { + id: v4(), + name: "Test", + startTime: moment(start), + endTime: moment(start).add(1, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test 2", + startTime: moment(start), + endTime: moment(start).add(2, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test Group", + startTime: null, + endTime: null, + subEntries: [ + { + id: v4(), + name: "Test 3", + startTime: moment(start), + endTime: null, + subEntries: null, + }, + ], + }, +]; diff --git a/src/export/__fixtures__/raw/flattenGroupEntries.ts b/src/export/__fixtures__/raw/flattenGroupEntries.ts new file mode 100644 index 0000000..10c5b8c --- /dev/null +++ b/src/export/__fixtures__/raw/flattenGroupEntries.ts @@ -0,0 +1,43 @@ +import moment from "moment"; +import { v4 } from "uuid"; + +export const output = [ + ["Test", "20-01-01 13:00:00", "20-01-01 14:00:00", "1.00h"], + ["Test 2", "20-01-01 13:00:00", "20-01-01 15:00:00", "2.00h"], + ["Test Group", "", "", "2.00h"], + ["Test 3", "20-01-01 13:00:00", "20-01-01 15:00:00", "2.00h"], +]; + +export const currentTime = moment("2020-01-01T00:00:00Z"); + +export const entries = [ + { + id: v4(), + name: "Test", + startTime: moment(currentTime), + endTime: moment(currentTime).add(1, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test 2", + startTime: moment(currentTime), + endTime: moment(currentTime).add(2, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test Group", + startTime: null, + endTime: null, + subEntries: [ + { + id: v4(), + name: "Test 3", + startTime: moment(currentTime), + endTime: moment(currentTime).add(2, "hour"), + subEntries: null, + }, + ], + }, +]; diff --git a/src/export/__fixtures__/raw/tableRows.ts b/src/export/__fixtures__/raw/tableRows.ts new file mode 100644 index 0000000..b526e0b --- /dev/null +++ b/src/export/__fixtures__/raw/tableRows.ts @@ -0,0 +1,26 @@ +import moment from "moment"; +import { v4 } from "uuid"; + +export const output = [ + ["Test", "20-01-01 13:00:00", "20-01-01 14:00:00", "1.00h"], + ["Test 2", "20-01-01 13:00:00", "20-01-01 15:00:00", "2.00h"], +]; + +export const currentTime = moment("2020-01-01T00:00:00Z"); + +export const entries = [ + { + id: v4(), + name: "Test", + startTime: moment(currentTime), + endTime: moment(currentTime).add(1, "hour"), + subEntries: null, + }, + { + id: v4(), + name: "Test 2", + startTime: moment(currentTime), + endTime: moment(currentTime).add(2, "hour"), + subEntries: null, + }, +]; diff --git a/src/export/csv.test.ts b/src/export/csv.test.ts index e941e7b..5f7f71e 100644 --- a/src/export/csv.test.ts +++ b/src/export/csv.test.ts @@ -1,5 +1,3 @@ -import moment from "moment"; -import { v4 } from "uuid"; import { describe, expect, it } from "vitest"; import { defaultSettings } from "@/settings"; @@ -7,113 +5,24 @@ import { defaultSettings } from "@/settings"; import { createCSV } from "./csv"; describe("createCSV", () => { - it("should create entry table rows", () => { - const start = moment("2020-01-01T00:00:00Z"); - const entries = [ - { - id: v4(), - name: "Test", - startTime: moment(start), - endTime: moment(start).add(1, "hour"), - subEntries: null, - }, - { - id: v4(), - name: "Test 2", - startTime: moment(start), - endTime: moment(start).add(2, "hour"), - subEntries: null, - }, - ]; - - const csv = createCSV({ entries }, defaultSettings, start); - expect(csv).toEqual(`Block,Start Time,End time,Duration -Test,20-01-01 13:00:00,20-01-01 14:00:00,1.00h -Test 2,20-01-01 13:00:00,20-01-01 15:00:00,2.00h`); + it("should create entry table rows", async () => { + const { entries, currentTime, output } = await import("./__fixtures__/csv/tableRows"); + const csv = createCSV({ entries }, defaultSettings, currentTime); + expect(csv).toEqual(output); }); - it("should flatten group entries", () => { - const start = moment("2020-01-01T00:00:00Z"); - const entries = [ - { - id: v4(), - name: "Test", - startTime: moment(start), - endTime: moment(start).add(1, "hour"), - subEntries: null, - }, - { - id: v4(), - name: "Test 2", - startTime: moment(start), - endTime: moment(start).add(2, "hour"), - subEntries: null, - }, - { - id: v4(), - name: "Test Group", - startTime: null, - endTime: null, - subEntries: [ - { - id: v4(), - name: "Test 3", - startTime: moment(start), - endTime: moment(start).add(2, "hour"), - subEntries: null, - }, - ], - }, - ]; - - const csv = createCSV({ entries }, defaultSettings, start); - expect(csv).toEqual(`Block,Start Time,End time,Duration -Test,20-01-01 13:00:00,20-01-01 14:00:00,1.00h -Test 2,20-01-01 13:00:00,20-01-01 15:00:00,2.00h -Test Group,,,2.00h -Test 3,20-01-01 13:00:00,20-01-01 15:00:00,2.00h`); + it("should flatten group entries", async () => { + const { entries, currentTime, output } = + await import("./__fixtures__/csv/flattenGroupEntries"); + const csv = createCSV({ entries }, defaultSettings, currentTime); + expect(csv).toEqual(output); }); - it("should use current time for unfinished entries", () => { - const start = moment("2020-01-01T00:00:00Z"); - const currentTime = moment(start).add(2, "hour"); - const entries = [ - { - id: v4(), - name: "Test", - startTime: moment(start), - endTime: moment(start).add(1, "hour"), - subEntries: null, - }, - { - id: v4(), - name: "Test 2", - startTime: moment(start), - endTime: moment(start).add(2, "hour"), - subEntries: null, - }, - { - id: v4(), - name: "Test Group", - startTime: null, - endTime: null, - subEntries: [ - { - id: v4(), - name: "Test 3", - startTime: moment(start), - endTime: null, - subEntries: null, - }, - ], - }, - ]; + it("should use current time for unfinished entries", async () => { + const { entries, currentTime, output } = + await import("./__fixtures__/csv/flattenGroupEntries"); const csv = createCSV({ entries }, defaultSettings, currentTime); - expect(csv).toEqual(`Block,Start Time,End time,Duration -Test,20-01-01 13:00:00,20-01-01 14:00:00,1.00h -Test 2,20-01-01 13:00:00,20-01-01 15:00:00,2.00h -Test Group,,,2.00h -Test 3,20-01-01 13:00:00,20-01-01 15:00:00,2.00h`); + expect(csv).toEqual(output); }); }); diff --git a/src/export/index.test.ts b/src/export/index.test.ts index fdd00b0..587ba17 100644 --- a/src/export/index.test.ts +++ b/src/export/index.test.ts @@ -1,5 +1,3 @@ -import moment from "moment"; -import { v4 } from "uuid"; import { describe, expect, it } from "vitest"; import { defaultSettings } from "@/settings"; @@ -7,116 +5,24 @@ import { defaultSettings } from "@/settings"; import { createRawTable } from "."; describe("createRawTable", () => { - it("should create entry table rows", () => { - const start = moment("2020-01-01T00:00:00Z"); - const entries = [ - { - id: v4(), - name: "Test", - startTime: moment(start), - endTime: moment(start).add(1, "hour"), - subEntries: null, - }, - { - id: v4(), - name: "Test 2", - startTime: moment(start), - endTime: moment(start).add(2, "hour"), - subEntries: null, - }, - ]; - - const rawTable = createRawTable(entries, defaultSettings, start); - expect(rawTable).toEqual([ - ["Test", "20-01-01 13:00:00", "20-01-01 14:00:00", "1.00h"], - ["Test 2", "20-01-01 13:00:00", "20-01-01 15:00:00", "2.00h"], - ]); + it("should create entry table rows", async () => { + const { entries, currentTime, output } = await import("./__fixtures__/raw/tableRows"); + const tableRows = createRawTable(entries, defaultSettings, currentTime); + expect(tableRows).toEqual(output); }); - it("should flatten group entries", () => { - const start = moment("2020-01-01T00:00:00Z"); - const entries = [ - { - id: v4(), - name: "Test", - startTime: moment(start), - endTime: moment(start).add(1, "hour"), - subEntries: null, - }, - { - id: v4(), - name: "Test 2", - startTime: moment(start), - endTime: moment(start).add(2, "hour"), - subEntries: null, - }, - { - id: v4(), - name: "Test Group", - startTime: null, - endTime: null, - subEntries: [ - { - id: v4(), - name: "Test 3", - startTime: moment(start), - endTime: moment(start).add(2, "hour"), - subEntries: null, - }, - ], - }, - ]; - - const rawTable = createRawTable(entries, defaultSettings, start); - expect(rawTable).toEqual([ - ["Test", "20-01-01 13:00:00", "20-01-01 14:00:00", "1.00h"], - ["Test 2", "20-01-01 13:00:00", "20-01-01 15:00:00", "2.00h"], - ["Test Group", "", "", "2.00h"], - ["Test 3", "20-01-01 13:00:00", "20-01-01 15:00:00", "2.00h"], - ]); + it("should flatten group entries", async () => { + const { entries, currentTime, output } = + await import("./__fixtures__/raw/flattenGroupEntries"); + const tableRows = createRawTable(entries, defaultSettings, currentTime); + expect(tableRows).toEqual(output); }); - it("should use current time for unfinished entries", () => { - const start = moment("2020-01-01T00:00:00Z"); - const currentTime = moment(start).add(2, "hour"); - const entries = [ - { - id: v4(), - name: "Test", - startTime: moment(start), - endTime: moment(start).add(1, "hour"), - subEntries: null, - }, - { - id: v4(), - name: "Test 2", - startTime: moment(start), - endTime: moment(start).add(2, "hour"), - subEntries: null, - }, - { - id: v4(), - name: "Test Group", - startTime: null, - endTime: null, - subEntries: [ - { - id: v4(), - name: "Test 3", - startTime: moment(start), - endTime: null, - subEntries: null, - }, - ], - }, - ]; + it("should use current time for unfinished entries", async () => { + const { entries, currentTime, output } = + await import("./__fixtures__/raw/flattenGroupEntries"); - const rawTable = createRawTable(entries, defaultSettings, currentTime); - expect(rawTable).toEqual([ - ["Test", "20-01-01 13:00:00", "20-01-01 14:00:00", "1.00h"], - ["Test 2", "20-01-01 13:00:00", "20-01-01 15:00:00", "2.00h"], - ["Test Group", "", "", "2.00h"], - ["Test 3", "20-01-01 13:00:00", "20-01-01 15:00:00", "2.00h"], - ]); + const tableRows = createRawTable(entries, defaultSettings, currentTime); + expect(tableRows).toEqual(output); }); }); diff --git a/src/export/markdown-table.test.ts b/src/export/markdown-table.test.ts new file mode 100644 index 0000000..07330cc --- /dev/null +++ b/src/export/markdown-table.test.ts @@ -0,0 +1,28 @@ +import { describe, expect, it } from "vitest"; + +import { defaultSettings } from "@/settings"; + +import { createMarkdownTable } from "./markdown-table"; + +describe("createMarkdownTable", () => { + it("should create entry table rows", async () => { + const { entries, currentTime, output } = await import("./__fixtures__/markdown/tableRows"); + const markdown = createMarkdownTable({ entries }, defaultSettings, currentTime); + expect(markdown).toEqual(output); + }); + + it("should flatten group entries", async () => { + const { entries, currentTime, output } = + await import("./__fixtures__/markdown/flattenGroupEntries"); + const markdown = createMarkdownTable({ entries }, defaultSettings, currentTime); + expect(markdown).toEqual(output); + }); + + it("should use current time for unfinished entries", async () => { + const { entries, currentTime, output } = + await import("./__fixtures__/markdown/flattenGroupEntries"); + + const markdown = createMarkdownTable({ entries }, defaultSettings, currentTime); + expect(markdown).toEqual(output); + }); +});