Skip to content

Commit 6362c43

Browse files
committed
test: shared/config·const - voteHashMapping, headerValues 단위 테스트 추가
1 parent 6ca85c1 commit 6362c43

File tree

2 files changed

+150
-0
lines changed

2 files changed

+150
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import { describe, it, expect } from "vitest";
2+
import {
3+
VOTE_HASH_MAPPING,
4+
HASH_TO_ID_MAPPING,
5+
getHashFromId,
6+
getIdFromHash,
7+
isValidVoteHash,
8+
} from "../voteHashMapping";
9+
10+
describe("VOTE_HASH_MAPPING / HASH_TO_ID_MAPPING 구조", () => {
11+
it("ID 1~12의 해시값이 모두 정의되어 있다", () => {
12+
for (let i = 1; i <= 12; i++) {
13+
expect(VOTE_HASH_MAPPING[String(i)]).toBeDefined();
14+
}
15+
});
16+
17+
it("HASH_TO_ID_MAPPING은 VOTE_HASH_MAPPING의 역매핑이다", () => {
18+
Object.entries(VOTE_HASH_MAPPING).forEach(([id, hash]) => {
19+
expect(HASH_TO_ID_MAPPING[hash]).toBe(id);
20+
});
21+
});
22+
23+
it("해시값이 중복 없이 유일하다", () => {
24+
const hashes = Object.values(VOTE_HASH_MAPPING);
25+
const uniqueHashes = new Set(hashes);
26+
expect(uniqueHashes.size).toBe(hashes.length);
27+
});
28+
});
29+
30+
describe("getHashFromId", () => {
31+
it("유효한 ID에 대해 대응하는 해시를 반환한다", () => {
32+
expect(getHashFromId("1")).toBe("B86B273");
33+
expect(getHashFromId("6")).toBe("F58D3C7");
34+
expect(getHashFromId("12")).toBe("BD307A3");
35+
});
36+
37+
it("범위를 벗어난 ID에 대해 null을 반환한다", () => {
38+
expect(getHashFromId("0")).toBeNull();
39+
expect(getHashFromId("13")).toBeNull();
40+
});
41+
42+
it("빈 문자열에 대해 null을 반환한다", () => {
43+
expect(getHashFromId("")).toBeNull();
44+
});
45+
46+
it("숫자가 아닌 문자열에 대해 null을 반환한다", () => {
47+
expect(getHashFromId("abc")).toBeNull();
48+
});
49+
});
50+
51+
describe("getIdFromHash", () => {
52+
it("유효한 해시에 대해 대응하는 ID를 반환한다", () => {
53+
expect(getIdFromHash("B86B273")).toBe("1");
54+
expect(getIdFromHash("F58D3C7")).toBe("6");
55+
expect(getIdFromHash("BD307A3")).toBe("12");
56+
});
57+
58+
it("존재하지 않는 해시에 대해 null을 반환한다", () => {
59+
expect(getIdFromHash("INVALID")).toBeNull();
60+
expect(getIdFromHash("0000000")).toBeNull();
61+
});
62+
63+
it("빈 문자열에 대해 null을 반환한다", () => {
64+
expect(getIdFromHash("")).toBeNull();
65+
});
66+
});
67+
68+
describe("isValidVoteHash", () => {
69+
it("매핑에 존재하는 해시는 true를 반환한다", () => {
70+
Object.values(VOTE_HASH_MAPPING).forEach(hash => {
71+
expect(isValidVoteHash(hash)).toBe(true);
72+
});
73+
});
74+
75+
it("존재하지 않는 해시는 false를 반환한다", () => {
76+
expect(isValidVoteHash("INVALID")).toBe(false);
77+
expect(isValidVoteHash("1234567")).toBe(false);
78+
});
79+
80+
it("빈 문자열은 false를 반환한다", () => {
81+
expect(isValidVoteHash("")).toBe(false);
82+
});
83+
84+
it("ID 값 자체는 false를 반환한다", () => {
85+
expect(isValidVoteHash("1")).toBe(false);
86+
expect(isValidVoteHash("12")).toBe(false);
87+
});
88+
});
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { describe, it, expect } from "vitest";
2+
import { isHiddenPath } from "../headerValues";
3+
4+
describe("isHiddenPath", () => {
5+
describe("헤더를 숨겨야 하는 경로 → true", () => {
6+
it("/signin 경로에서 true를 반환한다", () => {
7+
expect(isHiddenPath("/signin")).toBe(true);
8+
});
9+
10+
it("/signin 하위 경로에서 true를 반환한다", () => {
11+
expect(isHiddenPath("/signin/callback")).toBe(true);
12+
expect(isHiddenPath("/signin/oauth")).toBe(true);
13+
});
14+
15+
it("/signup 경로에서 true를 반환한다", () => {
16+
expect(isHiddenPath("/signup")).toBe(true);
17+
});
18+
19+
it("/signup 하위 경로에서 true를 반환한다", () => {
20+
expect(isHiddenPath("/signup/complete")).toBe(true);
21+
});
22+
23+
it("/vote 경로에서 true를 반환한다", () => {
24+
expect(isHiddenPath("/vote")).toBe(true);
25+
});
26+
27+
it("/vote 하위 경로에서 true를 반환한다", () => {
28+
expect(isHiddenPath("/vote/1")).toBe(true);
29+
expect(isHiddenPath("/vote/result")).toBe(true);
30+
});
31+
32+
it("/admin 경로에서 true를 반환한다", () => {
33+
expect(isHiddenPath("/admin")).toBe(true);
34+
});
35+
36+
it("/admin 하위 경로에서 true를 반환한다", () => {
37+
expect(isHiddenPath("/admin/dashboard")).toBe(true);
38+
expect(isHiddenPath("/admin/users/1")).toBe(true);
39+
});
40+
});
41+
42+
describe("헤더를 표시해야 하는 경로 → false", () => {
43+
it("루트 경로에서 false를 반환한다", () => {
44+
expect(isHiddenPath("/")).toBe(false);
45+
});
46+
47+
it("일반 페이지 경로에서 false를 반환한다", () => {
48+
expect(isHiddenPath("/home")).toBe(false);
49+
expect(isHiddenPath("/profile")).toBe(false);
50+
expect(isHiddenPath("/schedule")).toBe(false);
51+
});
52+
53+
it("숨김 prefix와 비슷하지만 다른 경로에서 false를 반환한다", () => {
54+
// /sign은 /signin, /signup 어디에도 해당하지 않음
55+
expect(isHiddenPath("/sign")).toBe(false);
56+
});
57+
58+
it("startsWith 특성 - /voters는 /vote로 시작하므로 true를 반환한다", () => {
59+
expect(isHiddenPath("/voters")).toBe(true);
60+
});
61+
});
62+
});

0 commit comments

Comments
 (0)