@jamesaphoenix/tx-test-utils 0.4.2 → 0.4.3

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.
Files changed (56) hide show
  1. package/README.md +480 -0
  2. package/dist/adapters/better-sqlite3-adapter.d.ts +36 -0
  3. package/dist/adapters/better-sqlite3-adapter.d.ts.map +1 -0
  4. package/dist/adapters/better-sqlite3-adapter.js +78 -0
  5. package/dist/adapters/better-sqlite3-adapter.js.map +1 -0
  6. package/dist/chaos/chaos-utilities.d.ts +465 -0
  7. package/dist/chaos/chaos-utilities.d.ts.map +1 -0
  8. package/dist/chaos/chaos-utilities.js +793 -0
  9. package/dist/chaos/chaos-utilities.js.map +1 -0
  10. package/dist/chaos/chaos.test.d.ts +9 -0
  11. package/dist/chaos/chaos.test.d.ts.map +1 -0
  12. package/dist/chaos/chaos.test.js +498 -0
  13. package/dist/chaos/chaos.test.js.map +1 -0
  14. package/dist/chaos/index.d.ts +20 -0
  15. package/dist/chaos/index.d.ts.map +1 -0
  16. package/dist/chaos/index.js +39 -0
  17. package/dist/chaos/index.js.map +1 -0
  18. package/dist/database/index.d.ts +1 -1
  19. package/dist/database/index.d.ts.map +1 -1
  20. package/dist/database/index.js +1 -1
  21. package/dist/database/index.js.map +1 -1
  22. package/dist/database/test-database.d.ts +25 -5
  23. package/dist/database/test-database.d.ts.map +1 -1
  24. package/dist/database/test-database.js +142 -11
  25. package/dist/database/test-database.js.map +1 -1
  26. package/dist/factories/index.d.ts +0 -3
  27. package/dist/factories/index.d.ts.map +1 -1
  28. package/dist/factories/index.js +0 -6
  29. package/dist/factories/index.js.map +1 -1
  30. package/dist/factories/learning.factory.js +1 -1
  31. package/dist/factories/learning.factory.js.map +1 -1
  32. package/dist/helpers/index.d.ts +2 -0
  33. package/dist/helpers/index.d.ts.map +1 -1
  34. package/dist/helpers/index.js +4 -0
  35. package/dist/helpers/index.js.map +1 -1
  36. package/dist/helpers/shared-test-layer.d.ts +74 -0
  37. package/dist/helpers/shared-test-layer.d.ts.map +1 -0
  38. package/dist/helpers/shared-test-layer.js +104 -0
  39. package/dist/helpers/shared-test-layer.js.map +1 -0
  40. package/dist/helpers/sqlite-factory.d.ts +49 -0
  41. package/dist/helpers/sqlite-factory.d.ts.map +1 -0
  42. package/dist/helpers/sqlite-factory.js +74 -0
  43. package/dist/helpers/sqlite-factory.js.map +1 -0
  44. package/dist/index.d.ts +6 -2
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +30 -8
  47. package/dist/index.js.map +1 -1
  48. package/dist/singleton.d.ts +49 -0
  49. package/dist/singleton.d.ts.map +1 -0
  50. package/dist/singleton.js +66 -0
  51. package/dist/singleton.js.map +1 -0
  52. package/package.json +11 -10
  53. package/dist/factories/factories.test.d.ts +0 -8
  54. package/dist/factories/factories.test.d.ts.map +0 -1
  55. package/dist/factories/factories.test.js +0 -419
  56. package/dist/factories/factories.test.js.map +0 -1
