summaryrefslogtreecommitdiff
path: root/src/utils/datetime.test.ts
diff options
context:
space:
mode:
authorJoão Augusto Costa Branco Marado Torres <torres.dev@disroot.org>2025-06-24 12:08:41 -0300
committerJoão Augusto Costa Branco Marado Torres <torres.dev@disroot.org>2025-06-24 12:50:43 -0300
commitf9a77c5c27aede4e5978eb55d9b7af781b680a1d (patch)
treed545e325ba1ae756fc2eac66fac1001b6753c40d /src/utils/datetime.test.ts
feat!: initial commit
Signed-off-by: João Augusto Costa Branco Marado Torres <torres.dev@disroot.org>
Diffstat (limited to 'src/utils/datetime.test.ts')
-rw-r--r--src/utils/datetime.test.ts63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/utils/datetime.test.ts b/src/utils/datetime.test.ts
new file mode 100644
index 0000000..dd239b2
--- /dev/null
+++ b/src/utils/datetime.test.ts
@@ -0,0 +1,63 @@
+import { assertEquals, assertMatch } from "@std/assert";
+import { describe, it } from "@std/testing/bdd";
+import { toIso8601Full, toIso8601FullUTC } from "./datetime.ts";
+import { FakeTime } from "@std/testing/time";
+
+describe("toIso8601Full", () => {
+ it("formats current local time with offset", () => {
+ const date = new Date();
+ const result = toIso8601Full(date);
+
+ assertMatch(
+ result,
+ /^[+-]\d{6}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}(Z|[+-]\d{2}:\d{2})$/,
+ );
+ });
+
+ it("handles dates before year 0 (BC)", () => {
+ const date = new Date(-2000, 0, 1, 0, 0, 0, 0);
+ const result = toIso8601Full(date);
+
+ assertMatch(result, /^-\d{6}-01-01T00:00:00\.000(Z|[+-]\d{2}:\d{2})$/);
+ });
+
+ it("pads components correctly", () => {
+ const date = new Date(7, 0, 2, 3, 4, 5, 6);
+ const result = toIso8601Full(date);
+
+ assertMatch(result, /^\+001907-01-02T03:04:05\.006(Z|[+-]\d{2}:\d{2})$/);
+ });
+
+ it("handles positive and negative timezone offsets", () => {
+ const date = new Date("2025-06-17T12:00:00Z");
+ const result = toIso8601Full(date);
+
+ assertMatch(
+ result,
+ /^[+-]\d{6}-06-17T\d{2}:\d{2}:\d{2}\.\d{3}(Z|[+-]\d{2}:\d{2})$/,
+ );
+ });
+});
+
+describe("toIso8601FullUTC", () => {
+ it("always formats in UTC with 'Z'", () => {
+ const date = new Date(Date.UTC(2025, 11, 31, 23, 59, 59, 999));
+ const result = toIso8601FullUTC(date);
+
+ assertEquals(result, "+002025-12-31T23:59:59.999Z");
+ });
+
+ it("pads milliseconds and components correctly", () => {
+ const date = new Date(Date.UTC(7, 0, 2, 3, 4, 5, 6));
+ const result = toIso8601FullUTC(date);
+
+ assertEquals(result, "+001907-01-02T03:04:05.006Z");
+ });
+
+ it("handles BC dates (negative years)", () => {
+ const date = new Date(Date.UTC(-44, 2, 15, 12, 0, 0, 0));
+ const result = toIso8601FullUTC(date);
+
+ assertMatch(result, /^-\d{6}-03-15T12:00:00\.000Z$/);
+ });
+});