@stratum-hq/db-adapters 0.2.1 → 0.2.4

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 (43) hide show
  1. package/dist/__tests__/drizzle.test.d.ts +2 -0
  2. package/dist/__tests__/drizzle.test.d.ts.map +1 -0
  3. package/dist/__tests__/drizzle.test.js +172 -0
  4. package/dist/__tests__/drizzle.test.js.map +1 -0
  5. package/dist/__tests__/pool-manager.test.js +36 -39
  6. package/dist/__tests__/pool-manager.test.js.map +1 -1
  7. package/dist/__tests__/rls-session.test.js +6 -6
  8. package/dist/__tests__/rls-session.test.js.map +1 -1
  9. package/dist/__tests__/sequelize.test.d.ts +2 -0
  10. package/dist/__tests__/sequelize.test.d.ts.map +1 -0
  11. package/dist/__tests__/sequelize.test.js +150 -0
  12. package/dist/__tests__/sequelize.test.js.map +1 -0
  13. package/dist/adapters/database-raw.js +2 -2
  14. package/dist/adapters/database-raw.js.map +1 -1
  15. package/dist/adapters/drizzle.d.ts +23 -0
  16. package/dist/adapters/drizzle.d.ts.map +1 -0
  17. package/dist/adapters/drizzle.js +63 -0
  18. package/dist/adapters/drizzle.js.map +1 -0
  19. package/dist/adapters/schema-prisma.d.ts.map +1 -1
  20. package/dist/adapters/schema-prisma.js +2 -8
  21. package/dist/adapters/schema-prisma.js.map +1 -1
  22. package/dist/adapters/schema-raw.d.ts.map +1 -1
  23. package/dist/adapters/schema-raw.js +2 -9
  24. package/dist/adapters/schema-raw.js.map +1 -1
  25. package/dist/adapters/sequelize.d.ts +25 -0
  26. package/dist/adapters/sequelize.d.ts.map +1 -0
  27. package/dist/adapters/sequelize.js +47 -0
  28. package/dist/adapters/sequelize.js.map +1 -0
  29. package/dist/database/manager.d.ts.map +1 -1
  30. package/dist/database/manager.js +2 -12
  31. package/dist/database/manager.js.map +1 -1
  32. package/dist/database/pool-manager.d.ts +4 -5
  33. package/dist/database/pool-manager.d.ts.map +1 -1
  34. package/dist/database/pool-manager.js +21 -16
  35. package/dist/database/pool-manager.js.map +1 -1
  36. package/dist/index.d.ts +3 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +7 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/rls/session.d.ts.map +1 -1
  41. package/dist/rls/session.js +10 -4
  42. package/dist/rls/session.js.map +1 -1
  43. package/package.json +23 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=drizzle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drizzle.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/drizzle.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const drizzle_js_1 = require("../adapters/drizzle.js");