@@ -1,419 +0,0 @@
1
- /**
2
- * Tests for entity factories.
3
- *
4
- * Verifies that all factories correctly create test data with
5
- * proper defaults and customizable options.
6
- */
7
- import { Effect } from "effect";
8
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
9
- import { createTestDatabase } from "../database/index.js";
10
- import { TaskFactory, createTestTask, createTestTasks, LearningFactory, createTestLearning, createTestLearnings, EdgeFactory, createTestEdge, createEdgeBetweenLearnings, AnchorFactory, createTestAnchor, CandidateFactory, createTestCandidate, fixtureId } from "./index.js";
11
- describe("TaskFactory", () => {
12
- let db;
13
- beforeEach(async () => {
14
- db = await Effect.runPromise(createTestDatabase());
15
- });
16
- afterEach(async () => {
17
- await Effect.runPromise(db.close());
18
- });
19
- it("should create a task with default values", () => {
20
- const task = createTestTask(db);
21
- expect(task.id).toMatch(/^tx-[a-f0-9]{8}$/);
22
- expect(task.title).toMatch(/^Test Task \d+$/);
23
- expect(task.status).toBe("backlog");
24
- expect(task.score).toBe(500);
25
- expect(task.description).toBe("");
26
- expect(task.parentId).toBeNull();
27
- expect(task.createdAt).toBeInstanceOf(Date);
28
- });
29
- it("should create a task with custom values", () => {
30
- const task = createTestTask(db, {
31
- id: "tx-custom01",
32
- title: "Custom Task",
33
- description: "A custom description",
34
- status: "active",
35
- score: 800
36
- });
37
- expect(task.id).toBe("tx-custom01");
38
- expect(task.title).toBe("Custom Task");
39
- expect(task.description).toBe("A custom description");
40
- expect(task.status).toBe("active");
41
- expect(task.score).toBe(800);
42
- });
43
- it("should create multiple tasks", () => {
44
- const tasks = createTestTasks(db, 5);
45
- expect(tasks).toHaveLength(5);
46
- const ids = tasks.map((t) => t.id);
47
- const uniqueIds = new Set(ids);
48
- expect(uniqueIds.size).toBe(5); // All IDs should be unique
49
- });
50
- it("should create task hierarchy with children", () => {
51
- const factory = new TaskFactory(db);
52
- const { parent, children } = factory.withChildren({ title: "Parent Task" }, 3, { status: "backlog" });
53
- expect(parent.title).toBe("Parent Task");
54
- expect(children).toHaveLength(3);
55
- children.forEach((child) => {
56
- expect(child.parentId).toBe(parent.id);
57
- });
58
- });
59
- it("should create completed task with completedAt timestamp", () => {
60
- const factory = new TaskFactory(db);
61
- const task = factory.completed({ title: "Done Task" });
62
- expect(task.status).toBe("done");
63
- expect(task.completedAt).toBeInstanceOf(Date);
64
- });
65
- it("should persist task to database", () => {
66
- const task = createTestTask(db, { title: "Persisted Task" });
67
- const rows = db.query("SELECT id, title FROM tasks WHERE id = ?", [task.id]);
68
- expect(rows).toHaveLength(1);
69
- expect(rows[0].title).toBe("Persisted Task");
70
- });
71
- });
72
- describe("LearningFactory", () => {
73
- let db;
74
- beforeEach(async () => {
75
- db = await Effect.runPromise(createTestDatabase());
76
- });
77
- afterEach(async () => {
78
- await Effect.runPromise(db.close());
79
- });
80
- it("should create a learning with default values", () => {
81
- const learning = createTestLearning(db);
82
- expect(learning.id).toBeGreaterThan(0);
83
- expect(learning.content).toMatch(/^Test learning \d+$/);
84
- expect(learning.sourceType).toBe("manual");
85
- expect(learning.sourceRef).toBeNull();
86
- expect(learning.keywords).toEqual([]);
87
- expect(learning.category).toBeNull();
88
- expect(learning.usageCount).toBe(0);
89
- });
90
- it("should create a learning with custom values", () => {
91
- const learning = createTestLearning(db, {
92
- content: "Always use Effect-TS for typed errors",
93
- category: "patterns",
94
- sourceType: "run",
95
- sourceRef: "run-123",
96
- keywords: ["effect", "typescript", "errors"]
97
- });
98
- expect(learning.content).toBe("Always use Effect-TS for typed errors");
99
- expect(learning.category).toBe("patterns");
100
- expect(learning.sourceType).toBe("run");
101
- expect(learning.sourceRef).toBe("run-123");
102
- expect(learning.keywords).toEqual(["effect", "typescript", "errors"]);
103
- });
104
- it("should create multiple learnings", () => {
105
- const learnings = createTestLearnings(db, 5, { category: "testing" });
106
- expect(learnings).toHaveLength(5);
107
- learnings.forEach((l) => {
108
- expect(l.category).toBe("testing");
109
- });
110
- });
111
- it("should create learning with embedding", () => {
112
- const factory = new LearningFactory(db);
113
- const embedding = new Float32Array([0.1, 0.2, 0.3, 0.4, 0.5]);
114
- const learning = factory.withEmbedding(embedding, { content: "Vector test" });
115
- expect(learning.embedding).toBeInstanceOf(Float32Array);
116
- expect(learning.embedding?.length).toBe(5);
117
- });
118
- it("should persist learning to database", () => {
119
- const learning = createTestLearning(db, { content: "Persisted Learning" });
120
- const rows = db.query("SELECT id, content FROM learnings WHERE id = ?", [learning.id]);
121
- expect(rows).toHaveLength(1);
122
- expect(rows[0].content).toBe("Persisted Learning");
123
- });
124
- });
125
- describe("EdgeFactory", () => {
126
- let db;
127
- beforeEach(async () => {
128
- db = await Effect.runPromise(createTestDatabase());
129
- });
130
- afterEach(async () => {
131
- await Effect.runPromise(db.close());
132
- });
133
- it("should create an edge with default values", () => {
134
- const edge = createTestEdge(db);
135
- expect(edge.id).toBeGreaterThan(0);
136
- expect(edge.edgeType).toBe("SIMILAR_TO");
137
- expect(edge.sourceType).toBe("learning");
138
- expect(edge.targetType).toBe("learning");
139
- expect(edge.weight).toBe(1.0);
140
- expect(edge.metadata).toEqual({});
141
- });
142
- it("should create edge between two learnings", () => {
143
- const edge = createEdgeBetweenLearnings(db, 1, 2, "SIMILAR_TO", 0.85);
144
- expect(edge.edgeType).toBe("SIMILAR_TO");
145
- expect(edge.sourceType).toBe("learning");
146
- expect(edge.sourceId).toBe("1");
147
- expect(edge.targetType).toBe("learning");
148
- expect(edge.targetId).toBe("2");
149
- expect(edge.weight).toBe(0.85);
150
- });
151
- it("should create anchor edge to file", () => {
152
- const factory = new EdgeFactory(db);
153
- const edge = factory.anchorToFile(1, "src/service.ts", 0.9);
154
- expect(edge.edgeType).toBe("ANCHORED_TO");
155
- expect(edge.sourceId).toBe("1");
156
- expect(edge.targetType).toBe("file");
157
- expect(edge.targetId).toBe("src/service.ts");
158
- });
159
- it("should create derived-from edge", () => {
160
- const factory = new EdgeFactory(db);
161
- const edge = factory.derivedFromRun(1, "run-abc123");
162
- expect(edge.edgeType).toBe("DERIVED_FROM");
163
- expect(edge.targetType).toBe("run");
164
- expect(edge.targetId).toBe("run-abc123");
165
- });
166
- it("should persist edge to database", () => {
167
- const edge = createTestEdge(db, {
168
- sourceId: "1",
169
- targetId: "2",
170
- weight: 0.75
171
- });
172
- const rows = db.query("SELECT id, weight FROM learning_edges WHERE id = ?", [edge.id]);
173
- expect(rows).toHaveLength(1);
174
- expect(rows[0].weight).toBe(0.75);
175
- });
176
- });
177
- describe("AnchorFactory", () => {
178
- let db;
179
- beforeEach(async () => {
180
- db = await Effect.runPromise(createTestDatabase());
181
- // Create a learning for anchors to reference
182
- createTestLearning(db, { id: 1 });
183
- });
184
- afterEach(async () => {
185
- await Effect.runPromise(db.close());
186
- });
187
- it("should create an anchor with required values", () => {
188
- const anchor = createTestAnchor(db, { learningId: 1 });
189
- expect(anchor.id).toBeGreaterThan(0);
190
- expect(anchor.learningId).toBe(1);
191
- expect(anchor.anchorType).toBe("symbol");
192
- expect(anchor.status).toBe("valid");
193
- });
194
- it("should create symbol anchor", () => {
195
- const factory = new AnchorFactory(db);
196
- const anchor = factory.symbolAnchor(1, "src/service.ts", "handleRequest");
197
- expect(anchor.anchorType).toBe("symbol");
198
- expect(anchor.anchorValue).toBe("handleRequest");
199
- expect(anchor.filePath).toBe("src/service.ts");
200
- expect(anchor.symbolFqname).toBe("src/service.ts::handleRequest");
201
- });
202
- it("should create glob anchor", () => {
203
- const factory = new AnchorFactory(db);
204
- const anchor = factory.globAnchor(1, "src/repo/*.ts");
205
- expect(anchor.anchorType).toBe("glob");
206
- expect(anchor.anchorValue).toBe("src/repo/*.ts");
207
- });
208
- it("should create line range anchor", () => {
209
- const factory = new AnchorFactory(db);
210
- const anchor = factory.lineRangeAnchor(1, "src/service.ts", 10, 25);
211
- expect(anchor.anchorType).toBe("line_range");
212
- expect(anchor.lineStart).toBe(10);
213
- expect(anchor.lineEnd).toBe(25);
214
- });
215
- it("should create drifted anchor", () => {
216
- const factory = new AnchorFactory(db);
217
- const anchor = factory.driftedAnchor(1, "src/changed.ts");
218
- expect(anchor.status).toBe("drifted");
219
- });
220
- it("should persist anchor to database", () => {
221
- const anchor = createTestAnchor(db, {
222
- learningId: 1,
223
- filePath: "src/test.ts"
224
- });
225
- const rows = db.query("SELECT id, file_path FROM learning_anchors WHERE id = ?", [anchor.id]);
226
- expect(rows).toHaveLength(1);
227
- expect(rows[0].file_path).toBe("src/test.ts");
228
- });
229
- });
230
- describe("CandidateFactory", () => {
231
- let db;
232
- beforeEach(async () => {
233
- db = await Effect.runPromise(createTestDatabase());
234
- });
235
- afterEach(async () => {
236
- await Effect.runPromise(db.close());
237
- });
238
- it("should create a candidate with default values", () => {
239
- const candidate = createTestCandidate(db);
240
- expect(candidate.id).toBeGreaterThan(0);
241
- expect(candidate.content).toMatch(/^Test candidate learning \d+$/);
242
- expect(candidate.confidence).toBe("medium");
243
- expect(candidate.status).toBe("pending");
244
- expect(candidate.sourceFile).toMatch(/^~\/.claude\/projects\/test\/session-\d+\.jsonl$/);
245
- });
246
- it("should create high-confidence candidate", () => {
247
- const factory = new CandidateFactory(db);
248
- const candidate = factory.highConfidence({ content: "Always use Effect" });
249
- expect(candidate.confidence).toBe("high");
250
- expect(candidate.content).toBe("Always use Effect");
251
- });
252
- it("should create promoted candidate", () => {
253
- // First create a learning to reference
254
- const learning = createTestLearning(db, { id: 100 });
255
- const factory = new CandidateFactory(db);
256
- const candidate = factory.promoted({
257
- content: "Promoted learning",
258
- promotedLearningId: learning.id
259
- });
260
- expect(candidate.status).toBe("promoted");
261
- expect(candidate.promotedLearningId).toBe(learning.id);
262
- expect(candidate.reviewedBy).toBe("auto");
263
- expect(candidate.reviewedAt).toBeInstanceOf(Date);
264
- });
265
- it("should create rejected candidate", () => {
266
- const factory = new CandidateFactory(db);
267
- const candidate = factory.rejected("Too specific to context", {
268
- content: "Very specific learning"
269
- });
270
- expect(candidate.status).toBe("rejected");
271
- expect(candidate.rejectionReason).toBe("Too specific to context");
272
- expect(candidate.reviewedAt).toBeInstanceOf(Date);
273
- });
274
- it("should create merged candidate", () => {
275
- const learning = createTestLearning(db, { id: 50 });
276
- const factory = new CandidateFactory(db);
277
- const candidate = factory.merged(learning.id, { content: "Duplicate learning" });
278
- expect(candidate.status).toBe("merged");
279
- expect(candidate.promotedLearningId).toBe(learning.id);
280
- });
281
- it("should persist candidate to database", () => {
282
- const candidate = createTestCandidate(db, {
283
- content: "Persisted Candidate",
284
- confidence: "high"
285
- });
286
- const rows = db.query("SELECT id, content, confidence FROM learning_candidates WHERE id = ?", [candidate.id]);
287
- expect(rows).toHaveLength(1);
288
- expect(rows[0].content).toBe("Persisted Candidate");
289
- expect(rows[0].confidence).toBe("high");
290
- });
291
- });
292
- describe("fixtureId", () => {
293
- it("should generate deterministic IDs", () => {
294
- const id1 = fixtureId("test-fixture");
295
- const id2 = fixtureId("test-fixture");
296
- expect(id1).toBe(id2);
297
- expect(id1).toMatch(/^tx-[a-f0-9]{8}$/);
298
- });
299
- it("should generate different IDs for different inputs", () => {
300
- const id1 = fixtureId("fixture-a");
301
- const id2 = fixtureId("fixture-b");
302
- expect(id1).not.toBe(id2);
303
- });
304
- });
305
- describe("EdgeRepository.findByMultipleSources", () => {
306
- let db;
307
- beforeEach(async () => {
308
- db = await Effect.runPromise(createTestDatabase());
309
- });
310
- afterEach(async () => {
311
- await Effect.runPromise(db.close());
312
- });
313
- it("should return empty map for empty sourceIds array", async () => {
314
- // Import EdgeRepository and create layer
315
- const { EdgeRepository, EdgeRepositoryLive, SqliteClient } = await import("@jamesaphoenix/tx-core");
316
- const { Layer } = await import("effect");
317
- // Create a SqliteClient layer from the test database
318
- const TestSqliteClient = Layer.succeed(SqliteClient, db.db);
319
- const TestEdgeRepoLayer = Layer.provide(EdgeRepositoryLive, TestSqliteClient);
320
- const program = Effect.gen(function* () {
321
- const edgeRepo = yield* EdgeRepository;
322
- return yield* edgeRepo.findByMultipleSources("learning", []);
323
- });
324
- const result = await Effect.runPromise(Effect.provide(program, TestEdgeRepoLayer));
325
- expect(result).toBeInstanceOf(Map);
326
- expect(result.size).toBe(0);
327
- });
328
- it("should fetch edges for multiple source IDs in one query", async () => {
329
- // Create test edges using a single factory to avoid ID collisions
330
- const edgeFactory = new EdgeFactory(db);
331
- edgeFactory.create({ sourceType: "learning", sourceId: "1", targetId: "10", weight: 0.9 });
332
- edgeFactory.create({ sourceType: "learning", sourceId: "1", targetId: "11", weight: 0.8 });
333
- edgeFactory.create({ sourceType: "learning", sourceId: "2", targetId: "20", weight: 0.7 });
334
- edgeFactory.create({ sourceType: "learning", sourceId: "3", targetId: "30", weight: 0.6 });
335
- // Import EdgeRepository and create layer
336
- const { EdgeRepository, EdgeRepositoryLive, SqliteClient } = await import("@jamesaphoenix/tx-core");
337
- const { Layer } = await import("effect");
338
- const TestSqliteClient = Layer.succeed(SqliteClient, db.db);
339
- const TestEdgeRepoLayer = Layer.provide(EdgeRepositoryLive, TestSqliteClient);
340
- const program = Effect.gen(function* () {
341
- const edgeRepo = yield* EdgeRepository;
342
- return yield* edgeRepo.findByMultipleSources("learning", ["1", "2"]);
343
- });
344
- const result = await Effect.runPromise(Effect.provide(program, TestEdgeRepoLayer));
345
- expect(result).toBeInstanceOf(Map);
346
- expect(result.size).toBe(2);
347
- // Check source 1 has 2 edges
348
- const source1Edges = result.get("1");
349
- expect(source1Edges).toBeDefined();
350
- expect(source1Edges).toHaveLength(2);
351
- // Edges should be sorted by weight DESC
352
- expect(source1Edges[0].weight).toBe(0.9);
353
- expect(source1Edges[1].weight).toBe(0.8);
354
- // Check source 2 has 1 edge
355
- const source2Edges = result.get("2");
356
- expect(source2Edges).toBeDefined();
357
- expect(source2Edges).toHaveLength(1);
358
- expect(source2Edges[0].targetId).toBe("20");
359
- });
360
- it("should return empty arrays for sourceIds with no edges", async () => {
361
- // Create edge only for source 1
362
- createTestEdge(db, { sourceType: "learning", sourceId: "1", targetId: "10" });
363
- const { EdgeRepository, EdgeRepositoryLive, SqliteClient } = await import("@jamesaphoenix/tx-core");
364
- const { Layer } = await import("effect");
365
- const TestSqliteClient = Layer.succeed(SqliteClient, db.db);
366
- const TestEdgeRepoLayer = Layer.provide(EdgeRepositoryLive, TestSqliteClient);
367
- const program = Effect.gen(function* () {
368
- const edgeRepo = yield* EdgeRepository;
369
- return yield* edgeRepo.findByMultipleSources("learning", ["1", "2", "3"]);
370
- });
371
- const result = await Effect.runPromise(Effect.provide(program, TestEdgeRepoLayer));
372
- expect(result.size).toBe(3);
373
- expect(result.get("1")).toHaveLength(1);
374
- expect(result.get("2")).toHaveLength(0);
375
- expect(result.get("3")).toHaveLength(0);
376
- });
377
- it("should filter by sourceType", async () => {
378
- // Create edges with different source types using a single factory
379
- const edgeFactory = new EdgeFactory(db);
380
- edgeFactory.create({ sourceType: "learning", sourceId: "1", targetId: "10" });
381
- edgeFactory.create({ sourceType: "file", sourceId: "1", targetId: "20" });
382
- const { EdgeRepository, EdgeRepositoryLive, SqliteClient } = await import("@jamesaphoenix/tx-core");
383
- const { Layer } = await import("effect");
384
- const TestSqliteClient = Layer.succeed(SqliteClient, db.db);
385
- const TestEdgeRepoLayer = Layer.provide(EdgeRepositoryLive, TestSqliteClient);
386
- const program = Effect.gen(function* () {
387
- const edgeRepo = yield* EdgeRepository;
388
- return yield* edgeRepo.findByMultipleSources("learning", ["1"]);
389
- });
390
- const result = await Effect.runPromise(Effect.provide(program, TestEdgeRepoLayer));
391
- expect(result.size).toBe(1);
392
- const edges = result.get("1");
393
- expect(edges).toHaveLength(1);
394
- expect(edges[0].sourceType).toBe("learning");
395
- });
396
- it("should exclude invalidated edges", async () => {
397
- // Create a valid edge
398
- createTestEdge(db, { sourceType: "learning", sourceId: "1", targetId: "10" });
399
- // Create an invalidated edge by inserting directly
400
- db.exec(`
401
- INSERT INTO learning_edges (edge_type, source_type, source_id, target_type, target_id, weight, metadata, invalidated_at)
402
- VALUES ('SIMILAR_TO', 'learning', '1', 'learning', '11', 1.0, '{}', datetime('now'))
403
- `);
404
- const { EdgeRepository, EdgeRepositoryLive, SqliteClient } = await import("@jamesaphoenix/tx-core");
405
- const { Layer } = await import("effect");
406
- const TestSqliteClient = Layer.succeed(SqliteClient, db.db);
407
- const TestEdgeRepoLayer = Layer.provide(EdgeRepositoryLive, TestSqliteClient);
408
- const program = Effect.gen(function* () {
409
- const edgeRepo = yield* EdgeRepository;
410
- return yield* edgeRepo.findByMultipleSources("learning", ["1"]);
411
- });
412
- const result = await Effect.runPromise(Effect.provide(program, TestEdgeRepoLayer));
413
- expect(result.size).toBe(1);
414
- const edges = result.get("1");
415
- expect(edges).toHaveLength(1); // Only the valid edge
416
- expect(edges[0].targetId).toBe("10");
417
- });
418
- });
419
- //# sourceMappingURL=factories.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"factories.test.js","sourceRoot":"","sources":["../../src/factories/factories.test.ts"],"names":[],"mappings":"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"}