Skip to content

Commit 71cf459

Browse files
committed
feat: add tests for common/util
1 parent 4bace1a commit 71cf459

File tree

1 file changed

+106
-1
lines changed

1 file changed

+106
-1
lines changed

test/util.test.ts

Lines changed: 106 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { normalize } from "../src/common/util"
1+
import { logger as l } from "@coder/logger"
2+
import { arrayify, getFirstString, normalize, plural, resolveBase, split, trimSlashes } from "../src/common/util"
3+
4+
type LocationLike = Pick<Location, "pathname" | "origin">
25

36
describe("util", () => {
47
describe("normalize", () => {
@@ -15,4 +18,106 @@ describe("util", () => {
1518
expect(normalize("qux", true)).toBe("qux")
1619
})
1720
})
21+
22+
describe("split", () => {
23+
it("should split at a comma", () => {
24+
expect(split("Hello,world", ",")).toStrictEqual(["Hello", "world"])
25+
})
26+
27+
it("shouldn't split if the delimiter doesn't exist", () => {
28+
expect(split("Hello world", ",")).toStrictEqual(["Hello world", ""])
29+
})
30+
})
31+
32+
describe("plural", () => {
33+
it("should add an s if count is greater than 1", () => {
34+
expect(plural(2, "dog")).toBe("dogs")
35+
})
36+
it("should NOT add an s if the count is 1", () => {
37+
expect(plural(1, "dog")).toBe("dog")
38+
})
39+
})
40+
41+
describe("trimSlashes", () => {
42+
it("should remove leading slashes", () => {
43+
expect(trimSlashes("/hello-world")).toBe("hello-world")
44+
})
45+
46+
it("should remove trailing slashes", () => {
47+
expect(trimSlashes("hello-world/")).toBe("hello-world")
48+
})
49+
50+
it("should remove both leading and trailing slashes", () => {
51+
expect(trimSlashes("/hello-world/")).toBe("hello-world")
52+
})
53+
54+
it("should remove multiple leading and trailing slashes", () => {
55+
expect(trimSlashes("///hello-world////")).toBe("hello-world")
56+
})
57+
})
58+
59+
describe("resolveBase", () => {
60+
beforeEach(() => {
61+
const location: LocationLike = {
62+
pathname: "/healthz",
63+
origin: "http://localhost:8080",
64+
}
65+
66+
// Because resolveBase is not a pure function
67+
// and relies on the global location to be set
68+
// we set it before all the tests
69+
// and tell TS that our location should be looked at
70+
// as Location (even though it's missing some properties)
71+
global.location = location as Location
72+
})
73+
74+
it("should resolve a base", () => {
75+
expect(resolveBase("localhost:8080")).toBe("/localhost:8080")
76+
})
77+
78+
it("should resolve a base with a forward slash at the beginning", () => {
79+
expect(resolveBase("/localhost:8080")).toBe("/localhost:8080")
80+
})
81+
82+
it("should resolve a base with query params", () => {
83+
expect(resolveBase("localhost:8080?folder=hello-world")).toBe("/localhost:8080")
84+
})
85+
86+
it("should resolve a base with a path", () => {
87+
expect(resolveBase("localhost:8080/hello/world")).toBe("/localhost:8080/hello/world")
88+
})
89+
90+
it("should resolve a base to an empty string when not provided", () => {
91+
expect(resolveBase()).toBe("")
92+
})
93+
})
94+
95+
describe("arrayify", () => {
96+
it("should return value it's already an array", () => {
97+
expect(arrayify(["hello", "world"])).toStrictEqual(["hello", "world"])
98+
})
99+
it("should wrap the value in an array if not an array", () => {
100+
expect(
101+
arrayify({
102+
name: "Coder",
103+
version: "3.8",
104+
}),
105+
).toStrictEqual([{ name: "Coder", version: "3.8" }])
106+
})
107+
it("should return an empty array if the value is undefined", () => {
108+
expect(arrayify(undefined)).toStrictEqual([])
109+
})
110+
})
111+
112+
describe("getFirstString", () => {
113+
it("should return the string if passed a string", () => {
114+
expect(getFirstString("Hello world!")).toBe("Hello world!")
115+
})
116+
it("should get the first string from an array", () => {
117+
expect(getFirstString(["Hello", "World"])).toBe("Hello")
118+
})
119+
it("should return undefined if the value isn't an array or a string", () => {
120+
expect(getFirstString({ name: "Coder" })).toBe(undefined)
121+
})
122+
})
18123
})

0 commit comments

Comments
 (0)