5
+ const base_adapter_js_1 = require("../base-adapter.js");
6
+ // ---------------------------------------------------------------------------
7
+ // Mock pg
8
+ // ---------------------------------------------------------------------------
9
+ class MockPool {
10
+ }
11
+ vitest_1.vi.mock("pg", () => {
12
+ return { default: { Pool: MockPool }, Pool: MockPool };
13
+ });
14
+ function createMockDrizzle() {
15
+ const executions = [];
16
+ return {
17
+ executions,
18
+ execute: async (query) => {
19
+ executions.push({ query });
20
+ return { rows: [] };
21
+ },
22
+ transaction: async (fn) => {
23
+ // Create a nested mock for the transaction context that shares the
24
+ // executions array so tests can inspect what ran inside the tx.
25
+ const txMock = {
26
+ execute: async (query) => {
27
+ executions.push({ query });
28
+ return { rows: [] };
29
+ },
30
+ transaction: async (innerFn) => innerFn(txMock),
31
+ };
32
+ return fn(txMock);
33
+ },
34
+ };
35
+ }
36
+ // ---------------------------------------------------------------------------
37
+ // Tests
38
+ // ---------------------------------------------------------------------------
39
+ (0, vitest_1.describe)("DrizzleAdapter", () => {
40
+ let pool;
41
+ let adapter;
42
+ (0, vitest_1.beforeEach)(() => {
43
+ vitest_1.vi.clearAllMocks();
44
+ pool = new MockPool();
45
+ adapter = new drizzle_js_1.DrizzleAdapter(pool);
46
+ });
47
+ (0, vitest_1.it)("extends BaseAdapter", () => {
48
+ (0, vitest_1.expect)(adapter).toBeInstanceOf(base_adapter_js_1.BaseAdapter);
49
+ });
50
+ (0, vitest_1.describe)("withTenantScope (method)", () => {
51
+ (0, vitest_1.it)("returns a new wrapped object, not the original instance", () => {
52
+ const mock = createMockDrizzle();
53
+ const result = adapter.withTenantScope(mock, () => "tenant-1");
54
+ (0, vitest_1.expect)(result).not.toBe(mock);
55
+ });
56
+ (0, vitest_1.it)("returned object exposes execute and transaction", () => {
57
+ const mock = createMockDrizzle();
58
+ const result = adapter.withTenantScope(mock, () => "tenant-1");
59
+ (0, vitest_1.expect)(typeof result.execute).toBe("function");
60
+ (0, vitest_1.expect)(typeof result.transaction).toBe("function");
61
+ });
62
+ (0, vitest_1.it)("wrapped execute calls transaction() and sets set_config inside it", async () => {
63
+ const mock = createMockDrizzle();
64
+ const transactionSpy = vitest_1.vi.spyOn(mock, "transaction");
65
+ const wrapped = adapter.withTenantScope(mock, () => "tenant-abc");
66
+ await wrapped.execute({ sql: "SELECT 1" });
67
+ (0, vitest_1.expect)(transactionSpy).toHaveBeenCalledTimes(1);
68
+ (0, vitest_1.expect)(mock.executions).toHaveLength(2);
69
+ (0, vitest_1.expect)(mock.executions[0].query.sql).toContain("set_config");
70
+ (0, vitest_1.expect)(mock.executions[0].query.sql).toContain("app.current_tenant_id");
71
+ (0, vitest_1.expect)(mock.executions[1].query.sql).toBe("SELECT 1");
72
+ });
73
+ (0, vitest_1.it)("set_config receives tenant ID as params", async () => {
74
+ const mock = createMockDrizzle();
75
+ const wrapped = adapter.withTenantScope(mock, () => "tenant-xyz");
76
+ await wrapped.execute({ sql: "SELECT 1" });
77
+ (0, vitest_1.expect)(mock.executions[0].query.params).toEqual(["tenant-xyz"]);
78
+ });
79
+ (0, vitest_1.it)("wrapped transaction injects set_config before user callback", async () => {
80
+ const mock = createMockDrizzle();
81
+ const transactionSpy = vitest_1.vi.spyOn(mock, "transaction");
82
+ const wrapped = adapter.withTenantScope(mock, () => "tenant-abc");
83
+ await wrapped.transaction(async (tx) => {
84
+ await tx.execute({ sql: "INSERT INTO foo VALUES (1)" });
85
+ });
86
+ (0, vitest_1.expect)(transactionSpy).toHaveBeenCalledTimes(1);
87
+ (0, vitest_1.expect)(mock.executions).toHaveLength(2);
88
+ (0, vitest_1.expect)(mock.executions[0].query.sql).toContain("set_config");
89
+ (0, vitest_1.expect)(mock.executions[1].query.sql).toBe("INSERT INTO foo VALUES (1)");
90
+ });
91
+ (0, vitest_1.it)("reads tenant ID lazily from contextFn on each call", async () => {
92
+ let currentTenant = "tenant-1";
93
+ const mock = createMockDrizzle();
94
+ const wrapped = adapter.withTenantScope(mock, () => currentTenant);
95
+ await wrapped.execute({ sql: "SELECT 1" });
96
+ (0, vitest_1.expect)(mock.executions[0].query.params).toEqual(["tenant-1"]);
97
+ currentTenant = "tenant-2";
98
+ mock.executions.length = 0;
99
+ await wrapped.execute({ sql: "SELECT 2" });
100
+ (0, vitest_1.expect)(mock.executions[0].query.params).toEqual(["tenant-2"]);
101
+ });
102
+ (0, vitest_1.it)("throws when contextFn returns empty string (execute)", async () => {
103
+ const mock = createMockDrizzle();
104
+ const wrapped = adapter.withTenantScope(mock, () => "");
105
+ await (0, vitest_1.expect)(wrapped.execute({ sql: "SELECT 1" })).rejects.toThrow("Tenant context is required for database operations.");
106
+ });
107
+ (0, vitest_1.it)("throws when contextFn returns empty string (transaction)", async () => {
108
+ const mock = createMockDrizzle();
109
+ const wrapped = adapter.withTenantScope(mock, () => "");
110
+ await (0, vitest_1.expect)(wrapped.transaction(async (tx) => {
111
+ await tx.execute({ sql: "SELECT 1" });
112
+ })).rejects.toThrow("Tenant context is required for database operations.");
113
+ });
114
+ (0, vitest_1.it)("propagates errors thrown by set_config (execute path)", async () => {
115
+ const mock = createMockDrizzle();
116
+ // Override transaction to use a tx whose execute throws
117
+ mock.transaction = async (fn) => {
118
+ const failTx = {
119
+ execute: vitest_1.vi.fn().mockRejectedValueOnce(new Error("set_config failed")),
120
+ transaction: async (innerFn) => innerFn(failTx),
121
+ };
122
+ return fn(failTx);
123
+ };
124
+ const wrapped = adapter.withTenantScope(mock, () => "tenant-1");
125
+ await (0, vitest_1.expect)(wrapped.execute({ sql: "SELECT 1" })).rejects.toThrow("set_config failed");
126
+ });
127
+ (0, vitest_1.it)("propagates errors thrown by set_config (transaction path)", async () => {
128
+ const mock = createMockDrizzle();
129
+ mock.transaction = async (fn) => {
130
+ const failTx = {
131
+ execute: vitest_1.vi.fn().mockRejectedValueOnce(new Error("set_config failed")),
132
+ transaction: async (innerFn) => innerFn(failTx),
133
+ };
134
+ return fn(failTx);
135
+ };
136
+ const wrapped = adapter.withTenantScope(mock, () => "tenant-1");
137
+ await (0, vitest_1.expect)(wrapped.transaction(async (tx) => {
138
+ await tx.execute({ sql: "SELECT 1" });
139
+ })).rejects.toThrow("set_config failed");
140
+ });
141
+ (0, vitest_1.it)("throws when execute() called with no tenant", async () => {
142
+ const mock = createMockDrizzle();
143
+ const wrapped = adapter.withTenantScope(mock, () => "");
144
+ const query = { sql: "SELECT 1" };
145
+ await (0, vitest_1.expect)(wrapped.execute(query)).rejects.toThrow("Tenant context is required for database operations.");
146
+ });
147
+ });
148
+ });
149
+ (0, vitest_1.describe)("withTenantScope (convenience function)", () => {
150
+ (0, vitest_1.it)("returns a new wrapped object, not the original instance", () => {
151
+ const mock = createMockDrizzle();
152
+ const pool = new MockPool();
153
+ const result = (0, drizzle_js_1.withTenantScope)(mock, () => "tenant-1", pool);
154
+ (0, vitest_1.expect)(result).not.toBe(mock);
155
+ });
156
+ (0, vitest_1.it)("wrapped execute calls transaction() with set_config", async () => {
157
+ const mock = createMockDrizzle();
158
+ const transactionSpy = vitest_1.vi.spyOn(mock, "transaction");
159
+ const pool = new MockPool();
160
+ const wrapped = (0, drizzle_js_1.withTenantScope)(mock, () => "fn-tenant", pool);
161
+ await wrapped.execute({ sql: "SELECT 1" });
162
+ (0, vitest_1.expect)(transactionSpy).toHaveBeenCalledTimes(1);
163
+ (0, vitest_1.expect)(mock.executions[0].query.params).toEqual(["fn-tenant"]);
164
+ });
165
+ (0, vitest_1.it)("throws when contextFn returns empty string", async () => {
166
+ const mock = createMockDrizzle();
167
+ const pool = new MockPool();
168
+ const wrapped = (0, drizzle_js_1.withTenantScope)(mock, () => "", pool);
169
+ await (0, vitest_1.expect)(wrapped.execute({ sql: "SELECT 1" })).rejects.toThrow("Tenant context is required for database operations.");
170
+ });
171
+ });
172
+ //# sourceMappingURL=drizzle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drizzle.test.js","sourceRoot":"","sources":["../../src/__tests__/drizzle.test.ts"],"names":[],"mappings":"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"}
@@ -41,86 +41,83 @@ function makeManager(maxPools = 3) {
41
41
  mockPoolEnd.mockClear();
42
42
  });
