neon-testing 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -5
- package/dist/index.d.ts +18 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -16
- package/dist/index.js.map +1 -1
- package/package.json +9 -10
package/README.md
CHANGED
|
@@ -11,6 +11,18 @@ Each test file runs against its own isolated PostgreSQL database (Neon branch),
|
|
|
11
11
|
|
|
12
12
|
**Testing against a clone of your production database lets you verify functionality that mocks cannot.**
|
|
13
13
|
|
|
14
|
+
## Table of Contents
|
|
15
|
+
|
|
16
|
+
- [Features](#features)
|
|
17
|
+
- [How it works](#how-it-works)
|
|
18
|
+
- [Quick start](#quick-start)
|
|
19
|
+
- [Drivers](#drivers)
|
|
20
|
+
- [Configuration](#configuration)
|
|
21
|
+
- [Continuous integration](#continuous-integration)
|
|
22
|
+
- [API Reference](#api-reference)
|
|
23
|
+
- [Contributing](#contributing)
|
|
24
|
+
- [Author](#author)
|
|
25
|
+
|
|
14
26
|
## Features
|
|
15
27
|
|
|
16
28
|
- 🔄 **Isolated test environments** - Each test file runs against its own Postgres database with your actual schema and constraints
|
|
@@ -171,20 +183,22 @@ Configure these in `makeNeonTesting()` and optionally override per test file whe
|
|
|
171
183
|
```ts
|
|
172
184
|
export interface NeonTestingOptions {
|
|
173
185
|
/**
|
|
174
|
-
* The Neon API key, this is used to create and teardown test branches
|
|
186
|
+
* The Neon API key, this is used to create and teardown test branches (required)
|
|
175
187
|
*
|
|
176
188
|
* https://neon.com/docs/manage/api-keys#creating-api-keys
|
|
177
189
|
*/
|
|
178
190
|
apiKey: string;
|
|
179
191
|
/**
|
|
180
|
-
* The Neon project ID to operate on
|
|
192
|
+
* The Neon project ID to operate on (required)
|
|
181
193
|
*
|
|
182
194
|
* https://console.neon.tech/app/projects
|
|
183
195
|
*/
|
|
184
196
|
projectId: string;
|
|
185
197
|
/**
|
|
186
|
-
* The parent branch ID for the new branch
|
|
187
|
-
*
|
|
198
|
+
* The parent branch ID for the new branch (default: undefined)
|
|
199
|
+
*
|
|
200
|
+
* If omitted or undefined, test branches will be created from the project's
|
|
201
|
+
* default branch.
|
|
188
202
|
*/
|
|
189
203
|
parentBranchId?: string;
|
|
190
204
|
/**
|
|
@@ -192,7 +206,7 @@ export interface NeonTestingOptions {
|
|
|
192
206
|
*/
|
|
193
207
|
schemaOnly?: boolean;
|
|
194
208
|
/**
|
|
195
|
-
* The type of connection to create (pooler
|
|
209
|
+
* The type of connection to create (default: "pooler")
|
|
196
210
|
*/
|
|
197
211
|
endpoint?: "pooler" | "direct";
|
|
198
212
|
/**
|
|
@@ -223,6 +237,17 @@ export interface NeonTestingOptions {
|
|
|
223
237
|
* https://neon.com/docs/guides/branch-expiration
|
|
224
238
|
*/
|
|
225
239
|
expiresIn?: number | null;
|
|
240
|
+
/**
|
|
241
|
+
* The database role to connect as (default: project owner role)
|
|
242
|
+
*
|
|
243
|
+
* The role must exist in the parent branch. Roles are automatically
|
|
244
|
+
* copied to test branches when branching.
|
|
245
|
+
*/
|
|
246
|
+
roleName?: string;
|
|
247
|
+
/**
|
|
248
|
+
* The database to connect to (default: project default database)
|
|
249
|
+
*/
|
|
250
|
+
databaseName?: string;
|
|
226
251
|
}
|
|
227
252
|
```
|
|
228
253
|
|
|
@@ -252,6 +277,41 @@ neonTesting({
|
|
|
252
277
|
});
|
|
253
278
|
```
|
|
254
279
|
|
|
280
|
+
### Role selection
|
|
281
|
+
|
|
282
|
+
You can connect as a specific database role using the `roleName` option. This is useful for testing Row-Level Security (RLS) policies with non-privileged roles.
|
|
283
|
+
|
|
284
|
+
```ts
|
|
285
|
+
// Connect as a specific role (must exist in parent branch)
|
|
286
|
+
neonTesting({
|
|
287
|
+
roleName: "test_user",
|
|
288
|
+
});
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**Setting up a role for RLS testing:**
|
|
292
|
+
|
|
293
|
+
1. Create a role in your parent branch without `BYPASSRLS`:
|
|
294
|
+
|
|
295
|
+
```sql
|
|
296
|
+
CREATE ROLE test_user WITH LOGIN PASSWORD 'your_password';
|
|
297
|
+
GRANT CONNECT ON DATABASE neondb TO test_user;
|
|
298
|
+
GRANT USAGE ON SCHEMA public TO test_user;
|
|
299
|
+
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO test_user;
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
2. The role is automatically copied to test branches when branching.
|
|
303
|
+
|
|
304
|
+
3. Use the role in your tests:
|
|
305
|
+
|
|
306
|
+
```ts
|
|
307
|
+
neonTesting({ roleName: "test_user" });
|
|
308
|
+
|
|
309
|
+
test("RLS policy enforces user isolation", async () => {
|
|
310
|
+
const sql = neon(process.env.DATABASE_URL!);
|
|
311
|
+
// Now connected as test_user - RLS policies are enforced
|
|
312
|
+
});
|
|
313
|
+
```
|
|
314
|
+
|
|
255
315
|
## Continuous integration
|
|
256
316
|
|
|
257
317
|
It's easy to run Neon integration tests in CI/CD pipelines:
|
package/dist/index.d.ts
CHANGED
|
@@ -4,20 +4,22 @@
|
|
|
4
4
|
import { type Branch } from "@neondatabase/api-client";
|
|
5
5
|
export interface NeonTestingOptions {
|
|
6
6
|
/**
|
|
7
|
-
* The Neon API key, this is used to create and teardown test branches
|
|
7
|
+
* The Neon API key, this is used to create and teardown test branches (required)
|
|
8
8
|
*
|
|
9
9
|
* https://neon.com/docs/manage/api-keys#creating-api-keys
|
|
10
10
|
*/
|
|
11
11
|
apiKey: string;
|
|
12
12
|
/**
|
|
13
|
-
* The Neon project ID to operate on
|
|
13
|
+
* The Neon project ID to operate on (required)
|
|
14
14
|
*
|
|
15
15
|
* https://console.neon.tech/app/projects
|
|
16
16
|
*/
|
|
17
17
|
projectId: string;
|
|
18
18
|
/**
|
|
19
|
-
* The parent branch ID for the new branch
|
|
20
|
-
*
|
|
19
|
+
* The parent branch ID for the new branch (default: undefined)
|
|
20
|
+
*
|
|
21
|
+
* If omitted or undefined, test branches will be created from the project's
|
|
22
|
+
* default branch.
|
|
21
23
|
*/
|
|
22
24
|
parentBranchId?: string;
|
|
23
25
|
/**
|
|
@@ -25,7 +27,7 @@ export interface NeonTestingOptions {
|
|
|
25
27
|
*/
|
|
26
28
|
schemaOnly?: boolean;
|
|
27
29
|
/**
|
|
28
|
-
* The type of connection to create (pooler
|
|
30
|
+
* The type of connection to create (default: "pooler")
|
|
29
31
|
*/
|
|
30
32
|
endpoint?: "pooler" | "direct";
|
|
31
33
|
/**
|
|
@@ -56,6 +58,17 @@ export interface NeonTestingOptions {
|
|
|
56
58
|
* https://neon.com/docs/guides/branch-expiration
|
|
57
59
|
*/
|
|
58
60
|
expiresIn?: number | null;
|
|
61
|
+
/**
|
|
62
|
+
* The database role to connect as (default: project owner role)
|
|
63
|
+
*
|
|
64
|
+
* The role must exist in the parent branch. Roles are automatically
|
|
65
|
+
* copied to test branches when branching.
|
|
66
|
+
*/
|
|
67
|
+
roleName?: string;
|
|
68
|
+
/**
|
|
69
|
+
* The database to connect to (default: project default database)
|
|
70
|
+
*/
|
|
71
|
+
databaseName?: string;
|
|
59
72
|
}
|
|
60
73
|
/** Options for overriding test database setup (excludes apiKey) */
|
|
61
74
|
export type NeonTestingOverrides = Omit<Partial<NeonTestingOptions>, "apiKey">;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAGL,KAAK,MAAM,EACZ,MAAM,0BAA0B,CAAC;AAuBlC,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,mEAAmE;AACnE,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAAC,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,eAAe,CAAC,cAAc,EAAE,kBAAkB;iBAyClD,oBAAoB;;;EA8JnC"}
|
package/dist/index.js
CHANGED
|
@@ -4,18 +4,6 @@
|
|
|
4
4
|
import { createApiClient, EndpointType, } from "@neondatabase/api-client";
|
|
5
5
|
import { afterAll, beforeAll } from "vitest";
|
|
6
6
|
import { neonConfig } from "@neondatabase/serverless";
|
|
7
|
-
/**
|
|
8
|
-
* Creates a PostgreSQL connection URI from connection parameters
|
|
9
|
-
*
|
|
10
|
-
* @param connectionParameters - The connection parameters object
|
|
11
|
-
* @param type - The type of connection to create (pooler or direct)
|
|
12
|
-
* @returns A PostgreSQL connection URI string
|
|
13
|
-
*/
|
|
14
|
-
function createConnectionUri(connectionParameters, type) {
|
|
15
|
-
const { role, password, host, pooler_host, database } = connectionParameters.connection_parameters;
|
|
16
|
-
const hostname = type === "pooler" ? pooler_host : host;
|
|
17
|
-
return `postgresql://${role}:${password}@${hostname}/${database}?sslmode=require`;
|
|
18
|
-
}
|
|
19
7
|
/**
|
|
20
8
|
* Validates the expiresIn option
|
|
21
9
|
*/
|
|
@@ -142,11 +130,38 @@ export function makeNeonTesting(factoryOptions) {
|
|
|
142
130
|
},
|
|
143
131
|
});
|
|
144
132
|
branch = data.branch;
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
133
|
+
// Determine role and database (handles multi-role/database projects)
|
|
134
|
+
const targetRole = options.roleName ??
|
|
135
|
+
data.roles?.find((r) => r.name === "neondb_owner")?.name ??
|
|
136
|
+
data.roles?.[0]?.name;
|
|
137
|
+
const targetDatabase = options.databaseName ??
|
|
138
|
+
data.databases?.find((d) => d.name === "neondb")?.name ??
|
|
139
|
+
data.databases?.[0]?.name;
|
|
140
|
+
if (!targetRole) {
|
|
141
|
+
throw new Error("No role available in branch");
|
|
148
142
|
}
|
|
149
|
-
|
|
143
|
+
if (!targetDatabase) {
|
|
144
|
+
throw new Error("No database available in branch");
|
|
145
|
+
}
|
|
146
|
+
// Validate specified role exists
|
|
147
|
+
if (options.roleName &&
|
|
148
|
+
!data.roles?.some((r) => r.name === options.roleName)) {
|
|
149
|
+
throw new Error(`Role not found: ${options.roleName}`);
|
|
150
|
+
}
|
|
151
|
+
// Validate specified database exists
|
|
152
|
+
if (options.databaseName &&
|
|
153
|
+
!data.databases?.some((d) => d.name === options.databaseName)) {
|
|
154
|
+
throw new Error(`Database not found: ${options.databaseName}`);
|
|
155
|
+
}
|
|
156
|
+
// Use getConnectionUri API (works for all cases, including multi-role projects)
|
|
157
|
+
const { data: uriData } = await apiClient.getConnectionUri({
|
|
158
|
+
projectId: options.projectId,
|
|
159
|
+
branch_id: branch.id,
|
|
160
|
+
role_name: targetRole,
|
|
161
|
+
database_name: targetDatabase,
|
|
162
|
+
pooled: options.endpoint !== "direct",
|
|
163
|
+
});
|
|
164
|
+
return uriData.uri;
|
|
150
165
|
}
|
|
151
166
|
/**
|
|
152
167
|
* Delete the test branch
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,eAAe,EACf,YAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "neon-testing",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "A Vitest utility for seamless integration tests with Neon Postgres",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"neon",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"postversion": "git push --follow-tags"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@neondatabase/api-client": "^2.
|
|
51
|
+
"@neondatabase/api-client": "^2.6.0"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
54
|
"vite": "^7",
|
|
@@ -56,17 +56,16 @@
|
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@neondatabase/serverless": "^1.0.2",
|
|
59
|
-
"@types/pg": "^8.
|
|
59
|
+
"@types/pg": "^8.16.0",
|
|
60
60
|
"dotenv": "^17.2.3",
|
|
61
|
-
"drizzle-orm": "^0.
|
|
62
|
-
"pg": "^8.
|
|
63
|
-
"postgres": "^3.4.
|
|
64
|
-
"prettier": "^3.
|
|
61
|
+
"drizzle-orm": "^0.45.1",
|
|
62
|
+
"pg": "^8.17.1",
|
|
63
|
+
"postgres": "^3.4.8",
|
|
64
|
+
"prettier": "^3.8.0",
|
|
65
65
|
"tiny-invariant": "^1.3.3",
|
|
66
66
|
"typescript": "^5.9.3",
|
|
67
|
-
"vite": "^7.
|
|
68
|
-
"
|
|
69
|
-
"vitest": "^4.0.14"
|
|
67
|
+
"vite": "^7.3.1",
|
|
68
|
+
"vitest": "^4.0.17"
|
|
70
69
|
},
|
|
71
70
|
"browser": {
|
|
72
71
|
"./dist/vite-plugin.js": "./dist/browser-empty.js"
|