@tkeron/tools 0.2.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,392 @@
1
+ import { describe, it, expect, spyOn, beforeEach, afterEach } from "bun:test";
2
+ import { createTestLogger } from "../src/createTestLogger.js";
3
+ import type { Logger } from "../src/loggerObj.js";
4
+
5
+ describe("createTestLogger", () => {
6
+ it("should return an object with logger and arrays", () => {
7
+ const result = createTestLogger();
8
+ expect(result).toHaveProperty("logger");
9
+ expect(result).toHaveProperty("logs");
10
+ expect(result).toHaveProperty("errors");
11
+ expect(result).toHaveProperty("warns");
12
+ expect(result).toHaveProperty("infos");
13
+ expect(Array.isArray(result.logs)).toBe(true);
14
+ expect(Array.isArray(result.errors)).toBe(true);
15
+ expect(Array.isArray(result.warns)).toBe(true);
16
+ expect(Array.isArray(result.infos)).toBe(true);
17
+ });
18
+
19
+ it("should return empty arrays initially", () => {
20
+ const { logs, errors, warns, infos } = createTestLogger();
21
+ expect(logs).toEqual([]);
22
+ expect(errors).toEqual([]);
23
+ expect(warns).toEqual([]);
24
+ expect(infos).toEqual([]);
25
+ });
26
+
27
+ it("should return a logger compatible with Logger interface", () => {
28
+ const { logger } = createTestLogger();
29
+ const testLogger: Logger = logger;
30
+ expect(testLogger).toBeDefined();
31
+ });
32
+
33
+ it("should have all required methods", () => {
34
+ const { logger } = createTestLogger();
35
+ expect(logger).toHaveProperty("log");
36
+ expect(logger).toHaveProperty("error");
37
+ expect(logger).toHaveProperty("warn");
38
+ expect(logger).toHaveProperty("info");
39
+ expect(typeof logger.log).toBe("function");
40
+ expect(typeof logger.error).toBe("function");
41
+ expect(typeof logger.warn).toBe("function");
42
+ expect(typeof logger.info).toBe("function");
43
+ });
44
+ });
45
+
46
+ describe("createTestLogger.logger.log", () => {
47
+ let consoleSpy: any;
48
+
49
+ beforeEach(() => {
50
+ consoleSpy = spyOn(console, "log");
51
+ });
52
+
53
+ afterEach(() => {
54
+ consoleSpy.mockRestore();
55
+ });
56
+
57
+ it("should not call console.log", () => {
58
+ const { logger } = createTestLogger();
59
+ logger.log("test");
60
+ expect(consoleSpy).not.toHaveBeenCalled();
61
+ });
62
+
63
+ it("should capture single string", () => {
64
+ const { logger, logs } = createTestLogger();
65
+ logger.log("test message");
66
+ expect(logs).toEqual(["test message"]);
67
+ });
68
+
69
+ it("should capture multiple strings", () => {
70
+ const { logger, logs } = createTestLogger();
71
+ logger.log("test", "multiple", "args");
72
+ expect(logs).toEqual(["test multiple args"]);
73
+ });
74
+
75
+ it("should capture number", () => {
76
+ const { logger, logs } = createTestLogger();
77
+ logger.log(42);
78
+ expect(logs).toEqual(["42"]);
79
+ });
80
+
81
+ it("should capture object as JSON", () => {
82
+ const { logger, logs } = createTestLogger();
83
+ logger.log({ key: "value" });
84
+ expect(logs).toEqual(['{"key":"value"}']);
85
+ });
86
+
87
+ it("should capture array as JSON", () => {
88
+ const { logger, logs } = createTestLogger();
89
+ logger.log([1, 2, 3]);
90
+ expect(logs).toEqual(["[1,2,3]"]);
91
+ });
92
+
93
+ it("should capture null", () => {
94
+ const { logger, logs } = createTestLogger();
95
+ logger.log(null);
96
+ expect(logs).toEqual(["null"]);
97
+ });
98
+
99
+ it("should capture undefined", () => {
100
+ const { logger, logs } = createTestLogger();
101
+ logger.log(undefined);
102
+ expect(logs).toEqual(["undefined"]);
103
+ });
104
+
105
+ it("should capture boolean", () => {
106
+ const { logger, logs } = createTestLogger();
107
+ logger.log(true);
108
+ expect(logs).toEqual(["true"]);
109
+ });
110
+
111
+ it("should capture multiple calls", () => {
112
+ const { logger, logs } = createTestLogger();
113
+ logger.log("first");
114
+ logger.log("second");
115
+ logger.log("third");
116
+ expect(logs).toEqual(["first", "second", "third"]);
117
+ });
118
+
119
+ it("should capture mixed types", () => {
120
+ const { logger, logs } = createTestLogger();
121
+ logger.log("string", 42, { key: "val" });
122
+ expect(logs).toEqual(['string 42 {"key":"val"}']);
123
+ });
124
+
125
+ it("should capture empty string", () => {
126
+ const { logger, logs } = createTestLogger();
127
+ logger.log("");
128
+ expect(logs).toEqual([""]);
129
+ });
130
+
131
+ it("should capture zero", () => {
132
+ const { logger, logs } = createTestLogger();
133
+ logger.log(0);
134
+ expect(logs).toEqual(["0"]);
135
+ });
136
+
137
+ it("should capture negative number", () => {
138
+ const { logger, logs } = createTestLogger();
139
+ logger.log(-42);
140
+ expect(logs).toEqual(["-42"]);
141
+ });
142
+
143
+ it("should capture NaN", () => {
144
+ const { logger, logs } = createTestLogger();
145
+ logger.log(NaN);
146
+ expect(logs).toEqual(["null"]);
147
+ });
148
+
149
+ it("should capture Infinity", () => {
150
+ const { logger, logs } = createTestLogger();
151
+ logger.log(Infinity);
152
+ expect(logs).toEqual(["null"]);
153
+ });
154
+
155
+ it("should not mutate logs array reference", () => {
156
+ const testLogger = createTestLogger();
157
+ const originalLogsRef = testLogger.logs;
158
+ testLogger.logger.log("test");
159
+ expect(testLogger.logs).toBe(originalLogsRef);
160
+ });
161
+ });
162
+
163
+ describe("createTestLogger.logger.error", () => {
164
+ let consoleSpy: any;
165
+
166
+ beforeEach(() => {
167
+ consoleSpy = spyOn(console, "error");
168
+ });
169
+
170
+ afterEach(() => {
171
+ consoleSpy.mockRestore();
172
+ });
173
+
174
+ it("should not call console.error", () => {
175
+ const { logger } = createTestLogger();
176
+ logger.error("test");
177
+ expect(consoleSpy).not.toHaveBeenCalled();
178
+ });
179
+
180
+ it("should capture single string", () => {
181
+ const { logger, errors } = createTestLogger();
182
+ logger.error("error message");
183
+ expect(errors).toEqual(["error message"]);
184
+ });
185
+
186
+ it("should capture multiple strings", () => {
187
+ const { logger, errors } = createTestLogger();
188
+ logger.error("error", "multiple", "args");
189
+ expect(errors).toEqual(["error multiple args"]);
190
+ });
191
+
192
+ it("should capture Error object", () => {
193
+ const { logger, errors } = createTestLogger();
194
+ const error = new Error("test error");
195
+ logger.error(error);
196
+ expect(errors.length).toBe(1);
197
+ expect(errors[0]).toContain("test error");
198
+ });
199
+
200
+ it("should capture null", () => {
201
+ const { logger, errors } = createTestLogger();
202
+ logger.error(null);
203
+ expect(errors).toEqual(["null"]);
204
+ });
205
+
206
+ it("should capture undefined", () => {
207
+ const { logger, errors } = createTestLogger();
208
+ logger.error(undefined);
209
+ expect(errors).toEqual(["undefined"]);
210
+ });
211
+
212
+ it("should capture multiple calls", () => {
213
+ const { logger, errors } = createTestLogger();
214
+ logger.error("first");
215
+ logger.error("second");
216
+ logger.error("third");
217
+ expect(errors).toEqual(["first", "second", "third"]);
218
+ });
219
+ });
220
+
221
+ describe("createTestLogger.logger.warn", () => {
222
+ let consoleSpy: any;
223
+
224
+ beforeEach(() => {
225
+ consoleSpy = spyOn(console, "warn");
226
+ });
227
+
228
+ afterEach(() => {
229
+ consoleSpy.mockRestore();
230
+ });
231
+
232
+ it("should not call console.warn", () => {
233
+ const { logger } = createTestLogger();
234
+ logger.warn("test");
235
+ expect(consoleSpy).not.toHaveBeenCalled();
236
+ });
237
+
238
+ it("should capture single string", () => {
239
+ const { logger, warns } = createTestLogger();
240
+ logger.warn("warning message");
241
+ expect(warns).toEqual(["warning message"]);
242
+ });
243
+
244
+ it("should capture multiple strings", () => {
245
+ const { logger, warns } = createTestLogger();
246
+ logger.warn("warn", "multiple", "args");
247
+ expect(warns).toEqual(["warn multiple args"]);
248
+ });
249
+
250
+ it("should capture null", () => {
251
+ const { logger, warns } = createTestLogger();
252
+ logger.warn(null);
253
+ expect(warns).toEqual(["null"]);
254
+ });
255
+
256
+ it("should capture undefined", () => {
257
+ const { logger, warns } = createTestLogger();
258
+ logger.warn(undefined);
259
+ expect(warns).toEqual(["undefined"]);
260
+ });
261
+
262
+ it("should capture multiple calls", () => {
263
+ const { logger, warns } = createTestLogger();
264
+ logger.warn("first");
265
+ logger.warn("second");
266
+ logger.warn("third");
267
+ expect(warns).toEqual(["first", "second", "third"]);
268
+ });
269
+ });
270
+
271
+ describe("createTestLogger.logger.info", () => {
272
+ let consoleSpy: any;
273
+
274
+ beforeEach(() => {
275
+ consoleSpy = spyOn(console, "info");
276
+ });
277
+
278
+ afterEach(() => {
279
+ consoleSpy.mockRestore();
280
+ });
281
+
282
+ it("should not call console.info", () => {
283
+ const { logger } = createTestLogger();
284
+ logger.info("test");
285
+ expect(consoleSpy).not.toHaveBeenCalled();
286
+ });
287
+
288
+ it("should capture single string", () => {
289
+ const { logger, infos } = createTestLogger();
290
+ logger.info("info message");
291
+ expect(infos).toEqual(["info message"]);
292
+ });
293
+
294
+ it("should capture multiple strings", () => {
295
+ const { logger, infos } = createTestLogger();
296
+ logger.info("info", "multiple", "args");
297
+ expect(infos).toEqual(["info multiple args"]);
298
+ });
299
+
300
+ it("should capture null", () => {
301
+ const { logger, infos } = createTestLogger();
302
+ logger.info(null);
303
+ expect(infos).toEqual(["null"]);
304
+ });
305
+
306
+ it("should capture undefined", () => {
307
+ const { logger, infos } = createTestLogger();
308
+ logger.info(undefined);
309
+ expect(infos).toEqual(["undefined"]);
310
+ });
311
+
312
+ it("should capture multiple calls", () => {
313
+ const { logger, infos } = createTestLogger();
314
+ logger.info("first");
315
+ logger.info("second");
316
+ logger.info("third");
317
+ expect(infos).toEqual(["first", "second", "third"]);
318
+ });
319
+ });
320
+
321
+ describe("createTestLogger isolation", () => {
322
+ it("should create independent loggers", () => {
323
+ const logger1 = createTestLogger();
324
+ const logger2 = createTestLogger();
325
+
326
+ logger1.logger.log("logger1");
327
+ logger2.logger.log("logger2");
328
+
329
+ expect(logger1.logs).toEqual(["logger1"]);
330
+ expect(logger2.logs).toEqual(["logger2"]);
331
+ });
332
+
333
+ it("should not share state between instances", () => {
334
+ const logger1 = createTestLogger();
335
+ const logger2 = createTestLogger();
336
+
337
+ logger1.logger.log("test1");
338
+ logger1.logger.error("error1");
339
+
340
+ expect(logger2.logs).toEqual([]);
341
+ expect(logger2.errors).toEqual([]);
342
+ });
343
+
344
+ it("should allow manual array manipulation", () => {
345
+ const testLogger = createTestLogger();
346
+ testLogger.logger.log("test");
347
+ expect(testLogger.logs).toEqual(["test"]);
348
+
349
+ testLogger.logs.length = 0;
350
+ expect(testLogger.logs).toEqual([]);
351
+ });
352
+ });
353
+
354
+ describe("createTestLogger all methods", () => {
355
+ it("should capture to correct arrays", () => {
356
+ const { logger, logs, errors, warns, infos } = createTestLogger();
357
+
358
+ logger.log("log message");
359
+ logger.error("error message");
360
+ logger.warn("warn message");
361
+ logger.info("info message");
362
+
363
+ expect(logs).toEqual(["log message"]);
364
+ expect(errors).toEqual(["error message"]);
365
+ expect(warns).toEqual(["warn message"]);
366
+ expect(infos).toEqual(["info message"]);
367
+ });
368
+
369
+ it("should not cross-contaminate arrays", () => {
370
+ const { logger, logs, errors, warns, infos } = createTestLogger();
371
+
372
+ logger.log("log");
373
+ expect(errors).toEqual([]);
374
+ expect(warns).toEqual([]);
375
+ expect(infos).toEqual([]);
376
+
377
+ logger.error("error");
378
+ expect(logs).toEqual(["log"]);
379
+ expect(warns).toEqual([]);
380
+ expect(infos).toEqual([]);
381
+
382
+ logger.warn("warn");
383
+ expect(logs).toEqual(["log"]);
384
+ expect(errors).toEqual(["error"]);
385
+ expect(infos).toEqual([]);
386
+
387
+ logger.info("info");
388
+ expect(logs).toEqual(["log"]);
389
+ expect(errors).toEqual(["error"]);
390
+ expect(warns).toEqual(["warn"]);
391
+ });
392
+ });