43
43
  (0, vitest_1.describe)("slug validation", () => {
44
- (0, vitest_1.it)("rejects slugs starting with a number", () => {
44
+ (0, vitest_1.it)("rejects slugs starting with a number", async () => {
45
45
  const mgr = makeManager();
46
- (0, vitest_1.expect)(() => mgr.getPool("123acme")).toThrow("Invalid tenant slug");
46
+ await (0, vitest_1.expect)(mgr.getPool("123acme")).rejects.toThrow("Invalid tenant slug");
47
47
  });
48
- (0, vitest_1.it)("rejects slugs with uppercase letters", () => {
48
+ (0, vitest_1.it)("rejects slugs with uppercase letters", async () => {
49
49
  const mgr = makeManager();
50
- (0, vitest_1.expect)(() => mgr.getPool("Acme")).toThrow("Invalid tenant slug");
50
+ await (0, vitest_1.expect)(mgr.getPool("Acme")).rejects.toThrow("Invalid tenant slug");
51
51
  });
52
- (0, vitest_1.it)("rejects slugs with hyphens", () => {
52
+ (0, vitest_1.it)("rejects slugs with hyphens", async () => {
53
53
  const mgr = makeManager();
54
- (0, vitest_1.expect)(() => mgr.getPool("acme-corp")).toThrow("Invalid tenant slug");
54
+ await (0, vitest_1.expect)(mgr.getPool("acme-corp")).rejects.toThrow("Invalid tenant slug");
55
55
  });
56
- (0, vitest_1.it)("rejects slugs with special characters", () => {
56
+ (0, vitest_1.it)("rejects slugs with special characters", async () => {
57
57
  const mgr = makeManager();
58
- (0, vitest_1.expect)(() => mgr.getPool("acme; DROP TABLE")).toThrow("Invalid tenant slug");
58
+ await (0, vitest_1.expect)(mgr.getPool("acme; DROP TABLE")).rejects.toThrow("Invalid tenant slug");
59
59
  });
60
- (0, vitest_1.it)("rejects empty slugs", () => {
60
+ (0, vitest_1.it)("rejects empty slugs", async () => {
61
61
  const mgr = makeManager();
62
- (0, vitest_1.expect)(() => mgr.getPool("")).toThrow("Invalid tenant slug");
62
+ await (0, vitest_1.expect)(mgr.getPool("")).rejects.toThrow("Invalid tenant slug");
63
63
  });
64
- (0, vitest_1.it)("accepts valid lowercase slugs with underscores", () => {
64
+ (0, vitest_1.it)("accepts valid lowercase slugs with underscores", async () => {
65
65
  const mgr = makeManager();
66
- (0, vitest_1.expect)(() => mgr.getPool("acme_corp")).not.toThrow();
66
+ await (0, vitest_1.expect)(mgr.getPool("acme_corp")).resolves.toBeDefined();
67
67
  });
68
68
  });
69
69
  (0, vitest_1.describe)("getPool", () => {
70
- (0, vitest_1.it)("creates a new pool for an unseen tenant slug", () => {
70
+ (0, vitest_1.it)("creates a new pool for an unseen tenant slug", async () => {
71
71
  const mgr = makeManager();
72
- const pool = mgr.getPool("acme");
72
+ const pool = await mgr.getPool("acme");
73
73
  (0, vitest_1.expect)(pool).toBeDefined();
74
74
  (0, vitest_1.expect)(mgr.getStats().poolCount).toBe(1);
75
75
  });
76
- (0, vitest_1.it)("returns the same pool instance on subsequent calls", () => {
76
+ (0, vitest_1.it)("returns the same pool instance on subsequent calls", async () => {
77
77
  const mgr = makeManager();
78
- const pool1 = mgr.getPool("acme");
79
- const pool2 = mgr.getPool("acme");
78
+ const pool1 = await mgr.getPool("acme");
79
+ const pool2 = await mgr.getPool("acme");
80
80
  (0, vitest_1.expect)(pool1).toBe(pool2);
81
81
  (0, vitest_1.expect)(mgr.getStats().poolCount).toBe(1);
82
82
  });
83
- (0, vitest_1.it)("creates separate pools for different slugs", () => {
83
+ (0, vitest_1.it)("creates separate pools for different slugs", async () => {
84
84
  const mgr = makeManager();
85
- const pool1 = mgr.getPool("acme");
86
- const pool2 = mgr.getPool("globex");
85
+ const pool1 = await mgr.getPool("acme");
86
+ const pool2 = await mgr.getPool("globex");
87
87
  (0, vitest_1.expect)(pool1).not.toBe(pool2);
88
88
  (0, vitest_1.expect)(mgr.getStats().poolCount).toBe(2);
89
89
  });
90
- (0, vitest_1.it)("connects to the correct database name", () => {
90
+ (0, vitest_1.it)("connects to the correct database name", async () => {
91
91
  const mgr = makeManager();
92
- const pool = mgr.getPool("acme");
92
+ const pool = (await mgr.getPool("acme"));
93
93
  (0, vitest_1.expect)(pool.database).toBe("stratum_tenant_acme");
94
94
  });
95
95
  });
96
96
  (0, vitest_1.describe)("LRU eviction", () => {
97
97
  (0, vitest_1.it)("evicts the least recently used pool when maxPools is exceeded", async () => {
98
98
  const mgr = makeManager(2);
99
- mgr.getPool("tenant_a");
99
+ await mgr.getPool("tenant_a");
100
100
  // Small delay to ensure different timestamps
101
101
  await new Promise((r) => setTimeout(r, 2));
102
- mgr.getPool("tenant_b");
102
+ await mgr.getPool("tenant_b");
103
103
  // tenant_a is now the LRU entry; adding tenant_c should evict it.
104
104
  await new Promise((r) => setTimeout(r, 2));
105
- mgr.getPool("tenant_c");
106
- // Allow the async eviction microtask to complete.
107
- await new Promise((r) => setTimeout(r, 10));
105
+ await mgr.getPool("tenant_c");
108
106
  (0, vitest_1.expect)(mockPoolEnd).toHaveBeenCalledTimes(1);
109
107
  // poolCount should be back to maxPools (2) after eviction.
110
108
  (0, vitest_1.expect)(mgr.getStats().poolCount).toBe(2);
111
109
  });
112
110
  (0, vitest_1.it)("updates lastUsed when an existing pool is accessed", async () => {
113
111
  const mgr = makeManager(2);
114
- mgr.getPool("tenant_a");
112
+ await mgr.getPool("tenant_a");
115
113
  await new Promise((r) => setTimeout(r, 2));
116
- mgr.getPool("tenant_b");
114
+ await mgr.getPool("tenant_b");
117
115
  await new Promise((r) => setTimeout(r, 2));
118
116
  // Re-access tenant_a to make it the most recently used.
119
- mgr.getPool("tenant_a");
117
+ await mgr.getPool("tenant_a");
120
118
  await new Promise((r) => setTimeout(r, 2));
121
119
  // Now tenant_b is the LRU; adding tenant_c should evict tenant_b.
122
- mgr.getPool("tenant_c");
123
- await new Promise((r) => setTimeout(r, 10));
120
+ await mgr.getPool("tenant_c");
124
121
  (0, vitest_1.expect)(mockPoolEnd).toHaveBeenCalledTimes(1);
125
122
  // tenant_a and tenant_c should remain.
126
123
  (0, vitest_1.expect)(mgr.getStats().poolCount).toBe(2);
@@ -129,7 +126,7 @@ function makeManager(maxPools = 3) {
129
126
  (0, vitest_1.describe)("closePool", () => {
130
127
  (0, vitest_1.it)("closes and removes the specified pool", async () => {
131
128
  const mgr = makeManager();
132
- mgr.getPool("acme");
129
+ await mgr.getPool("acme");
133
130
  (0, vitest_1.expect)(mgr.getStats().poolCount).toBe(1);
134
131
  await mgr.closePool("acme");
135
132
  (0, vitest_1.expect)(mockPoolEnd).toHaveBeenCalledTimes(1);
@@ -144,9 +141,9 @@ function makeManager(maxPools = 3) {
144
141
  (0, vitest_1.describe)("closeAll", () => {
145
142
  (0, vitest_1.it)("closes all pools", async () => {
146
143
  const mgr = makeManager(10);
147
- mgr.getPool("a");
148
- mgr.getPool("b");
149
- mgr.getPool("c");
144
+ await mgr.getPool("a");
145
+ await mgr.getPool("b");
146
+ await mgr.getPool("c");
150
147
  (0, vitest_1.expect)(mgr.getStats().poolCount).toBe(3);
151
148
  await mgr.closeAll();
152
149
  (0, vitest_1.expect)(mockPoolEnd).toHaveBeenCalledTimes(3);
@@ -163,10 +160,10 @@ function makeManager(maxPools = 3) {
163
160
  const mgr = makeManager();
164
161
  (0, vitest_1.expect)(mgr.getStats()).toEqual({ poolCount: 0, activeConnections: 0 });
165
162
  });
166
- (0, vitest_1.it)("reflects current pool count", () => {
163
+ (0, vitest_1.it)("reflects current pool count", async () => {
167
164
  const mgr = makeManager(10);
168
- mgr.getPool("x");
169
- mgr.getPool("y");
165
+ await mgr.getPool("x");
166
+ await mgr.getPool("y");
170
167
  (0, vitest_1.expect)(mgr.getStats().poolCount).toBe(2);
171
168
  });
172
169
  });
@@ -1 +1 @@
1
- {"version":3,"file":"pool-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/pool-manager.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pool-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/pool-manager.test.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ function makeMockClient() {
25
25
  (0, vitest_1.it)("sets the correct session variable via set_config", async () => {
26
26
  await (0, session_js_1.setTenantContext)(client, "tenant-abc-123");
27
27
  const call = client.query.mock.calls[0];
28
- (0, vitest_1.expect)(call[0]).toBe("SELECT set_config('app.current_tenant_id', $1, false)");
28
+ (0, vitest_1.expect)(call[0]).toBe("SELECT set_config('app.current_tenant_id', $1, true)");
29
29
  (0, vitest_1.expect)(call[1]).toEqual(["tenant-abc-123"]);
30
30
  });
31
31
  (0, vitest_1.it)("passes the tenant ID as a parameterized value", async () => {
@@ -34,12 +34,12 @@ function makeMockClient() {
34
34
  .calls[0][1];
35
35
  (0, vitest_1.expect)(params).toEqual(["f47ac10b-58cc-4372-a567-0e02b2c3d479"]);
36
36
  });
37
- (0, vitest_1.it)("uses session-level scope (third arg false)", async () => {
37
+ (0, vitest_1.it)("uses transaction-scoped scope (third arg true)", async () => {
38
38
  await (0, session_js_1.setTenantContext)(client, "any-tenant");
39
39
  const sql = client.query.mock.calls[0][0];
40
- // The third argument to set_config is `false`, meaning session-level
41
- // (not transaction-local) so context persists even without a transaction
42
- (0, vitest_1.expect)(sql).toContain("false");
40
+ // The third argument to set_config is `true`, meaning transaction-scoped
41
+ // so context is automatically cleared when the transaction ends
42
+ (0, vitest_1.expect)(sql).toContain("true");
43
43
  });
44
44
  });
45
45
  // -----------------------------------------------------------------------
@@ -49,7 +49,7 @@ function makeMockClient() {
49
49
  (0, vitest_1.it)("resets the session variable via set_config with empty string", async () => {
50
50
  await (0, session_js_1.resetTenantContext)(client);
51
51
  const call = client.query.mock.calls[0];
52
- (0, vitest_1.expect)(call[0]).toBe("SELECT set_config('app.current_tenant_id', '', false)");
52
+ (0, vitest_1.expect)(call[0]).toBe("SELECT set_config('app.current_tenant_id', '', true)");
53
53
  });
54
54
  });
55
55
  // -----------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"rls-session.test.js","sourceRoot":"","sources":["../../src/__tests__/rls-session.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rls-session.test.js","sourceRoot":"","sources":["../../src/__tests__/rls-session.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sequelize.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequelize.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sequelize.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const sequelize_js_1 = require("../adapters/sequelize.js");
5
+ const base_adapter_js_1 = require("../base-adapter.js");
6
+ // ---------------------------------------------------------------------------
7
+ // Mock pg
8
+ // ---------------------------------------------------------------------------
9
+ class MockPool {
10
+ }
11
+ vitest_1.vi.mock("pg", () => {
12
+ return { default: { Pool: MockPool }, Pool: MockPool };
13
+ });
14
+ function createMockSequelize() {
15
+ const queries = [];
16
+ return {
17
+ queries,
18
+ query: async (sql, options) => {
19
+ queries.push({ sql, options });
20
+ return [[], 0];
21
+ },
22
+ transaction: async (fn) => fn({}),
23
+ addHook: vitest_1.vi.fn(),
24
+ };
25
+ }
26
+ // ---------------------------------------------------------------------------
27
+ // Tests
28
+ // ---------------------------------------------------------------------------
29
+ (0, vitest_1.describe)("SequelizeAdapter", () => {
30
+ let pool;
31
+ let adapter;
32
+ (0, vitest_1.beforeEach)(() => {
33
+ vitest_1.vi.clearAllMocks();
34
+ pool = new MockPool();
35
+ adapter = new sequelize_js_1.SequelizeAdapter(pool);
36
+ });
37
+ (0, vitest_1.it)("extends BaseAdapter", () => {
38
+ (0, vitest_1.expect)(adapter).toBeInstanceOf(base_adapter_js_1.BaseAdapter);
39
+ });
40
+ (0, vitest_1.describe)("withTenantScope (method)", () => {
41
+ (0, vitest_1.it)("returns a new wrapped object, not the original instance", () => {
42
+ const mock = createMockSequelize();
43
+ const result = adapter.withTenantScope(mock, () => "tenant-1");
44
+ (0, vitest_1.expect)(result).not.toBe(mock);
45
+ });
46
+ (0, vitest_1.it)("returned object exposes query, transaction, and addHook", () => {
47
+ const mock = createMockSequelize();
48
+ const result = adapter.withTenantScope(mock, () => "tenant-1");
49
+ (0, vitest_1.expect)(typeof result.query).toBe("function");
50
+ (0, vitest_1.expect)(typeof result.transaction).toBe("function");
51
+ (0, vitest_1.expect)(typeof result.addHook).toBe("function");
52
+ });
53
+ (0, vitest_1.it)("wrapped query calls transaction() and sets set_config inside it", async () => {
54
+ const mock = createMockSequelize();
55
+ const transactionSpy = vitest_1.vi.spyOn(mock, "transaction");
56
+ const wrapped = adapter.withTenantScope(mock, () => "tenant-abc");
57
+ await wrapped.query("SELECT 1");
58
+ (0, vitest_1.expect)(transactionSpy).toHaveBeenCalledTimes(1);
59
+ (0, vitest_1.expect)(mock.queries).toHaveLength(2);
60
+ (0, vitest_1.expect)(mock.queries[0].sql).toContain("set_config");
61
+ (0, vitest_1.expect)(mock.queries[0].sql).toContain("app.current_tenant_id");
62
+ (0, vitest_1.expect)(mock.queries[1].sql).toBe("SELECT 1");
63
+ });
64
+ (0, vitest_1.it)("set_config receives tenant ID as bind parameter", async () => {
65
+ const mock = createMockSequelize();
66
+ const wrapped = adapter.withTenantScope(mock, () => "tenant-xyz");
67
+ await wrapped.query("SELECT 1");
68
+ (0, vitest_1.expect)(mock.queries[0].options).toMatchObject({ bind: ["tenant-xyz"] });
69
+ });
70
+ (0, vitest_1.it)("passes transaction handle to both set_config and the actual query", async () => {
71
+ const fakeT = { id: "fake-transaction" };
72
+ const mock = createMockSequelize();
73
+ mock.transaction = async (fn) => fn(fakeT);
74
+ const wrapped = adapter.withTenantScope(mock, () => "tenant-1");
75
+ await wrapped.query("SELECT 1");
76
+ (0, vitest_1.expect)(mock.queries[0].options).toMatchObject({ transaction: fakeT });
77
+ (0, vitest_1.expect)(mock.queries[1].options).toMatchObject({ transaction: fakeT });
78
+ });
79
+ (0, vitest_1.it)("merges caller-supplied options with transaction handle", async () => {
80
+ const mock = createMockSequelize();
81
+ const wrapped = adapter.withTenantScope(mock, () => "tenant-1");
82
+ await wrapped.query("SELECT 1", { type: "SELECT" });
83
+ // The actual query (index 1) should carry both caller options and transaction
84
+ (0, vitest_1.expect)(mock.queries[1].options).toMatchObject({ type: "SELECT" });
85
+ (0, vitest_1.expect)(mock.queries[1].options).toHaveProperty("transaction");
86
+ });
87
+ (0, vitest_1.it)("reads tenant ID lazily from contextFn on each query call", async () => {
88
+ let currentTenant = "tenant-1";
89
+ const mock = createMockSequelize();
90
+ const wrapped = adapter.withTenantScope(mock, () => currentTenant);
91
+ await wrapped.query("SELECT 1");
92
+ (0, vitest_1.expect)(mock.queries[0].options).toMatchObject({ bind: ["tenant-1"] });
93
+ currentTenant = "tenant-2";
94
+ mock.queries.length = 0;
95
+ await wrapped.query("SELECT 2");
96
+ (0, vitest_1.expect)(mock.queries[0].options).toMatchObject({ bind: ["tenant-2"] });
97
+ });
98
+ (0, vitest_1.it)("throws when contextFn returns empty string", async () => {
99
+ const mock = createMockSequelize();
100
+ const wrapped = adapter.withTenantScope(mock, () => "");
101
+ await (0, vitest_1.expect)(wrapped.query("SELECT 1")).rejects.toThrow("Tenant context is required for database operations.");
102
+ });
103
+ (0, vitest_1.it)("propagates errors thrown by set_config", async () => {
104
+ const mock = createMockSequelize();
105
+ mock.transaction = async (fn) => fn({});
106
+ mock.query = vitest_1.vi.fn().mockRejectedValueOnce(new Error("set_config failed"));
107
+ const wrapped = adapter.withTenantScope(mock, () => "tenant-1");
108
+ await (0, vitest_1.expect)(wrapped.query("SELECT 1")).rejects.toThrow("set_config failed");
109
+ });
110
+ (0, vitest_1.it)("delegates transaction() to the original instance", async () => {
111
+ const mock = createMockSequelize();
112
+ const transactionSpy = vitest_1.vi.spyOn(mock, "transaction");
113
+ const wrapped = adapter.withTenantScope(mock, () => "tenant-1");
114
+ const fn = async (_t) => "result";
115
+ await wrapped.transaction(fn);
116
+ (0, vitest_1.expect)(transactionSpy).toHaveBeenCalledWith(fn);
117
+ });
118
+ (0, vitest_1.it)("delegates addHook() to the original instance", () => {
119
+ const mock = createMockSequelize();
120
+ const wrapped = adapter.withTenantScope(mock, () => "tenant-1");
121
+ const hookFn = vitest_1.vi.fn();
122
+ wrapped.addHook("beforeFind", hookFn);
123
+ (0, vitest_1.expect)(mock.addHook).toHaveBeenCalledWith("beforeFind", hookFn);
124
+ });
125
+ });
126
+ });
127
+ (0, vitest_1.describe)("withTenantScope (convenience function)", () => {
128
+ (0, vitest_1.it)("returns a new wrapped object, not the original instance", () => {
129
+ const mock = createMockSequelize();
130
+ const pool = new MockPool();
131
+ const result = (0, sequelize_js_1.withTenantScope)(mock, () => "tenant-1", pool);
132
+ (0, vitest_1.expect)(result).not.toBe(mock);
133
+ });
134
+ (0, vitest_1.it)("wrapped query calls transaction() with set_config", async () => {
135
+ const mock = createMockSequelize();
136
+ const transactionSpy = vitest_1.vi.spyOn(mock, "transaction");
137
+ const pool = new MockPool();
138
+ const wrapped = (0, sequelize_js_1.withTenantScope)(mock, () => "fn-tenant", pool);
139
+ await wrapped.query("SELECT 1");
140
+ (0, vitest_1.expect)(transactionSpy).toHaveBeenCalledTimes(1);
141
+ (0, vitest_1.expect)(mock.queries[0].options).toMatchObject({ bind: ["fn-tenant"] });
142
+ });
143
+ (0, vitest_1.it)("throws when contextFn returns empty string", async () => {
144
+ const mock = createMockSequelize();
145
+ const pool = new MockPool();
146
+ const wrapped = (0, sequelize_js_1.withTenantScope)(mock, () => "", pool);
147
+ await (0, vitest_1.expect)(wrapped.query("SELECT 1")).rejects.toThrow("Tenant context is required for database operations.");
148
+ });
149
+ });
150
+ //# sourceMappingURL=sequelize.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequelize.test.js","sourceRoot":"","sources":["../../src/__tests__/sequelize.test.ts"],"names":[],"mappings":"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"}