@geekmidas/testkit 0.0.4 → 0.0.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/dist/Factory.mjs +1 -1
- package/dist/{KyselyFactory-BGvSMLtd.cjs → KyselyFactory-BX7Kv2uP.cjs} +1 -1
- package/dist/{KyselyFactory-ionH4gvk.mjs → KyselyFactory-pOMOFQWE.mjs} +2 -2
- package/dist/KyselyFactory.cjs +2 -2
- package/dist/KyselyFactory.mjs +3 -3
- package/dist/{ObjectionFactory-CFrtXe7i.mjs → ObjectionFactory-ChuX8sZN.mjs} +1 -1
- package/dist/ObjectionFactory.mjs +2 -2
- package/dist/{PostgresKyselyMigrator-CbtiZgfI.mjs → PostgresKyselyMigrator-D8fm35-s.mjs} +1 -1
- package/dist/{PostgresKyselyMigrator-Cxf2Dp9y.cjs → PostgresKyselyMigrator-JTY2LfwD.cjs} +2 -2
- package/dist/PostgresKyselyMigrator.cjs +2 -2
- package/dist/PostgresKyselyMigrator.mjs +2 -2
- package/dist/{PostgresMigrator-eqyAFSf-.cjs → PostgresMigrator-Bz-tnjB6.cjs} +1 -1
- package/dist/PostgresMigrator.cjs +1 -1
- package/dist/PostgresMigrator.mjs +1 -1
- package/dist/{VitestKyselyTransactionIsolator-DXjWQtDN.mjs → VitestKyselyTransactionIsolator-D-qpeVKO.mjs} +1 -1
- package/dist/{VitestKyselyTransactionIsolator-Dh2AgJDd.cjs → VitestKyselyTransactionIsolator-jF6Ohyu_.cjs} +1 -1
- package/dist/VitestKyselyTransactionIsolator.cjs +2 -3
- package/dist/VitestKyselyTransactionIsolator.mjs +2 -3
- package/dist/{VitestTransactionIsolator-zK5NJ7DQ.cjs → VitestTransactionIsolator-BK9UsrKt.cjs} +4 -2
- package/dist/{VitestTransactionIsolator-pLwsDo_A.mjs → VitestTransactionIsolator-e-R3p_X8.mjs} +4 -3
- package/dist/VitestTransactionIsolator.cjs +1 -2
- package/dist/VitestTransactionIsolator.mjs +1 -2
- package/dist/__tests__/Factory.spec.cjs +42 -42
- package/dist/__tests__/Factory.spec.mjs +23 -24
- package/dist/__tests__/KyselyFactory.spec.cjs +80 -80
- package/dist/__tests__/KyselyFactory.spec.mjs +74 -74
- package/dist/__tests__/ObjectionFactory.spec.cjs +80 -81
- package/dist/__tests__/ObjectionFactory.spec.mjs +52 -53
- package/dist/__tests__/PostgresMigrator.spec.cjs +59 -60
- package/dist/__tests__/PostgresMigrator.spec.mjs +31 -32
- package/dist/__tests__/faker.spec.cjs +60 -60
- package/dist/__tests__/faker.spec.mjs +35 -36
- package/dist/__tests__/integration.spec.cjs +44 -41
- package/dist/__tests__/integration.spec.mjs +45 -43
- package/dist/{chunk-DWy1uDak.cjs → chunk-CUT6urMc.cjs} +0 -9
- package/dist/example.cjs +2 -2
- package/dist/example.mjs +3 -3
- package/dist/{faker-h6CkRloU.cjs → faker-caz-8zt8.cjs} +1 -1
- package/dist/faker.cjs +1 -1
- package/dist/faker.mjs +1 -1
- package/dist/{helpers-C2NH7xcz.cjs → helpers-B2CfbaTC.cjs} +1 -1
- package/dist/helpers-DN4sJO4i.mjs +13 -0
- package/dist/helpers-DOtYCEvZ.cjs +19 -0
- package/dist/helpers.cjs +2 -6
- package/dist/helpers.mjs +2 -5
- package/dist/kysely-C1-aHdnU.mjs +11 -0
- package/dist/kysely-DL3C2eM4.cjs +16 -0
- package/dist/kysely.cjs +8 -15
- package/dist/kysely.mjs +8 -15
- package/dist/objection.mjs +2 -2
- package/package.json +2 -1
- package/src/VitestTransactionIsolator.ts +4 -2
- package/src/__tests__/KyselyFactory.spec.ts +4 -6
- package/src/__tests__/integration.spec.ts +8 -3
- package/src/helpers.ts +1 -18
- package/src/kysely.ts +3 -1
- package/dist/dist-BM2KvLG1.mjs +0 -5618
- package/dist/dist-DE3gAxQI.cjs +0 -5736
- package/dist/helpers-BnARb5Ap.mjs +0 -19
- package/dist/helpers-C_RZk04R.cjs +0 -31
- package/dist/magic-string.es-C6yzoryu.mjs +0 -1014
- package/dist/magic-string.es-jdtJrR0A.cjs +0 -1015
- package/dist/vi.bdSIJ99Y-BgRxGeO2.mjs +0 -9382
- package/dist/vi.bdSIJ99Y-CFuzUeY6.cjs +0 -9393
- /package/dist/{Factory-D52Lsc6Z.mjs → Factory-DlzMkMzb.mjs} +0 -0
- /package/dist/{PostgresMigrator-DqeuPy-e.mjs → PostgresMigrator-CEoRKTdq.mjs} +0 -0
- /package/dist/{faker-cGCFcrj2.mjs → faker-BwaXA_RF.mjs} +0 -0
- /package/dist/{helpers-CukcFAU9.mjs → helpers-Rf5F71r9.mjs} +0 -0
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
const require_chunk = require('../chunk-
|
|
2
|
-
const require_PostgresMigrator = require('../PostgresMigrator-
|
|
3
|
-
const
|
|
4
|
-
const require_vi_bdSIJ99Y = require('../vi.bdSIJ99Y-CFuzUeY6.cjs');
|
|
5
|
-
const require_helpers = require('../helpers-C2NH7xcz.cjs');
|
|
1
|
+
const require_chunk = require('../chunk-CUT6urMc.cjs');
|
|
2
|
+
const require_PostgresMigrator = require('../PostgresMigrator-Bz-tnjB6.cjs');
|
|
3
|
+
const require_helpers = require('../helpers-B2CfbaTC.cjs');
|
|
6
4
|
const pg = require_chunk.__toESM(require("pg"));
|
|
5
|
+
const vitest = require_chunk.__toESM(require("vitest"));
|
|
7
6
|
|
|
8
7
|
//#region src/__tests__/PostgresMigrator.spec.ts
|
|
9
8
|
var TestPostgresMigrator = class extends require_PostgresMigrator.PostgresMigrator {
|
|
@@ -19,31 +18,31 @@ var TestPostgresMigrator = class extends require_PostgresMigrator.PostgresMigrat
|
|
|
19
18
|
this.customMigrations.push(migration);
|
|
20
19
|
}
|
|
21
20
|
};
|
|
22
|
-
|
|
21
|
+
(0, vitest.describe)("PostgresMigrator", () => {
|
|
23
22
|
let testDbName;
|
|
24
23
|
let cleanupDb;
|
|
25
24
|
let consoleSpy;
|
|
26
|
-
|
|
25
|
+
(0, vitest.beforeAll)(async () => {
|
|
27
26
|
testDbName = `test_postgres_migrator_${Date.now()}`;
|
|
28
27
|
cleanupDb = await require_helpers.createTestDatabase(testDbName);
|
|
29
28
|
});
|
|
30
|
-
|
|
31
|
-
consoleSpy =
|
|
29
|
+
(0, vitest.beforeEach)(() => {
|
|
30
|
+
consoleSpy = vitest.vi.spyOn(console, "log").mockImplementation(() => {});
|
|
32
31
|
});
|
|
33
|
-
|
|
32
|
+
(0, vitest.afterEach)(() => {
|
|
34
33
|
consoleSpy.mockRestore();
|
|
35
34
|
});
|
|
36
|
-
|
|
35
|
+
(0, vitest.afterAll)(async () => {
|
|
37
36
|
await cleanupDb();
|
|
38
37
|
});
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
(0, vitest.describe)("constructor", () => {
|
|
39
|
+
(0, vitest.it)("should create a PostgresMigrator instance", () => {
|
|
41
40
|
const migrator = new TestPostgresMigrator(`postgresql://geekmidas:geekmidas@localhost:5432/${testDbName}`);
|
|
42
|
-
|
|
41
|
+
(0, vitest.expect)(migrator).toBeInstanceOf(require_PostgresMigrator.PostgresMigrator);
|
|
43
42
|
});
|
|
44
43
|
});
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
(0, vitest.describe)("start method", () => {
|
|
45
|
+
(0, vitest.it)("should create database, migrate, and return cleanup function", async () => {
|
|
47
46
|
const newDbName = `test_start_${Date.now()}`;
|
|
48
47
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${newDbName}`;
|
|
49
48
|
const migrator = new TestPostgresMigrator(uri);
|
|
@@ -52,13 +51,13 @@ require_dist.describe("PostgresMigrator", () => {
|
|
|
52
51
|
migrationRan = true;
|
|
53
52
|
});
|
|
54
53
|
const cleanup = await migrator.start();
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
(0, vitest.expect)(migrator.migrateCalled).toBe(true);
|
|
55
|
+
(0, vitest.expect)(migrationRan).toBe(true);
|
|
56
|
+
(0, vitest.expect)(consoleSpy).toHaveBeenCalledWith(`Migrating database: ${newDbName}`);
|
|
57
|
+
(0, vitest.expect)(typeof cleanup).toBe("function");
|
|
59
58
|
await cleanup();
|
|
60
59
|
});
|
|
61
|
-
|
|
60
|
+
(0, vitest.it)("should handle existing database", async () => {
|
|
62
61
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${testDbName}`;
|
|
63
62
|
const migrator = new TestPostgresMigrator(uri);
|
|
64
63
|
let migrationRan = false;
|
|
@@ -66,26 +65,26 @@ require_dist.describe("PostgresMigrator", () => {
|
|
|
66
65
|
migrationRan = true;
|
|
67
66
|
});
|
|
68
67
|
const cleanup = await migrator.start();
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
(0, vitest.expect)(migrator.migrateCalled).toBe(true);
|
|
69
|
+
(0, vitest.expect)(migrationRan).toBe(true);
|
|
70
|
+
(0, vitest.expect)(typeof cleanup).toBe("function");
|
|
72
71
|
});
|
|
73
|
-
|
|
72
|
+
(0, vitest.it)("should handle URI with query parameters", async () => {
|
|
74
73
|
const queryDbName = `test_query_params_${Date.now()}`;
|
|
75
74
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${queryDbName}?ssl=false&timeout=30`;
|
|
76
75
|
const migrator = new TestPostgresMigrator(uri);
|
|
77
76
|
const cleanup = await migrator.start();
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
(0, vitest.expect)(migrator.migrateCalled).toBe(true);
|
|
78
|
+
(0, vitest.expect)(typeof cleanup).toBe("function");
|
|
80
79
|
await cleanup();
|
|
81
80
|
});
|
|
82
|
-
|
|
81
|
+
(0, vitest.it)("should clean up connections even if migration fails", async () => {
|
|
83
82
|
const failDbName = `test_fail_${Date.now()}`;
|
|
84
83
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${failDbName}`;
|
|
85
84
|
const migrator = new TestPostgresMigrator(uri);
|
|
86
85
|
migrator.migrateError = new Error("Migration failed");
|
|
87
|
-
await
|
|
88
|
-
|
|
86
|
+
await (0, vitest.expect)(migrator.start()).rejects.toThrow("Migration failed");
|
|
87
|
+
(0, vitest.expect)(migrator.migrateCalled).toBe(true);
|
|
89
88
|
const cleanupClient = new pg.Client({
|
|
90
89
|
host: "localhost",
|
|
91
90
|
port: 5432,
|
|
@@ -100,13 +99,13 @@ require_dist.describe("PostgresMigrator", () => {
|
|
|
100
99
|
await cleanupClient.end();
|
|
101
100
|
}
|
|
102
101
|
});
|
|
103
|
-
|
|
102
|
+
(0, vitest.it)("should return cleanup function that drops database", async () => {
|
|
104
103
|
const cleanupDbName = `test_cleanup_${Date.now()}`;
|
|
105
104
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${cleanupDbName}`;
|
|
106
105
|
const migrator = new TestPostgresMigrator(uri);
|
|
107
106
|
const cleanup = await migrator.start();
|
|
108
|
-
|
|
109
|
-
|
|
107
|
+
(0, vitest.expect)(migrator.migrateCalled).toBe(true);
|
|
108
|
+
(0, vitest.expect)(typeof cleanup).toBe("function");
|
|
110
109
|
const checkClient = new pg.Client({
|
|
111
110
|
host: "localhost",
|
|
112
111
|
port: 5432,
|
|
@@ -116,7 +115,7 @@ require_dist.describe("PostgresMigrator", () => {
|
|
|
116
115
|
});
|
|
117
116
|
await checkClient.connect();
|
|
118
117
|
const beforeResult = await checkClient.query(`SELECT * FROM pg_catalog.pg_database WHERE datname = $1`, [cleanupDbName]);
|
|
119
|
-
|
|
118
|
+
(0, vitest.expect)(beforeResult.rowCount).toBe(1);
|
|
120
119
|
await checkClient.end();
|
|
121
120
|
await cleanup();
|
|
122
121
|
const checkClient2 = new pg.Client({
|
|
@@ -128,43 +127,43 @@ require_dist.describe("PostgresMigrator", () => {
|
|
|
128
127
|
});
|
|
129
128
|
await checkClient2.connect();
|
|
130
129
|
const afterResult = await checkClient2.query(`SELECT * FROM pg_catalog.pg_database WHERE datname = $1`, [cleanupDbName]);
|
|
131
|
-
|
|
130
|
+
(0, vitest.expect)(afterResult.rowCount).toBe(0);
|
|
132
131
|
await checkClient2.end();
|
|
133
132
|
});
|
|
134
133
|
});
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
(0, vitest.describe)("database creation", () => {
|
|
135
|
+
(0, vitest.it)("should handle connection errors gracefully", async () => {
|
|
137
136
|
const badDbName = `test_bad_connection_${Date.now()}`;
|
|
138
137
|
const uri = `postgresql://invalid_user:invalid_pass@localhost:5432/${badDbName}`;
|
|
139
138
|
const migrator = new TestPostgresMigrator(uri);
|
|
140
|
-
await
|
|
139
|
+
await (0, vitest.expect)(migrator.start()).rejects.toThrow();
|
|
141
140
|
});
|
|
142
|
-
|
|
141
|
+
(0, vitest.it)("should handle invalid database names", async () => {
|
|
143
142
|
const invalidDbName = "test-invalid-db-name!";
|
|
144
143
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${invalidDbName}`;
|
|
145
144
|
const migrator = new TestPostgresMigrator(uri);
|
|
146
|
-
await
|
|
145
|
+
await (0, vitest.expect)(migrator.start).rejects.toThrow();
|
|
147
146
|
});
|
|
148
147
|
});
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
(0, vitest.describe)("URI parsing", () => {
|
|
149
|
+
(0, vitest.it)("should parse different URI formats correctly", async () => {
|
|
151
150
|
const testDbName$1 = `test_uri_parsing_${Date.now()}`;
|
|
152
151
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${testDbName$1}`;
|
|
153
152
|
const migrator = new TestPostgresMigrator(uri);
|
|
154
153
|
const cleanup = await migrator.start();
|
|
155
|
-
|
|
156
|
-
|
|
154
|
+
(0, vitest.expect)(migrator.migrateCalled).toBe(true);
|
|
155
|
+
(0, vitest.expect)(typeof cleanup).toBe("function");
|
|
157
156
|
await cleanup();
|
|
158
157
|
});
|
|
159
158
|
});
|
|
160
|
-
|
|
161
|
-
|
|
159
|
+
(0, vitest.describe)("error handling", () => {
|
|
160
|
+
(0, vitest.it)("should propagate migration errors", async () => {
|
|
162
161
|
const errorDbName = `test_migration_error_${Date.now()}`;
|
|
163
162
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${errorDbName}`;
|
|
164
163
|
const migrator = new TestPostgresMigrator(uri);
|
|
165
164
|
const migrationError = new Error("Custom migration error");
|
|
166
165
|
migrator.migrateError = migrationError;
|
|
167
|
-
await
|
|
166
|
+
await (0, vitest.expect)(migrator.start()).rejects.toThrow("Custom migration error");
|
|
168
167
|
const cleanupClient = new pg.Client({
|
|
169
168
|
host: "localhost",
|
|
170
169
|
port: 5432,
|
|
@@ -179,7 +178,7 @@ require_dist.describe("PostgresMigrator", () => {
|
|
|
179
178
|
await cleanupClient.end();
|
|
180
179
|
}
|
|
181
180
|
});
|
|
182
|
-
|
|
181
|
+
(0, vitest.it)("should handle cleanup errors gracefully", async () => {
|
|
183
182
|
const cleanupErrorDbName = `test_cleanup_error_${Date.now()}`;
|
|
184
183
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${cleanupErrorDbName}`;
|
|
185
184
|
const migrator = new TestPostgresMigrator(uri);
|
|
@@ -194,17 +193,17 @@ require_dist.describe("PostgresMigrator", () => {
|
|
|
194
193
|
await adminClient.connect();
|
|
195
194
|
await adminClient.query(`DROP DATABASE IF EXISTS "${cleanupErrorDbName}"`);
|
|
196
195
|
await adminClient.end();
|
|
197
|
-
await
|
|
196
|
+
await (0, vitest.expect)(cleanup()).rejects.toThrow();
|
|
198
197
|
});
|
|
199
198
|
});
|
|
200
|
-
|
|
201
|
-
|
|
199
|
+
(0, vitest.describe)("abstract method", () => {
|
|
200
|
+
(0, vitest.it)("should require concrete implementation of migrate method", () => {
|
|
202
201
|
const migrator = new TestPostgresMigrator(`postgresql://geekmidas:geekmidas@localhost:5432/${testDbName}`);
|
|
203
|
-
|
|
202
|
+
(0, vitest.expect)(typeof migrator.migrate).toBe("function");
|
|
204
203
|
});
|
|
205
204
|
});
|
|
206
|
-
|
|
207
|
-
|
|
205
|
+
(0, vitest.describe)("integration scenarios", () => {
|
|
206
|
+
(0, vitest.it)("should handle complete workflow", async () => {
|
|
208
207
|
const integrationDbName = `test_integration_${Date.now()}`;
|
|
209
208
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${integrationDbName}`;
|
|
210
209
|
const migrator = new TestPostgresMigrator(uri);
|
|
@@ -226,8 +225,8 @@ require_dist.describe("PostgresMigrator", () => {
|
|
|
226
225
|
await client.end();
|
|
227
226
|
});
|
|
228
227
|
const cleanup = await migrator.start();
|
|
229
|
-
|
|
230
|
-
|
|
228
|
+
(0, vitest.expect)(migrator.migrateCalled).toBe(true);
|
|
229
|
+
(0, vitest.expect)(consoleSpy).toHaveBeenCalledWith(`Migrating database: ${integrationDbName}`);
|
|
231
230
|
const verifyClient = new pg.Client({
|
|
232
231
|
host: "localhost",
|
|
233
232
|
port: 5432,
|
|
@@ -240,16 +239,16 @@ require_dist.describe("PostgresMigrator", () => {
|
|
|
240
239
|
SELECT table_name FROM information_schema.tables
|
|
241
240
|
WHERE table_schema = 'public' AND table_name = 'test_table'
|
|
242
241
|
`);
|
|
243
|
-
|
|
242
|
+
(0, vitest.expect)(tableResult.rowCount).toBe(1);
|
|
244
243
|
await verifyClient.end();
|
|
245
244
|
await cleanup();
|
|
246
245
|
});
|
|
247
|
-
|
|
246
|
+
(0, vitest.it)("should handle database that already exists and cleanup", async () => {
|
|
248
247
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${testDbName}`;
|
|
249
248
|
const migrator = new TestPostgresMigrator(uri);
|
|
250
249
|
const cleanup = await migrator.start();
|
|
251
|
-
|
|
252
|
-
|
|
250
|
+
(0, vitest.expect)(migrator.migrateCalled).toBe(true);
|
|
251
|
+
(0, vitest.expect)(typeof cleanup).toBe("function");
|
|
253
252
|
});
|
|
254
253
|
});
|
|
255
254
|
});
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { globalExpect, vi } from "../vi.bdSIJ99Y-BgRxGeO2.mjs";
|
|
4
|
-
import { createTestDatabase } from "../helpers-CukcFAU9.mjs";
|
|
1
|
+
import { PostgresMigrator } from "../PostgresMigrator-CEoRKTdq.mjs";
|
|
2
|
+
import { createTestDatabase } from "../helpers-Rf5F71r9.mjs";
|
|
5
3
|
import { Client } from "pg";
|
|
4
|
+
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
|
6
5
|
|
|
7
6
|
//#region src/__tests__/PostgresMigrator.spec.ts
|
|
8
7
|
var TestPostgresMigrator = class extends PostgresMigrator {
|
|
@@ -38,7 +37,7 @@ describe("PostgresMigrator", () => {
|
|
|
38
37
|
describe("constructor", () => {
|
|
39
38
|
it("should create a PostgresMigrator instance", () => {
|
|
40
39
|
const migrator = new TestPostgresMigrator(`postgresql://geekmidas:geekmidas@localhost:5432/${testDbName}`);
|
|
41
|
-
|
|
40
|
+
expect(migrator).toBeInstanceOf(PostgresMigrator);
|
|
42
41
|
});
|
|
43
42
|
});
|
|
44
43
|
describe("start method", () => {
|
|
@@ -51,10 +50,10 @@ describe("PostgresMigrator", () => {
|
|
|
51
50
|
migrationRan = true;
|
|
52
51
|
});
|
|
53
52
|
const cleanup = await migrator.start();
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
expect(migrator.migrateCalled).toBe(true);
|
|
54
|
+
expect(migrationRan).toBe(true);
|
|
55
|
+
expect(consoleSpy).toHaveBeenCalledWith(`Migrating database: ${newDbName}`);
|
|
56
|
+
expect(typeof cleanup).toBe("function");
|
|
58
57
|
await cleanup();
|
|
59
58
|
});
|
|
60
59
|
it("should handle existing database", async () => {
|
|
@@ -65,17 +64,17 @@ describe("PostgresMigrator", () => {
|
|
|
65
64
|
migrationRan = true;
|
|
66
65
|
});
|
|
67
66
|
const cleanup = await migrator.start();
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
expect(migrator.migrateCalled).toBe(true);
|
|
68
|
+
expect(migrationRan).toBe(true);
|
|
69
|
+
expect(typeof cleanup).toBe("function");
|
|
71
70
|
});
|
|
72
71
|
it("should handle URI with query parameters", async () => {
|
|
73
72
|
const queryDbName = `test_query_params_${Date.now()}`;
|
|
74
73
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${queryDbName}?ssl=false&timeout=30`;
|
|
75
74
|
const migrator = new TestPostgresMigrator(uri);
|
|
76
75
|
const cleanup = await migrator.start();
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
expect(migrator.migrateCalled).toBe(true);
|
|
77
|
+
expect(typeof cleanup).toBe("function");
|
|
79
78
|
await cleanup();
|
|
80
79
|
});
|
|
81
80
|
it("should clean up connections even if migration fails", async () => {
|
|
@@ -83,8 +82,8 @@ describe("PostgresMigrator", () => {
|
|
|
83
82
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${failDbName}`;
|
|
84
83
|
const migrator = new TestPostgresMigrator(uri);
|
|
85
84
|
migrator.migrateError = new Error("Migration failed");
|
|
86
|
-
await
|
|
87
|
-
|
|
85
|
+
await expect(migrator.start()).rejects.toThrow("Migration failed");
|
|
86
|
+
expect(migrator.migrateCalled).toBe(true);
|
|
88
87
|
const cleanupClient = new Client({
|
|
89
88
|
host: "localhost",
|
|
90
89
|
port: 5432,
|
|
@@ -104,8 +103,8 @@ describe("PostgresMigrator", () => {
|
|
|
104
103
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${cleanupDbName}`;
|
|
105
104
|
const migrator = new TestPostgresMigrator(uri);
|
|
106
105
|
const cleanup = await migrator.start();
|
|
107
|
-
|
|
108
|
-
|
|
106
|
+
expect(migrator.migrateCalled).toBe(true);
|
|
107
|
+
expect(typeof cleanup).toBe("function");
|
|
109
108
|
const checkClient = new Client({
|
|
110
109
|
host: "localhost",
|
|
111
110
|
port: 5432,
|
|
@@ -115,7 +114,7 @@ describe("PostgresMigrator", () => {
|
|
|
115
114
|
});
|
|
116
115
|
await checkClient.connect();
|
|
117
116
|
const beforeResult = await checkClient.query(`SELECT * FROM pg_catalog.pg_database WHERE datname = $1`, [cleanupDbName]);
|
|
118
|
-
|
|
117
|
+
expect(beforeResult.rowCount).toBe(1);
|
|
119
118
|
await checkClient.end();
|
|
120
119
|
await cleanup();
|
|
121
120
|
const checkClient2 = new Client({
|
|
@@ -127,7 +126,7 @@ describe("PostgresMigrator", () => {
|
|
|
127
126
|
});
|
|
128
127
|
await checkClient2.connect();
|
|
129
128
|
const afterResult = await checkClient2.query(`SELECT * FROM pg_catalog.pg_database WHERE datname = $1`, [cleanupDbName]);
|
|
130
|
-
|
|
129
|
+
expect(afterResult.rowCount).toBe(0);
|
|
131
130
|
await checkClient2.end();
|
|
132
131
|
});
|
|
133
132
|
});
|
|
@@ -136,13 +135,13 @@ describe("PostgresMigrator", () => {
|
|
|
136
135
|
const badDbName = `test_bad_connection_${Date.now()}`;
|
|
137
136
|
const uri = `postgresql://invalid_user:invalid_pass@localhost:5432/${badDbName}`;
|
|
138
137
|
const migrator = new TestPostgresMigrator(uri);
|
|
139
|
-
await
|
|
138
|
+
await expect(migrator.start()).rejects.toThrow();
|
|
140
139
|
});
|
|
141
140
|
it("should handle invalid database names", async () => {
|
|
142
141
|
const invalidDbName = "test-invalid-db-name!";
|
|
143
142
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${invalidDbName}`;
|
|
144
143
|
const migrator = new TestPostgresMigrator(uri);
|
|
145
|
-
await
|
|
144
|
+
await expect(migrator.start).rejects.toThrow();
|
|
146
145
|
});
|
|
147
146
|
});
|
|
148
147
|
describe("URI parsing", () => {
|
|
@@ -151,8 +150,8 @@ describe("PostgresMigrator", () => {
|
|
|
151
150
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${testDbName$1}`;
|
|
152
151
|
const migrator = new TestPostgresMigrator(uri);
|
|
153
152
|
const cleanup = await migrator.start();
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
expect(migrator.migrateCalled).toBe(true);
|
|
154
|
+
expect(typeof cleanup).toBe("function");
|
|
156
155
|
await cleanup();
|
|
157
156
|
});
|
|
158
157
|
});
|
|
@@ -163,7 +162,7 @@ describe("PostgresMigrator", () => {
|
|
|
163
162
|
const migrator = new TestPostgresMigrator(uri);
|
|
164
163
|
const migrationError = new Error("Custom migration error");
|
|
165
164
|
migrator.migrateError = migrationError;
|
|
166
|
-
await
|
|
165
|
+
await expect(migrator.start()).rejects.toThrow("Custom migration error");
|
|
167
166
|
const cleanupClient = new Client({
|
|
168
167
|
host: "localhost",
|
|
169
168
|
port: 5432,
|
|
@@ -193,13 +192,13 @@ describe("PostgresMigrator", () => {
|
|
|
193
192
|
await adminClient.connect();
|
|
194
193
|
await adminClient.query(`DROP DATABASE IF EXISTS "${cleanupErrorDbName}"`);
|
|
195
194
|
await adminClient.end();
|
|
196
|
-
await
|
|
195
|
+
await expect(cleanup()).rejects.toThrow();
|
|
197
196
|
});
|
|
198
197
|
});
|
|
199
198
|
describe("abstract method", () => {
|
|
200
199
|
it("should require concrete implementation of migrate method", () => {
|
|
201
200
|
const migrator = new TestPostgresMigrator(`postgresql://geekmidas:geekmidas@localhost:5432/${testDbName}`);
|
|
202
|
-
|
|
201
|
+
expect(typeof migrator.migrate).toBe("function");
|
|
203
202
|
});
|
|
204
203
|
});
|
|
205
204
|
describe("integration scenarios", () => {
|
|
@@ -225,8 +224,8 @@ describe("PostgresMigrator", () => {
|
|
|
225
224
|
await client.end();
|
|
226
225
|
});
|
|
227
226
|
const cleanup = await migrator.start();
|
|
228
|
-
|
|
229
|
-
|
|
227
|
+
expect(migrator.migrateCalled).toBe(true);
|
|
228
|
+
expect(consoleSpy).toHaveBeenCalledWith(`Migrating database: ${integrationDbName}`);
|
|
230
229
|
const verifyClient = new Client({
|
|
231
230
|
host: "localhost",
|
|
232
231
|
port: 5432,
|
|
@@ -239,7 +238,7 @@ describe("PostgresMigrator", () => {
|
|
|
239
238
|
SELECT table_name FROM information_schema.tables
|
|
240
239
|
WHERE table_schema = 'public' AND table_name = 'test_table'
|
|
241
240
|
`);
|
|
242
|
-
|
|
241
|
+
expect(tableResult.rowCount).toBe(1);
|
|
243
242
|
await verifyClient.end();
|
|
244
243
|
await cleanup();
|
|
245
244
|
});
|
|
@@ -247,8 +246,8 @@ describe("PostgresMigrator", () => {
|
|
|
247
246
|
const uri = `postgresql://geekmidas:geekmidas@localhost:5432/${testDbName}`;
|
|
248
247
|
const migrator = new TestPostgresMigrator(uri);
|
|
249
248
|
const cleanup = await migrator.start();
|
|
250
|
-
|
|
251
|
-
|
|
249
|
+
expect(migrator.migrateCalled).toBe(true);
|
|
250
|
+
expect(typeof cleanup).toBe("function");
|
|
252
251
|
});
|
|
253
252
|
});
|
|
254
253
|
});
|
|
@@ -1,113 +1,113 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
const
|
|
1
|
+
const require_chunk = require('../chunk-CUT6urMc.cjs');
|
|
2
|
+
const require_faker = require('../faker-caz-8zt8.cjs');
|
|
3
|
+
const vitest = require_chunk.__toESM(require("vitest"));
|
|
4
4
|
|
|
5
5
|
//#region src/__tests__/faker.spec.ts
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
(0, vitest.describe)("faker", () => {
|
|
7
|
+
(0, vitest.describe)("sequence", () => {
|
|
8
|
+
(0, vitest.beforeEach)(() => {
|
|
9
9
|
require_faker.faker.resetAllSequences();
|
|
10
10
|
});
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
(0, vitest.it)("should start from 1 for a new sequence", () => {
|
|
12
|
+
(0, vitest.expect)(require_faker.faker.sequence()).toBe(1);
|
|
13
|
+
(0, vitest.expect)(require_faker.faker.sequence("custom")).toBe(1);
|
|
14
14
|
});
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
(0, vitest.it)("should increment on each call", () => {
|
|
16
|
+
(0, vitest.expect)(require_faker.faker.sequence()).toBe(1);
|
|
17
|
+
(0, vitest.expect)(require_faker.faker.sequence()).toBe(2);
|
|
18
|
+
(0, vitest.expect)(require_faker.faker.sequence()).toBe(3);
|
|
19
19
|
});
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
(0, vitest.it)("should maintain separate counters for different names", () => {
|
|
21
|
+
(0, vitest.expect)(require_faker.faker.sequence("users")).toBe(1);
|
|
22
|
+
(0, vitest.expect)(require_faker.faker.sequence("posts")).toBe(1);
|
|
23
|
+
(0, vitest.expect)(require_faker.faker.sequence("users")).toBe(2);
|
|
24
|
+
(0, vitest.expect)(require_faker.faker.sequence("posts")).toBe(2);
|
|
25
|
+
(0, vitest.expect)(require_faker.faker.sequence("users")).toBe(3);
|
|
26
|
+
(0, vitest.expect)(require_faker.faker.sequence("posts")).toBe(3);
|
|
27
27
|
});
|
|
28
|
-
|
|
28
|
+
(0, vitest.it)("should handle concurrent-like sequential calls", () => {
|
|
29
29
|
const results = [];
|
|
30
30
|
for (let i = 0; i < 100; i++) results.push(require_faker.faker.sequence("concurrent"));
|
|
31
|
-
|
|
31
|
+
(0, vitest.expect)(results).toEqual(Array.from({ length: 100 }, (_, i) => i + 1));
|
|
32
32
|
});
|
|
33
33
|
});
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
(0, vitest.describe)("resetSequence", () => {
|
|
35
|
+
(0, vitest.beforeEach)(() => {
|
|
36
36
|
require_faker.faker.resetAllSequences();
|
|
37
37
|
});
|
|
38
|
-
|
|
38
|
+
(0, vitest.it)("should reset a specific sequence to 0", () => {
|
|
39
39
|
require_faker.faker.sequence("test");
|
|
40
40
|
require_faker.faker.sequence("test");
|
|
41
|
-
|
|
41
|
+
(0, vitest.expect)(require_faker.faker.sequence("test")).toBe(3);
|
|
42
42
|
require_faker.faker.resetSequence("test");
|
|
43
|
-
|
|
43
|
+
(0, vitest.expect)(require_faker.faker.sequence("test")).toBe(1);
|
|
44
44
|
});
|
|
45
|
-
|
|
45
|
+
(0, vitest.it)("should reset a specific sequence to a custom value", () => {
|
|
46
46
|
require_faker.faker.sequence("test");
|
|
47
47
|
require_faker.faker.resetSequence("test", 10);
|
|
48
|
-
|
|
48
|
+
(0, vitest.expect)(require_faker.faker.sequence("test")).toBe(11);
|
|
49
49
|
});
|
|
50
|
-
|
|
50
|
+
(0, vitest.it)("should create a new sequence if it does not exist", () => {
|
|
51
51
|
require_faker.faker.resetSequence("new", 5);
|
|
52
|
-
|
|
52
|
+
(0, vitest.expect)(require_faker.faker.sequence("new")).toBe(6);
|
|
53
53
|
});
|
|
54
|
-
|
|
54
|
+
(0, vitest.it)("should not affect other sequences", () => {
|
|
55
55
|
require_faker.faker.sequence("test1");
|
|
56
56
|
require_faker.faker.sequence("test1");
|
|
57
57
|
require_faker.faker.sequence("test2");
|
|
58
58
|
require_faker.faker.resetSequence("test1");
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
(0, vitest.expect)(require_faker.faker.sequence("test1")).toBe(1);
|
|
60
|
+
(0, vitest.expect)(require_faker.faker.sequence("test2")).toBe(2);
|
|
61
61
|
});
|
|
62
62
|
});
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
(0, vitest.describe)("resetAllSequences", () => {
|
|
64
|
+
(0, vitest.it)("should reset all sequences", () => {
|
|
65
65
|
require_faker.faker.sequence("test1");
|
|
66
66
|
require_faker.faker.sequence("test1");
|
|
67
67
|
require_faker.faker.sequence("test2");
|
|
68
68
|
require_faker.faker.sequence("test2");
|
|
69
69
|
require_faker.faker.sequence("test2");
|
|
70
70
|
require_faker.faker.resetAllSequences();
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
(0, vitest.expect)(require_faker.faker.sequence("test1")).toBe(1);
|
|
72
|
+
(0, vitest.expect)(require_faker.faker.sequence("test2")).toBe(1);
|
|
73
|
+
(0, vitest.expect)(require_faker.faker.sequence()).toBe(1);
|
|
74
74
|
});
|
|
75
75
|
});
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
(0, vitest.describe)("identifier", () => {
|
|
77
|
+
(0, vitest.beforeEach)(() => {
|
|
78
78
|
require_faker.faker.resetAllSequences();
|
|
79
79
|
});
|
|
80
|
-
|
|
80
|
+
(0, vitest.it)("should include sequence number in identifier", () => {
|
|
81
81
|
const id1 = require_faker.faker.identifier();
|
|
82
82
|
const id2 = require_faker.faker.identifier();
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
(0, vitest.expect)(id1).not.toBe(id2);
|
|
84
|
+
(0, vitest.expect)(id1).toMatch(/1$/);
|
|
85
|
+
(0, vitest.expect)(id2).toMatch(/2$/);
|
|
86
86
|
});
|
|
87
|
-
|
|
87
|
+
(0, vitest.it)("should use custom suffix when provided", () => {
|
|
88
88
|
const id = require_faker.faker.identifier("customSuffix");
|
|
89
|
-
|
|
89
|
+
(0, vitest.expect)(id).toMatch(/\.customSuffix$/);
|
|
90
90
|
});
|
|
91
91
|
});
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
(0, vitest.describe)("timestamps", () => {
|
|
93
|
+
(0, vitest.it)("should return createdAt and updatedAt dates", () => {
|
|
94
94
|
const { createdAt, updatedAt } = require_faker.faker.timestamps();
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
95
|
+
(0, vitest.expect)(createdAt).toBeInstanceOf(Date);
|
|
96
|
+
(0, vitest.expect)(updatedAt).toBeInstanceOf(Date);
|
|
97
|
+
(0, vitest.expect)(createdAt.getTime()).toBeLessThanOrEqual(updatedAt.getTime());
|
|
98
|
+
(0, vitest.expect)(updatedAt.getTime()).toBeLessThanOrEqual((/* @__PURE__ */ new Date()).getTime());
|
|
99
99
|
});
|
|
100
|
-
|
|
100
|
+
(0, vitest.it)("should have milliseconds set to 0", () => {
|
|
101
101
|
const { createdAt, updatedAt } = require_faker.faker.timestamps();
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
(0, vitest.expect)(createdAt.getMilliseconds()).toBe(0);
|
|
103
|
+
(0, vitest.expect)(updatedAt.getMilliseconds()).toBe(0);
|
|
104
104
|
});
|
|
105
105
|
});
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
(0, vitest.describe)("price", () => {
|
|
107
|
+
(0, vitest.it)("should return a number", () => {
|
|
108
108
|
const result = require_faker.faker.price();
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
(0, vitest.expect)(typeof result).toBe("number");
|
|
110
|
+
(0, vitest.expect)(result).toBeGreaterThan(0);
|
|
111
111
|
});
|
|
112
112
|
});
|
|
113
113
|
});
|