@jamesaphoenix/tx-test-utils 0.5.4 → 0.5.6
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.
- package/README.md +4 -4
- package/dist/database/reset-helpers.d.ts +8 -0
- package/dist/database/reset-helpers.d.ts.map +1 -0
- package/dist/database/reset-helpers.js +40 -0
- package/dist/database/reset-helpers.js.map +1 -0
- package/dist/database/test-database.d.ts.map +1 -1
- package/dist/database/test-database.js +3 -37
- package/dist/database/test-database.js.map +1 -1
- package/dist/helpers/shared-test-layer.d.ts.map +1 -1
- package/dist/helpers/shared-test-layer.js +2 -20
- package/dist/helpers/shared-test-layer.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -202,7 +202,7 @@ tx init --watchdog --watchdog-runtime auto
|
|
|
202
202
|
```
|
|
203
203
|
|
|
204
204
|
Detailed rollout, detached service setup, rollback, and troubleshooting:
|
|
205
|
-
- [Watchdog Runbook](
|
|
205
|
+
- [Watchdog Runbook](https://txdocs.dev/docs/watchdog-runbook)
|
|
206
206
|
|
|
207
207
|
## Why tx?
|
|
208
208
|
|
|
@@ -368,9 +368,9 @@ Local SQLite for speed. JSONL for git sync. Branch your knowledge with your code
|
|
|
368
368
|
## Documentation
|
|
369
369
|
|
|
370
370
|
- **[txdocs.dev](https://txdocs.dev)**: Documentation
|
|
371
|
-
- **[CLAUDE.md](CLAUDE.md)**: Doctrine and quick reference
|
|
372
|
-
- **[AGENTS.md](AGENTS.md)**: Codex onboarding and quick reference
|
|
373
|
-
- **[docs/](docs/)**:
|
|
371
|
+
- **[CLAUDE.md](https://github.com/jamesaphoenix/tx/blob/main/CLAUDE.md)**: Doctrine and quick reference
|
|
372
|
+
- **[AGENTS.md](https://github.com/jamesaphoenix/tx/blob/main/AGENTS.md)**: Codex onboarding and quick reference
|
|
373
|
+
- **[PRDs](https://txdocs.dev/docs/prd)** and **[Design Docs](https://txdocs.dev/docs/design)**: Product and architecture specs
|
|
374
374
|
|
|
375
375
|
---
|
|
376
376
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Database } from "bun:sqlite";
|
|
2
|
+
/**
|
|
3
|
+
* Reset all mutable tables in a test database while preserving schema/migration metadata.
|
|
4
|
+
*
|
|
5
|
+
* Runs deletes in a single transaction to reduce WAL churn in large test suites.
|
|
6
|
+
*/
|
|
7
|
+
export declare const resetDatabaseTables: (db: Database) => void;
|
|
8
|
+
//# sourceMappingURL=reset-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset-helpers.d.ts","sourceRoot":"","sources":["../../src/database/reset-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAoB1C;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,IAAI,QAAQ,KAAG,IAmBlD,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const RESETTABLE_TABLES_SQL = `
|
|
2
|
+
SELECT name FROM sqlite_master
|
|
3
|
+
WHERE type='table'
|
|
4
|
+
AND name NOT LIKE 'sqlite_%'
|
|
5
|
+
AND name != 'schema_version'
|
|
6
|
+
AND name NOT LIKE '%_fts'
|
|
7
|
+
AND name NOT LIKE '%_fts_%'
|
|
8
|
+
AND name NOT LIKE '%_config'
|
|
9
|
+
`;
|
|
10
|
+
const SQLITE_SEQUENCE_EXISTS_SQL = `
|
|
11
|
+
SELECT 1 AS exists_flag
|
|
12
|
+
FROM sqlite_master
|
|
13
|
+
WHERE type = 'table'
|
|
14
|
+
AND name = 'sqlite_sequence'
|
|
15
|
+
LIMIT 1
|
|
16
|
+
`;
|
|
17
|
+
/**
|
|
18
|
+
* Reset all mutable tables in a test database while preserving schema/migration metadata.
|
|
19
|
+
*
|
|
20
|
+
* Runs deletes in a single transaction to reduce WAL churn in large test suites.
|
|
21
|
+
*/
|
|
22
|
+
export const resetDatabaseTables = (db) => {
|
|
23
|
+
const tables = db.prepare(RESETTABLE_TABLES_SQL).all();
|
|
24
|
+
const hasSqliteSequence = Boolean(db.prepare(SQLITE_SEQUENCE_EXISTS_SQL).get());
|
|
25
|
+
db.run("PRAGMA foreign_keys = OFF");
|
|
26
|
+
try {
|
|
27
|
+
db.transaction(() => {
|
|
28
|
+
for (const { name } of tables) {
|
|
29
|
+
db.exec(`DELETE FROM "${name}"`);
|
|
30
|
+
}
|
|
31
|
+
if (hasSqliteSequence) {
|
|
32
|
+
db.exec("DELETE FROM sqlite_sequence");
|
|
33
|
+
}
|
|
34
|
+
})();
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
db.run("PRAGMA foreign_keys = ON");
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=reset-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset-helpers.js","sourceRoot":"","sources":["../../src/database/reset-helpers.ts"],"names":[],"mappings":"AAEA,MAAM,qBAAqB,GAAG;;;;;;;;CAQ7B,CAAA;AAED,MAAM,0BAA0B,GAAG;;;;;;CAMlC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAY,EAAQ,EAAE;IACxD,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAA6B,CAAA;IACjF,MAAM,iBAAiB,GAAG,OAAO,CAC/B,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,GAAG,EAAyC,CACpF,CAAA;IAED,EAAE,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;IACnC,IAAI,CAAC;QACH,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAClB,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;gBAC9B,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,GAAG,CAAC,CAAA;YAClC,CAAC;YACD,IAAI,iBAAiB,EAAE,CAAC;gBACtB,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;YACxC,CAAC;QACH,CAAC,CAAC,EAAE,CAAA;IACN,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;IACpC,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-database.d.ts","sourceRoot":"","sources":["../../src/database/test-database.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"test-database.d.ts","sourceRoot":"","sources":["../../src/database/test-database.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAG9E;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;IACrB,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzC,gDAAgD;IAChD,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAA;IACrE,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,eAAe,CAAA;IAClE,8CAA8C;IAC9C,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;CAC5C;;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,mBAAoB,SAAQ,wBAGtC;CAAG;AAEN;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,QAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CA+CnE,CAAA;AAEJ;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,gBAAgB,gDAG5B,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,uBAAuB,QAAO,KAAK,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAI9E,CAAA;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,oBAAoB,GAAI,IAAI,QAAQ,KAAG,YA4BlD,CAAA"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import { Database } from "bun:sqlite";
|
|
10
10
|
import { Context, Effect, Layer } from "effect";
|
|
11
11
|
import { applyMigrations } from "@jamesaphoenix/tx-core";
|
|
12
|
+
import { resetDatabaseTables } from "./reset-helpers.js";
|
|
12
13
|
/**
|
|
13
14
|
* Service tag for test database dependency injection.
|
|
14
15
|
*
|
|
@@ -52,25 +53,7 @@ export const createTestDatabase = () => Effect.try({
|
|
|
52
53
|
db.close();
|
|
53
54
|
}),
|
|
54
55
|
reset: () => Effect.sync(() => {
|
|
55
|
-
|
|
56
|
-
// FTS5 shadow tables (*_fts, *_fts_data, *_fts_idx, etc.) cannot be modified directly
|
|
57
|
-
const tables = db
|
|
58
|
-
.prepare(`
|
|
59
|
-
SELECT name FROM sqlite_master
|
|
60
|
-
WHERE type='table'
|
|
61
|
-
AND name NOT LIKE 'sqlite_%'
|
|
62
|
-
AND name != 'schema_version'
|
|
63
|
-
AND name NOT LIKE '%_fts'
|
|
64
|
-
AND name NOT LIKE '%_fts_%'
|
|
65
|
-
AND name NOT LIKE '%_config'
|
|
66
|
-
`)
|
|
67
|
-
.all();
|
|
68
|
-
// Disable foreign keys temporarily to allow deletion in any order
|
|
69
|
-
db.run("PRAGMA foreign_keys = OFF");
|
|
70
|
-
for (const { name } of tables) {
|
|
71
|
-
db.exec(`DELETE FROM "${name}"`);
|
|
72
|
-
}
|
|
73
|
-
db.run("PRAGMA foreign_keys = ON");
|
|
56
|
+
resetDatabaseTables(db);
|
|
74
57
|
}),
|
|
75
58
|
query: (sql, params = []) => {
|
|
76
59
|
return db.prepare(sql).all(...params);
|
|
@@ -152,24 +135,7 @@ export const wrapDbAsTestDatabase = (db) => ({
|
|
|
152
135
|
db.close();
|
|
153
136
|
}),
|
|
154
137
|
reset: () => Effect.sync(() => {
|
|
155
|
-
|
|
156
|
-
const tables = db
|
|
157
|
-
.prepare(`
|
|
158
|
-
SELECT name FROM sqlite_master
|
|
159
|
-
WHERE type='table'
|
|
160
|
-
AND name NOT LIKE 'sqlite_%'
|
|
161
|
-
AND name != 'schema_version'
|
|
162
|
-
AND name NOT LIKE '%_fts'
|
|
163
|
-
AND name NOT LIKE '%_fts_%'
|
|
164
|
-
AND name NOT LIKE '%_config'
|
|
165
|
-
`)
|
|
166
|
-
.all();
|
|
167
|
-
// Disable foreign keys temporarily to allow deletion in any order
|
|
168
|
-
db.run("PRAGMA foreign_keys = OFF");
|
|
169
|
-
for (const { name } of tables) {
|
|
170
|
-
db.exec(`DELETE FROM "${name}"`);
|
|
171
|
-
}
|
|
172
|
-
db.run("PRAGMA foreign_keys = ON");
|
|
138
|
+
resetDatabaseTables(db);
|
|
173
139
|
}),
|
|
174
140
|
query: (sql, params = []) => {
|
|
175
141
|
return db.prepare(sql).all(...params);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-database.js","sourceRoot":"","sources":["../../src/database/test-database.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAwB,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"test-database.js","sourceRoot":"","sources":["../../src/database/test-database.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-test-layer.d.ts","sourceRoot":"","sources":["../../src/helpers/shared-test-layer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"shared-test-layer.d.ts","sourceRoot":"","sources":["../../src/helpers/shared-test-layer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAI1C;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC5C,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,QAAQ,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,qBAAqB;;iBA+BR,OAAO,CAAC,IAAI,CAAC;iBAOb,OAAO,CAAC,IAAI,CAAC;iBAOnB,QAAQ;EAQ3B,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAA"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* @module @tx/test-utils/helpers/shared-test-layer
|
|
8
8
|
*/
|
|
9
9
|
import { Layer } from "effect";
|
|
10
|
+
import { resetDatabaseTables } from "../database/reset-helpers.js";
|
|
10
11
|
/**
|
|
11
12
|
* Create a shared app layer for testing.
|
|
12
13
|
*
|
|
@@ -69,26 +70,7 @@ export const createSharedTestLayer = async () => {
|
|
|
69
70
|
* Preserves schema but deletes all data.
|
|
70
71
|
*/
|
|
71
72
|
const reset = async () => {
|
|
72
|
-
|
|
73
|
-
const tables = db
|
|
74
|
-
.prepare(`
|
|
75
|
-
SELECT name FROM sqlite_master
|
|
76
|
-
WHERE type='table'
|
|
77
|
-
AND name NOT LIKE 'sqlite_%'
|
|
78
|
-
AND name != 'schema_version'
|
|
79
|
-
AND name NOT LIKE '%_fts'
|
|
80
|
-
AND name NOT LIKE '%_fts_%'
|
|
81
|
-
AND name NOT LIKE '%_config'
|
|
82
|
-
`)
|
|
83
|
-
.all();
|
|
84
|
-
// Disable foreign keys temporarily to allow deletion in any order
|
|
85
|
-
db.run("PRAGMA foreign_keys = OFF");
|
|
86
|
-
for (const { name } of tables) {
|
|
87
|
-
db.exec(`DELETE FROM "${name}"`);
|
|
88
|
-
}
|
|
89
|
-
// Reset auto-increment counters so IDs start from 1 in each test
|
|
90
|
-
db.exec("DELETE FROM sqlite_sequence");
|
|
91
|
-
db.run("PRAGMA foreign_keys = ON");
|
|
73
|
+
resetDatabaseTables(db);
|
|
92
74
|
};
|
|
93
75
|
/**
|
|
94
76
|
* Close the database connection.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-test-layer.js","sourceRoot":"","sources":["../../src/helpers/shared-test-layer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"shared-test-layer.js","sourceRoot":"","sources":["../../src/helpers/shared-test-layer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAG9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAgBlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,IAAI,EAAE;IAC9C,oDAAoD;IACpD,2EAA2E;IAC3E,sFAAsF;IACtF,kDAAkD;IAClD,MAAM,EAAE,yBAAyB,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;IAC3G,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;IAE/C,2EAA2E;IAC3E,2EAA2E;IAC3E,sFAAsF;IACtF,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAA;IACnC,EAAE,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;IACnC,EAAE,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;IAClC,EAAE,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC,CAAC,CAAA;IAC7E,eAAe,CAAC,EAAE,CAAC,CAAA;IAEnB,6EAA6E;IAC7E,8EAA8E;IAC9E,+CAA+C;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAA+B,CAAC,CAAA;IAE1E,yEAAyE;IACzE,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAA;IAE3D;;;OAGG;IACH,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACtC,mBAAmB,CAAC,EAAE,CAAC,CAAA;IACzB,CAAC,CAAA;IAED;;OAEG;IACH,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACtC,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC,CAAA;IAED;;OAEG;IACH,MAAM,KAAK,GAAG,GAAa,EAAE,CAAC,EAAE,CAAA;IAEhC,OAAO;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;KACN,CAAA;AACH,CAAC,CAAA"}
|