Skip to content

Commit 0d19ee3

Browse files
committed
test: add comprehensive timezone validation tests
Add test suite for isValidTimeZone() function covering security and compatibility scenarios. Tests cover: - Valid IANA timezone names and offsets - SQL injection prevention - Special character rejection - Length validation - Edge cases for complex timezone names Ensures timezone validation is robust against malicious input while supporting all legitimate timezone formats.
1 parent 6af60fa commit 0d19ee3

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

src/utils/time.spec.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { describe, expect, it } from "vitest";
2+
import { isValidTimeZone } from "./time";
3+
4+
describe("time utilities", () => {
5+
describe("isValidTimeZone", () => {
6+
it("should accept valid IANA timezone names", () => {
7+
expect(isValidTimeZone("America/New_York")).toBe(true);
8+
expect(isValidTimeZone("Europe/London")).toBe(true);
9+
expect(isValidTimeZone("Asia/Tokyo")).toBe(true);
10+
expect(isValidTimeZone("UTC")).toBe(true);
11+
expect(isValidTimeZone("GMT")).toBe(true);
12+
});
13+
14+
it("should accept timezone offsets", () => {
15+
expect(isValidTimeZone("GMT+8")).toBe(true);
16+
expect(isValidTimeZone("GMT-5")).toBe(true);
17+
expect(isValidTimeZone("UTC+00:00")).toBe(true);
18+
expect(isValidTimeZone("Etc/GMT+12")).toBe(true);
19+
});
20+
21+
it("should reject empty strings", () => {
22+
expect(isValidTimeZone("")).toBe(false);
23+
});
24+
25+
it("should reject strings with SQL injection attempts", () => {
26+
expect(isValidTimeZone("UTC'; DROP TABLE queue_jobs; --")).toBe(false);
27+
expect(isValidTimeZone("America/New_York; DELETE FROM users;")).toBe(false);
28+
expect(isValidTimeZone("UTC' OR '1'='1")).toBe(false);
29+
});
30+
31+
it("should reject strings with special characters", () => {
32+
expect(isValidTimeZone("America/New York")).toBe(false); // space
33+
expect(isValidTimeZone("UTC;")).toBe(false); // semicolon
34+
expect(isValidTimeZone("America/New'York")).toBe(false); // single quote
35+
expect(isValidTimeZone('America/New"York')).toBe(false); // double quote
36+
expect(isValidTimeZone("America/New\nYork")).toBe(false); // newline
37+
});
38+
39+
it("should reject overly long strings", () => {
40+
const longString = "A".repeat(100);
41+
expect(isValidTimeZone(longString)).toBe(false);
42+
});
43+
44+
it("should accept edge case valid timezones", () => {
45+
expect(isValidTimeZone("America/Argentina/Buenos_Aires")).toBe(true);
46+
expect(isValidTimeZone("America/Indiana/Indianapolis")).toBe(true);
47+
expect(isValidTimeZone("Pacific/Port_Moresby")).toBe(true);
48+
});
49+
});
50+
});

0 commit comments

Comments
 (0)