this repo has no description
1import { afterEach, describe, expect, test } from "bun:test";
2import { channelMappings, userMappings } from "./db";
3
4describe("channelMappings", () => {
5 const testSlackChannel = "C123TEST";
6 const testIrcChannel = "#test-channel";
7
8 afterEach(() => {
9 // Cleanup test data
10 try {
11 channelMappings.delete(testSlackChannel);
12 } catch {
13 // Ignore if doesn't exist
14 }
15 });
16
17 test("creates a channel mapping", () => {
18 channelMappings.create(testSlackChannel, testIrcChannel);
19 const mapping = channelMappings.getBySlackChannel(testSlackChannel);
20
21 expect(mapping).toBeDefined();
22 expect(mapping?.slack_channel_id).toBe(testSlackChannel);
23 expect(mapping?.irc_channel).toBe(testIrcChannel);
24 });
25
26 test("retrieves mapping by Slack channel ID", () => {
27 channelMappings.create(testSlackChannel, testIrcChannel);
28 const mapping = channelMappings.getBySlackChannel(testSlackChannel);
29
30 expect(mapping).not.toBeNull();
31 expect(mapping?.irc_channel).toBe(testIrcChannel);
32 });
33
34 test("retrieves mapping by IRC channel", () => {
35 channelMappings.create(testSlackChannel, testIrcChannel);
36 const mapping = channelMappings.getByIrcChannel(testIrcChannel);
37
38 expect(mapping).not.toBeNull();
39 expect(mapping?.slack_channel_id).toBe(testSlackChannel);
40 });
41
42 test("returns null for non-existent mapping", () => {
43 const mapping = channelMappings.getBySlackChannel("C999NOTFOUND");
44 expect(mapping).toBeNull();
45 });
46
47 test("deletes a channel mapping", () => {
48 channelMappings.create(testSlackChannel, testIrcChannel);
49 channelMappings.delete(testSlackChannel);
50
51 const mapping = channelMappings.getBySlackChannel(testSlackChannel);
52 expect(mapping).toBeNull();
53 });
54
55 test("replaces existing mapping on create", () => {
56 channelMappings.create(testSlackChannel, "#old-channel");
57 channelMappings.create(testSlackChannel, testIrcChannel);
58
59 const mapping = channelMappings.getBySlackChannel(testSlackChannel);
60 expect(mapping?.irc_channel).toBe(testIrcChannel);
61 });
62
63 test("getAll returns all mappings", () => {
64 const testChannel2 = "C456TEST";
65 const testIrc2 = "#another-channel";
66
67 channelMappings.create(testSlackChannel, testIrcChannel);
68 channelMappings.create(testChannel2, testIrc2);
69
70 const all = channelMappings.getAll();
71 const testMappings = all.filter(
72 (m) =>
73 m.slack_channel_id === testSlackChannel ||
74 m.slack_channel_id === testChannel2,
75 );
76
77 expect(testMappings.length).toBeGreaterThanOrEqual(2);
78
79 // Cleanup
80 channelMappings.delete(testChannel2);
81 });
82});
83
84describe("userMappings", () => {
85 const testSlackUser = "U123TEST";
86 const testIrcNick = "testnick";
87
88 afterEach(() => {
89 // Cleanup test data
90 try {
91 userMappings.delete(testSlackUser);
92 } catch {
93 // Ignore if doesn't exist
94 }
95 });
96
97 test("creates a user mapping", () => {
98 userMappings.create(testSlackUser, testIrcNick);
99 const mapping = userMappings.getBySlackUser(testSlackUser);
100
101 expect(mapping).toBeDefined();
102 expect(mapping?.slack_user_id).toBe(testSlackUser);
103 expect(mapping?.irc_nick).toBe(testIrcNick);
104 });
105
106 test("retrieves mapping by Slack user ID", () => {
107 userMappings.create(testSlackUser, testIrcNick);
108 const mapping = userMappings.getBySlackUser(testSlackUser);
109
110 expect(mapping).not.toBeNull();
111 expect(mapping?.irc_nick).toBe(testIrcNick);
112 });
113
114 test("retrieves mapping by IRC nick", () => {
115 userMappings.create(testSlackUser, testIrcNick);
116 const mapping = userMappings.getByIrcNick(testIrcNick);
117
118 expect(mapping).not.toBeNull();
119 expect(mapping?.slack_user_id).toBe(testSlackUser);
120 });
121
122 test("returns null for non-existent mapping", () => {
123 const mapping = userMappings.getBySlackUser("U999NOTFOUND");
124 expect(mapping).toBeNull();
125 });
126
127 test("deletes a user mapping", () => {
128 userMappings.create(testSlackUser, testIrcNick);
129 userMappings.delete(testSlackUser);
130
131 const mapping = userMappings.getBySlackUser(testSlackUser);
132 expect(mapping).toBeNull();
133 });
134
135 test("replaces existing mapping on create", () => {
136 userMappings.create(testSlackUser, "oldnick");
137 userMappings.create(testSlackUser, testIrcNick);
138
139 const mapping = userMappings.getBySlackUser(testSlackUser);
140 expect(mapping?.irc_nick).toBe(testIrcNick);
141 });
142
143 test("getAll returns all mappings", () => {
144 const testUser2 = "U456TEST";
145 const testNick2 = "anothernick";
146
147 userMappings.create(testSlackUser, testIrcNick);
148 userMappings.create(testUser2, testNick2);
149
150 const all = userMappings.getAll();
151 const testMappings = all.filter(
152 (m) => m.slack_user_id === testSlackUser || m.slack_user_id === testUser2,
153 );
154
155 expect(testMappings.length).toBeGreaterThanOrEqual(2);
156
157 // Cleanup
158 userMappings.delete(testUser2);
159 });
160});