neon-testing 2.2.0 → 2.2.1-beta.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 +121 -31
- package/dist/examples/branch-expiration.test.d.ts +2 -0
- package/dist/examples/branch-expiration.test.d.ts.map +1 -0
- package/dist/examples/branch-expiration.test.js +60 -0
- package/dist/examples/branch-expiration.test.js.map +1 -0
- package/dist/examples/drivers/http-neon-drizzle.test.d.ts +2 -0
- package/dist/examples/drivers/http-neon-drizzle.test.d.ts.map +1 -0
- package/dist/examples/drivers/http-neon-drizzle.test.js +80 -0
- package/dist/examples/drivers/http-neon-drizzle.test.js.map +1 -0
- package/dist/examples/drivers/http-neon.test.d.ts +2 -0
- package/dist/examples/drivers/http-neon.test.d.ts.map +1 -0
- package/dist/examples/drivers/http-neon.test.js +71 -0
- package/dist/examples/drivers/http-neon.test.js.map +1 -0
- package/dist/examples/drivers/tcp-pg-drizzle.test.d.ts +2 -0
- package/dist/examples/drivers/tcp-pg-drizzle.test.d.ts.map +1 -0
- package/dist/examples/drivers/tcp-pg-drizzle.test.js +90 -0
- package/dist/examples/drivers/tcp-pg-drizzle.test.js.map +1 -0
- package/dist/examples/drivers/tcp-pg.test.d.ts +2 -0
- package/dist/examples/drivers/tcp-pg.test.d.ts.map +1 -0
- package/dist/examples/drivers/tcp-pg.test.js +76 -0
- package/dist/examples/drivers/tcp-pg.test.js.map +1 -0
- package/dist/examples/drivers/tcp-postgres-drizzle.test.d.ts +2 -0
- package/dist/examples/drivers/tcp-postgres-drizzle.test.d.ts.map +1 -0
- package/dist/examples/drivers/tcp-postgres-drizzle.test.js +77 -0
- package/dist/examples/drivers/tcp-postgres-drizzle.test.js.map +1 -0
- package/dist/examples/drivers/tcp-postgres.test.d.ts +2 -0
- package/dist/examples/drivers/tcp-postgres.test.d.ts.map +1 -0
- package/dist/examples/drivers/tcp-postgres.test.js +69 -0
- package/dist/examples/drivers/tcp-postgres.test.js.map +1 -0
- package/dist/examples/drivers/ws-neon-drizzle.test.d.ts +2 -0
- package/dist/examples/drivers/ws-neon-drizzle.test.d.ts.map +1 -0
- package/dist/examples/drivers/ws-neon-drizzle.test.js +121 -0
- package/dist/examples/drivers/ws-neon-drizzle.test.js.map +1 -0
- package/dist/examples/drivers/ws-neon.test.d.ts +2 -0
- package/dist/examples/drivers/ws-neon.test.d.ts.map +1 -0
- package/dist/examples/drivers/ws-neon.test.js +97 -0
- package/dist/examples/drivers/ws-neon.test.js.map +1 -0
- package/dist/examples/isolated.test.d.ts +2 -0
- package/dist/examples/isolated.test.d.ts.map +1 -0
- package/dist/examples/isolated.test.js +114 -0
- package/dist/examples/isolated.test.js.map +1 -0
- package/dist/examples/minimal.test.d.ts +2 -0
- package/dist/examples/minimal.test.d.ts.map +1 -0
- package/dist/examples/minimal.test.js +19 -0
- package/dist/examples/minimal.test.js.map +1 -0
- package/dist/examples/neon-testing.d.ts +6 -0
- package/dist/examples/neon-testing.d.ts.map +1 -0
- package/dist/examples/neon-testing.js +8 -0
- package/dist/examples/neon-testing.js.map +1 -0
- package/dist/examples/options-validation.test.d.ts +2 -0
- package/dist/examples/options-validation.test.d.ts.map +1 -0
- package/dist/examples/options-validation.test.js +99 -0
- package/dist/examples/options-validation.test.js.map +1 -0
- package/dist/examples/recommended.test.d.ts +2 -0
- package/dist/examples/recommended.test.d.ts.map +1 -0
- package/dist/examples/recommended.test.js +17 -0
- package/dist/examples/recommended.test.js.map +1 -0
- package/dist/index.d.ts +45 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +85 -22
- package/dist/index.js.map +1 -1
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +16 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +6 -4
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pg (node-postgres)
|
|
3
|
+
*
|
|
4
|
+
* Protocol: | TCP
|
|
5
|
+
* Driver: | pg
|
|
6
|
+
* ORM: | -
|
|
7
|
+
* Interactive transactions | ✅
|
|
8
|
+
* Automatic connection lifecycle management | ❌
|
|
9
|
+
*
|
|
10
|
+
* https://www.npmjs.com/package/pg
|
|
11
|
+
*/
|
|
12
|
+
import { describe, expect, test } from "vitest";
|
|
13
|
+
import { neonTesting } from "../neon-testing";
|
|
14
|
+
import { Pool } from "pg";
|
|
15
|
+
const endpoints = ["pooler", "direct"];
|
|
16
|
+
describe.each(endpoints)("node-postgres (%s)", (endpoint) => {
|
|
17
|
+
neonTesting({ endpoint });
|
|
18
|
+
test("create table", async () => {
|
|
19
|
+
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
|
20
|
+
await pool.query(`
|
|
21
|
+
CREATE TABLE users (
|
|
22
|
+
id SERIAL PRIMARY KEY,
|
|
23
|
+
name TEXT NOT NULL UNIQUE
|
|
24
|
+
)
|
|
25
|
+
`);
|
|
26
|
+
const newUser = await pool.query(`
|
|
27
|
+
INSERT INTO users (name)
|
|
28
|
+
VALUES ('Ellen Ripley')
|
|
29
|
+
RETURNING *
|
|
30
|
+
`);
|
|
31
|
+
expect(newUser.rows[0]).toStrictEqual({ id: 1, name: "Ellen Ripley" });
|
|
32
|
+
const users = await pool.query(`SELECT * FROM users`);
|
|
33
|
+
expect(users.rows).toStrictEqual([{ id: 1, name: "Ellen Ripley" }]);
|
|
34
|
+
// 👎 Have to manually end the connection unless disabling `deleteBranch`
|
|
35
|
+
await pool.end();
|
|
36
|
+
});
|
|
37
|
+
test("tests are not isolated within a test file", async () => {
|
|
38
|
+
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
|
39
|
+
const newUser = await pool.query(`
|
|
40
|
+
INSERT INTO users (name)
|
|
41
|
+
VALUES ('Rebecca Jorden')
|
|
42
|
+
RETURNING *
|
|
43
|
+
`);
|
|
44
|
+
expect(newUser.rows).toStrictEqual([{ id: 2, name: "Rebecca Jorden" }]);
|
|
45
|
+
const users = await pool.query(`SELECT * FROM users`);
|
|
46
|
+
expect(users.rows).toStrictEqual([
|
|
47
|
+
// Ellen Ripley is already in the table from the previous test
|
|
48
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
49
|
+
{ id: 2, name: "Rebecca Jorden" },
|
|
50
|
+
]);
|
|
51
|
+
// 👎 Have to manually end the connection unless disabling `deleteBranch`
|
|
52
|
+
await pool.end();
|
|
53
|
+
});
|
|
54
|
+
test("interactive transactions are supported", async () => {
|
|
55
|
+
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
|
|
56
|
+
try {
|
|
57
|
+
await pool.query("BEGIN");
|
|
58
|
+
await pool.query(`INSERT INTO users (name) VALUES ('Private Vasquez')`);
|
|
59
|
+
// Duplicate unique constraint error - will roll back the transaction
|
|
60
|
+
await pool.query(`INSERT INTO users (name) VALUES ('Private Vasquez')`);
|
|
61
|
+
await pool.query("COMMIT");
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
await pool.query("ROLLBACK");
|
|
65
|
+
}
|
|
66
|
+
const users = await pool.query(`SELECT * FROM users`);
|
|
67
|
+
expect(users.rows).toStrictEqual([
|
|
68
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
69
|
+
{ id: 2, name: "Rebecca Jorden" },
|
|
70
|
+
// Private Vasquez is not inserted because of the transaction rollback
|
|
71
|
+
]);
|
|
72
|
+
// 👎 Have to manually end the connection unless disabling `deleteBranch`
|
|
73
|
+
await pool.end();
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=tcp-pg.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tcp-pg.test.js","sourceRoot":"","sources":["../../../examples/drivers/tcp-pg.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tcp-postgres-drizzle.test.d.ts","sourceRoot":"","sources":["../../../examples/drivers/tcp-postgres-drizzle.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* postgres (Postgres.js)
|
|
3
|
+
*
|
|
4
|
+
* Protocol: | TCP
|
|
5
|
+
* Driver: | postgres
|
|
6
|
+
* ORM: | drizzle-orm
|
|
7
|
+
* Interactive transactions | ✅
|
|
8
|
+
* Automatic connection lifecycle management | ✅
|
|
9
|
+
*
|
|
10
|
+
* https://www.npmjs.com/package/postgres
|
|
11
|
+
* https://www.npmjs.com/package/drizzle-orm
|
|
12
|
+
* https://orm.drizzle.team/docs/get-started-postgresql#postgresjs
|
|
13
|
+
*/
|
|
14
|
+
import { describe, expect, test } from "vitest";
|
|
15
|
+
import { neonTesting } from "../neon-testing";
|
|
16
|
+
import postgres from "postgres";
|
|
17
|
+
import { drizzle } from "drizzle-orm/postgres-js";
|
|
18
|
+
import { lazySingleton } from "neon-testing/utils";
|
|
19
|
+
const cases = [
|
|
20
|
+
["pooler", (url) => drizzle(url)],
|
|
21
|
+
["direct", (url) => drizzle(url)],
|
|
22
|
+
["pooler", (url) => drizzle({ client: postgres(url) })],
|
|
23
|
+
["direct", (url) => drizzle({ client: postgres(url) })],
|
|
24
|
+
];
|
|
25
|
+
describe.each(cases)("Drizzle Postgres.js (%s)", (endpoint, makeDb) => {
|
|
26
|
+
neonTesting({ endpoint });
|
|
27
|
+
const db = lazySingleton(() => makeDb(process.env.DATABASE_URL));
|
|
28
|
+
test("create table", async () => {
|
|
29
|
+
await db().execute(`
|
|
30
|
+
CREATE TABLE users (
|
|
31
|
+
id SERIAL PRIMARY KEY,
|
|
32
|
+
name TEXT NOT NULL UNIQUE
|
|
33
|
+
)
|
|
34
|
+
`);
|
|
35
|
+
const [newUser] = await db().execute(`
|
|
36
|
+
INSERT INTO users (name)
|
|
37
|
+
VALUES ('Ellen Ripley')
|
|
38
|
+
RETURNING *
|
|
39
|
+
`);
|
|
40
|
+
expect(newUser).toStrictEqual({ id: 1, name: "Ellen Ripley" });
|
|
41
|
+
const users = await db().execute(`SELECT * FROM users`);
|
|
42
|
+
expect([...users]).toStrictEqual([{ id: 1, name: "Ellen Ripley" }]);
|
|
43
|
+
});
|
|
44
|
+
test("tests are not isolated within a test file", async () => {
|
|
45
|
+
const newUser = await db().execute(`
|
|
46
|
+
INSERT INTO users (name)
|
|
47
|
+
VALUES ('Rebecca Jorden')
|
|
48
|
+
RETURNING *
|
|
49
|
+
`);
|
|
50
|
+
expect([...newUser]).toStrictEqual([{ id: 2, name: "Rebecca Jorden" }]);
|
|
51
|
+
const users = await db().execute(`SELECT * FROM users`);
|
|
52
|
+
expect([...users]).toStrictEqual([
|
|
53
|
+
// Ellen Ripley is already in the table from the previous test
|
|
54
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
55
|
+
{ id: 2, name: "Rebecca Jorden" },
|
|
56
|
+
]);
|
|
57
|
+
});
|
|
58
|
+
test("interactive transactions are supported", async () => {
|
|
59
|
+
try {
|
|
60
|
+
await db().execute("BEGIN");
|
|
61
|
+
await db().execute(`INSERT INTO users (name) VALUES ('Private Vasquez')`);
|
|
62
|
+
// Duplicate unique constraint error - will roll back the transaction
|
|
63
|
+
await db().execute(`INSERT INTO users (name) VALUES ('Private Vasquez')`);
|
|
64
|
+
await db().execute("COMMIT");
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
await db().execute("ROLLBACK");
|
|
68
|
+
}
|
|
69
|
+
const users = await db().execute(`SELECT * FROM users`);
|
|
70
|
+
expect([...users]).toStrictEqual([
|
|
71
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
72
|
+
{ id: 2, name: "Rebecca Jorden" },
|
|
73
|
+
// Private Vasquez is not inserted because of the transaction rollback
|
|
74
|
+
]);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=tcp-postgres-drizzle.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tcp-postgres-drizzle.test.js","sourceRoot":"","sources":["../../../examples/drivers/tcp-postgres-drizzle.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tcp-postgres.test.d.ts","sourceRoot":"","sources":["../../../examples/drivers/tcp-postgres.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* postgres (Postgres.js)
|
|
3
|
+
*
|
|
4
|
+
* Protocol: | TCP
|
|
5
|
+
* Driver: | postgres
|
|
6
|
+
* ORM: | -
|
|
7
|
+
* Interactive transactions | ✅
|
|
8
|
+
* Automatic connection lifecycle management | ✅
|
|
9
|
+
*
|
|
10
|
+
* https://www.npmjs.com/package/postgres
|
|
11
|
+
*/
|
|
12
|
+
import { describe, expect, test } from "vitest";
|
|
13
|
+
import { neonTesting } from "../neon-testing";
|
|
14
|
+
import postgres from "postgres";
|
|
15
|
+
import { lazySingleton } from "neon-testing/utils";
|
|
16
|
+
const endpoints = ["pooler", "direct"];
|
|
17
|
+
describe.each(endpoints)("Postgres.js (%s)", (endpoint) => {
|
|
18
|
+
neonTesting({ endpoint });
|
|
19
|
+
const sql = lazySingleton(() => postgres(process.env.DATABASE_URL));
|
|
20
|
+
test("create table", async () => {
|
|
21
|
+
await sql() `
|
|
22
|
+
CREATE TABLE users (
|
|
23
|
+
id SERIAL PRIMARY KEY,
|
|
24
|
+
name TEXT NOT NULL UNIQUE
|
|
25
|
+
)
|
|
26
|
+
`;
|
|
27
|
+
const newUser = await sql() `
|
|
28
|
+
INSERT INTO users (name)
|
|
29
|
+
VALUES ('Ellen Ripley')
|
|
30
|
+
RETURNING *
|
|
31
|
+
`;
|
|
32
|
+
expect([...newUser]).toStrictEqual([{ id: 1, name: "Ellen Ripley" }]);
|
|
33
|
+
const users = await sql() `SELECT * FROM users`;
|
|
34
|
+
expect([...users]).toStrictEqual([{ id: 1, name: "Ellen Ripley" }]);
|
|
35
|
+
});
|
|
36
|
+
test("tests are not isolated within a test file", async () => {
|
|
37
|
+
const newUser = await sql() `
|
|
38
|
+
INSERT INTO users (name)
|
|
39
|
+
VALUES ('Rebecca Jorden')
|
|
40
|
+
RETURNING *
|
|
41
|
+
`;
|
|
42
|
+
expect([...newUser]).toStrictEqual([{ id: 2, name: "Rebecca Jorden" }]);
|
|
43
|
+
const users = await sql() `SELECT * FROM users`;
|
|
44
|
+
expect([...users]).toStrictEqual([
|
|
45
|
+
// Ellen Ripley is already in the table from the previous test
|
|
46
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
47
|
+
{ id: 2, name: "Rebecca Jorden" },
|
|
48
|
+
]);
|
|
49
|
+
});
|
|
50
|
+
test("interactive transactions are supported", async () => {
|
|
51
|
+
try {
|
|
52
|
+
await sql() `BEGIN`;
|
|
53
|
+
await sql() `INSERT INTO users (name) VALUES ('Private Vasquez')`;
|
|
54
|
+
// Duplicate unique constraint error - will roll back the transaction
|
|
55
|
+
await sql() `INSERT INTO users (name) VALUES ('Private Vasquez')`;
|
|
56
|
+
await sql() `COMMIT`;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
await sql() `ROLLBACK`;
|
|
60
|
+
}
|
|
61
|
+
const users = await sql() `SELECT * FROM users`;
|
|
62
|
+
expect([...users]).toStrictEqual([
|
|
63
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
64
|
+
{ id: 2, name: "Rebecca Jorden" },
|
|
65
|
+
// Private Vasquez is not inserted because of the transaction rollback
|
|
66
|
+
]);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=tcp-postgres.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tcp-postgres.test.js","sourceRoot":"","sources":["../../../examples/drivers/tcp-postgres.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAEhD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE;IACxD,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAE1B,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,CAAC,CAAC;IAErE,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,GAAG,EAAE,CAAA;;;;;KAKV,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,GAAG,EAAE,CAAA;;;;KAI1B,CAAC;QACF,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QAEtE,MAAM,KAAK,GAAG,MAAM,GAAG,EAAE,CAAA,qBAAqB,CAAC;QAC/C,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,OAAO,GAAG,MAAM,GAAG,EAAE,CAAA;;;;KAI1B,CAAC;QACF,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAExE,MAAM,KAAK,GAAG,MAAM,GAAG,EAAE,CAAA,qBAAqB,CAAC;QAC/C,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC;YAC/B,8DAA8D;YAC9D,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;YAC/B,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;SAClC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,IAAI,CAAC;YACH,MAAM,GAAG,EAAE,CAAA,OAAO,CAAC;YACnB,MAAM,GAAG,EAAE,CAAA,qDAAqD,CAAC;YACjE,qEAAqE;YACrE,MAAM,GAAG,EAAE,CAAA,qDAAqD,CAAC;YACjE,MAAM,GAAG,EAAE,CAAA,QAAQ,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,EAAE,CAAA,UAAU,CAAC;QACxB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,GAAG,EAAE,CAAA,qBAAqB,CAAC;QAC/C,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC;YAC/B,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;YAC/B,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;YACjC,sEAAsE;SACvE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-neon-drizzle.test.d.ts","sourceRoot":"","sources":["../../../examples/drivers/ws-neon-drizzle.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @neondatabase/serverless
|
|
3
|
+
*
|
|
4
|
+
* Protocol: | WebSocket
|
|
5
|
+
* Driver: | @neondatabase/serverless
|
|
6
|
+
* ORM: | drizzle-orm
|
|
7
|
+
* Interactive transactions | ✅
|
|
8
|
+
* Automatic connection lifecycle management | ⚠️ with `autoCloseWebSockets` flag
|
|
9
|
+
*
|
|
10
|
+
* https://www.npmjs.com/package/@neondatabase/serverless
|
|
11
|
+
* https://www.npmjs.com/package/drizzle-orm
|
|
12
|
+
* https://orm.drizzle.team/docs/get-started/neon-new
|
|
13
|
+
* https://orm.drizzle.team/docs/connect-neon
|
|
14
|
+
*/
|
|
15
|
+
import { describe, expect, test } from "vitest";
|
|
16
|
+
import { neonTesting } from "../neon-testing";
|
|
17
|
+
import { Pool } from "@neondatabase/serverless";
|
|
18
|
+
import { drizzle } from "drizzle-orm/neon-serverless";
|
|
19
|
+
const cases = [
|
|
20
|
+
[
|
|
21
|
+
"pooler",
|
|
22
|
+
(url) => {
|
|
23
|
+
const db = drizzle(url);
|
|
24
|
+
return {
|
|
25
|
+
sql: (query) => db.execute(query),
|
|
26
|
+
end: () => db.$client.end(),
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
[
|
|
31
|
+
"direct",
|
|
32
|
+
(url) => {
|
|
33
|
+
const db = drizzle(url);
|
|
34
|
+
return {
|
|
35
|
+
sql: (query) => db.execute(query),
|
|
36
|
+
end: () => db.$client.end(),
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
[
|
|
41
|
+
"pooler",
|
|
42
|
+
(url) => {
|
|
43
|
+
const db = drizzle({ client: new Pool({ connectionString: url }) });
|
|
44
|
+
return {
|
|
45
|
+
sql: (query) => db.execute(query),
|
|
46
|
+
end: () => db.$client.end(),
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
[
|
|
51
|
+
"direct",
|
|
52
|
+
(url) => {
|
|
53
|
+
const db = drizzle({ client: new Pool({ connectionString: url }) });
|
|
54
|
+
return {
|
|
55
|
+
sql: (query) => db.execute(query),
|
|
56
|
+
end: () => db.$client.end(),
|
|
57
|
+
};
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
];
|
|
61
|
+
describe.each(cases)("Drizzle Neon WebSocket (%s)", (endpoint, makeDb) => {
|
|
62
|
+
neonTesting({ endpoint, autoCloseWebSockets: true });
|
|
63
|
+
test("create table", async () => {
|
|
64
|
+
const { end, sql } = makeDb(process.env.DATABASE_URL);
|
|
65
|
+
await sql(`
|
|
66
|
+
CREATE TABLE users (
|
|
67
|
+
id SERIAL PRIMARY KEY,
|
|
68
|
+
name TEXT NOT NULL UNIQUE
|
|
69
|
+
)
|
|
70
|
+
`);
|
|
71
|
+
const newUser = await sql(`
|
|
72
|
+
INSERT INTO users (name)
|
|
73
|
+
VALUES ('Ellen Ripley')
|
|
74
|
+
RETURNING *
|
|
75
|
+
`);
|
|
76
|
+
expect(newUser.rows[0]).toStrictEqual({ id: 1, name: "Ellen Ripley" });
|
|
77
|
+
const users = await sql(`SELECT * FROM users`);
|
|
78
|
+
expect(users.rows).toStrictEqual([{ id: 1, name: "Ellen Ripley" }]);
|
|
79
|
+
// 👎 Have to manually end the connection unless disabling `deleteBranch`
|
|
80
|
+
// await end();
|
|
81
|
+
});
|
|
82
|
+
test("tests are not isolated within a test file", async () => {
|
|
83
|
+
const { end, sql } = makeDb(process.env.DATABASE_URL);
|
|
84
|
+
const newUser = await sql(`
|
|
85
|
+
INSERT INTO users (name)
|
|
86
|
+
VALUES ('Rebecca Jorden')
|
|
87
|
+
RETURNING *
|
|
88
|
+
`);
|
|
89
|
+
expect(newUser.rows).toStrictEqual([{ id: 2, name: "Rebecca Jorden" }]);
|
|
90
|
+
const users = await sql(`SELECT * FROM users`);
|
|
91
|
+
expect(users.rows).toStrictEqual([
|
|
92
|
+
// Ellen Ripley is already in the table from the previous test
|
|
93
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
94
|
+
{ id: 2, name: "Rebecca Jorden" },
|
|
95
|
+
]);
|
|
96
|
+
// 👎 Have to manually end the connection unless disabling `deleteBranch`
|
|
97
|
+
// await end();
|
|
98
|
+
});
|
|
99
|
+
test("interactive transactions are supported", async () => {
|
|
100
|
+
const { end, sql } = makeDb(process.env.DATABASE_URL);
|
|
101
|
+
try {
|
|
102
|
+
await sql("BEGIN");
|
|
103
|
+
await sql(`INSERT INTO users (name) VALUES ('Private Vasquez')`);
|
|
104
|
+
// Duplicate unique constraint error - will roll back the transaction
|
|
105
|
+
await sql(`INSERT INTO users (name) VALUES ('Private Vasquez')`);
|
|
106
|
+
await sql("COMMIT");
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
await sql("ROLLBACK");
|
|
110
|
+
}
|
|
111
|
+
const users = await sql(`SELECT * FROM users`);
|
|
112
|
+
expect(users.rows).toStrictEqual([
|
|
113
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
114
|
+
{ id: 2, name: "Rebecca Jorden" },
|
|
115
|
+
// Private Vasquez is not inserted because of the transaction rollback
|
|
116
|
+
]);
|
|
117
|
+
// 👎 Have to manually end the connection unless disabling `deleteBranch`
|
|
118
|
+
// await end();
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=ws-neon-drizzle.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-neon-drizzle.test.js","sourceRoot":"","sources":["../../../examples/drivers/ws-neon-drizzle.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-neon.test.d.ts","sourceRoot":"","sources":["../../../examples/drivers/ws-neon.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @neondatabase/serverless
|
|
3
|
+
*
|
|
4
|
+
* Protocol: | WebSocket
|
|
5
|
+
* Driver: | @neondatabase/serverless
|
|
6
|
+
* ORM: | -
|
|
7
|
+
* Interactive transactions | ✅
|
|
8
|
+
* Automatic connection lifecycle management | ⚠️ with `autoCloseWebSockets` flag
|
|
9
|
+
*
|
|
10
|
+
* https://www.npmjs.com/package/@neondatabase/serverless
|
|
11
|
+
*/
|
|
12
|
+
import { describe, expect, test } from "vitest";
|
|
13
|
+
import { neonTesting } from "../neon-testing";
|
|
14
|
+
import { Pool } from "@neondatabase/serverless";
|
|
15
|
+
const cases = [
|
|
16
|
+
[
|
|
17
|
+
"pooler",
|
|
18
|
+
(url) => {
|
|
19
|
+
const pool = new Pool({ connectionString: url });
|
|
20
|
+
return {
|
|
21
|
+
sql: (query) => pool.query(query),
|
|
22
|
+
end: () => pool.end(),
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
[
|
|
27
|
+
"direct",
|
|
28
|
+
(url) => {
|
|
29
|
+
const pool = new Pool({ connectionString: url });
|
|
30
|
+
return {
|
|
31
|
+
sql: (query) => pool.query(query),
|
|
32
|
+
end: () => pool.end(),
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
];
|
|
37
|
+
describe.each(cases)("Neon WebSocket (%s)", (endpoint, makeDb) => {
|
|
38
|
+
neonTesting({ endpoint, autoCloseWebSockets: true });
|
|
39
|
+
test("create table", async () => {
|
|
40
|
+
const { end, sql } = makeDb(process.env.DATABASE_URL);
|
|
41
|
+
await sql(`
|
|
42
|
+
CREATE TABLE users (
|
|
43
|
+
id SERIAL PRIMARY KEY,
|
|
44
|
+
name TEXT NOT NULL UNIQUE
|
|
45
|
+
)
|
|
46
|
+
`);
|
|
47
|
+
const newUser = await sql(`
|
|
48
|
+
INSERT INTO users (name)
|
|
49
|
+
VALUES ('Ellen Ripley')
|
|
50
|
+
RETURNING *
|
|
51
|
+
`);
|
|
52
|
+
expect(newUser.rows[0]).toStrictEqual({ id: 1, name: "Ellen Ripley" });
|
|
53
|
+
const users = await sql(`SELECT * FROM users`);
|
|
54
|
+
expect(users.rows).toStrictEqual([{ id: 1, name: "Ellen Ripley" }]);
|
|
55
|
+
// 👎 Have to manually end the connection unless disabling `deleteBranch`
|
|
56
|
+
// await end();
|
|
57
|
+
});
|
|
58
|
+
test("tests are not isolated within a test file", async () => {
|
|
59
|
+
const { end, sql } = makeDb(process.env.DATABASE_URL);
|
|
60
|
+
const newUser = await sql(`
|
|
61
|
+
INSERT INTO users (name)
|
|
62
|
+
VALUES ('Rebecca Jorden')
|
|
63
|
+
RETURNING *
|
|
64
|
+
`);
|
|
65
|
+
expect(newUser.rows).toStrictEqual([{ id: 2, name: "Rebecca Jorden" }]);
|
|
66
|
+
const users = await sql(`SELECT * FROM users`);
|
|
67
|
+
expect(users.rows).toStrictEqual([
|
|
68
|
+
// Ellen Ripley is already in the table from the previous test
|
|
69
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
70
|
+
{ id: 2, name: "Rebecca Jorden" },
|
|
71
|
+
]);
|
|
72
|
+
// 👎 Have to manually end the connection unless disabling `deleteBranch`
|
|
73
|
+
// await end();
|
|
74
|
+
});
|
|
75
|
+
test("interactive transactions are supported", async () => {
|
|
76
|
+
const { end, sql } = makeDb(process.env.DATABASE_URL);
|
|
77
|
+
try {
|
|
78
|
+
await sql("BEGIN");
|
|
79
|
+
await sql(`INSERT INTO users (name) VALUES ('Private Vasquez')`);
|
|
80
|
+
// Duplicate unique constraint error - will roll back the transaction
|
|
81
|
+
await sql(`INSERT INTO users (name) VALUES ('Private Vasquez')`);
|
|
82
|
+
await sql("COMMIT");
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
await sql("ROLLBACK");
|
|
86
|
+
}
|
|
87
|
+
const users = await sql(`SELECT * FROM users`);
|
|
88
|
+
expect(users.rows).toStrictEqual([
|
|
89
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
90
|
+
{ id: 2, name: "Rebecca Jorden" },
|
|
91
|
+
// Private Vasquez is not inserted because of the transaction rollback
|
|
92
|
+
]);
|
|
93
|
+
// 👎 Have to manually end the connection unless disabling `deleteBranch`
|
|
94
|
+
// await end();
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=ws-neon.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-neon.test.js","sourceRoot":"","sources":["../../../examples/drivers/ws-neon.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEhD,MAAM,KAAK,GAAG;IACZ;QACE,QAAQ;QACR,CAAC,GAAW,EAAE,EAAE;YACd,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;YACjD,OAAO;gBACL,GAAG,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBACzC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;QACJ,CAAC;KACF;IACD;QACE,QAAQ;QACR,CAAC,GAAW,EAAE,EAAE;YACd,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;YACjD,OAAO;gBACL,GAAG,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBACzC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;QACJ,CAAC;KACF;CACO,CAAC;AAEX,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;IAC/D,WAAW,CAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;IAErD,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,CAAC;QAEvD,MAAM,GAAG,CAAC;;;;;KAKT,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC;;;;KAIzB,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAEvE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QAEpE,yEAAyE;QACzE,eAAe;IACjB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC;;;;KAIzB,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAExE,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;YAC/B,8DAA8D;YAC9D,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;YAC/B,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;SAClC,CAAC,CAAC;QAEH,yEAAyE;QACzE,eAAe;IACjB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,CAAC;QAEvD,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,MAAM,GAAG,CAAC,qDAAqD,CAAC,CAAC;YACjE,qEAAqE;YACrE,MAAM,GAAG,CAAC,qDAAqD,CAAC,CAAC;YACjE,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;YAC/B,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;YAC/B,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;YACjC,sEAAsE;SACvE,CAAC,CAAC;QAEH,yEAAyE;QACzE,eAAe;IACjB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolated.test.d.ts","sourceRoot":"","sources":["../../examples/isolated.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* To isolate tests within a file, reset the Neon branch before each test
|
|
3
|
+
*
|
|
4
|
+
* This file contains a few ways to isolate tests within a file
|
|
5
|
+
*/
|
|
6
|
+
import { describe, beforeEach, expect, test } from "vitest";
|
|
7
|
+
import { neonTesting } from "./neon-testing";
|
|
8
|
+
import { neon } from "@neondatabase/serverless";
|
|
9
|
+
neonTesting();
|
|
10
|
+
/**
|
|
11
|
+
* Drop the Postgres schema before each test
|
|
12
|
+
*
|
|
13
|
+
* When you drop the schema you have to re-apply the database migrations/schema
|
|
14
|
+
* before each test
|
|
15
|
+
*/
|
|
16
|
+
describe("isolate tests by dropping schema", () => {
|
|
17
|
+
beforeEach(async () => {
|
|
18
|
+
const sql = neon(process.env.DATABASE_URL);
|
|
19
|
+
await sql `DROP SCHEMA IF EXISTS public CASCADE`;
|
|
20
|
+
await sql `CREATE SCHEMA public`;
|
|
21
|
+
await sql `CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT)`;
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* This test is run twice and would fail if the database is shared between
|
|
25
|
+
* tests
|
|
26
|
+
*/
|
|
27
|
+
test.each([0, 1])("individual tests are isolated - %s", async () => {
|
|
28
|
+
const sql = neon(process.env.DATABASE_URL);
|
|
29
|
+
expect(await sql `SELECT * FROM users`).toStrictEqual([]);
|
|
30
|
+
await sql `INSERT INTO users (name) VALUES ('Ellen Ripley')`;
|
|
31
|
+
expect(await sql `SELECT * FROM users`).toStrictEqual([
|
|
32
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
33
|
+
]);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Drop the table before each test
|
|
38
|
+
*
|
|
39
|
+
* When you drop tables you have to re-apply the database migrations/schema
|
|
40
|
+
* before each test
|
|
41
|
+
*/
|
|
42
|
+
describe("isolate tests by dropping tables", () => {
|
|
43
|
+
beforeEach(async () => {
|
|
44
|
+
const sql = neon(process.env.DATABASE_URL);
|
|
45
|
+
await sql `DROP TABLE IF EXISTS users`;
|
|
46
|
+
await sql `CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT)`;
|
|
47
|
+
await sql `DELETE FROM users`;
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* This test is run twice and would fail if the database is shared between
|
|
51
|
+
* tests
|
|
52
|
+
*/
|
|
53
|
+
test.each([0, 1])("individual tests are isolated - %s", async () => {
|
|
54
|
+
const sql = neon(process.env.DATABASE_URL);
|
|
55
|
+
expect(await sql `SELECT * FROM users`).toStrictEqual([]);
|
|
56
|
+
await sql `INSERT INTO users (name) VALUES ('Ellen Ripley')`;
|
|
57
|
+
expect(await sql `SELECT * FROM users`).toStrictEqual([
|
|
58
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
59
|
+
]);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
/**
|
|
63
|
+
* Delete table rows before each test
|
|
64
|
+
*
|
|
65
|
+
* When you delete rows, the tables themselves are intact so there is no need to
|
|
66
|
+
* re-apply the database migrations/schema
|
|
67
|
+
*/
|
|
68
|
+
describe("isolate tests by deleting rows", () => {
|
|
69
|
+
beforeEach(async () => {
|
|
70
|
+
const sql = neon(process.env.DATABASE_URL);
|
|
71
|
+
await sql `CREATE TABLE IF NOT EXISTS users (id SERIAL PRIMARY KEY, name TEXT)`;
|
|
72
|
+
await sql `DELETE FROM users`;
|
|
73
|
+
await sql `ALTER SEQUENCE users_id_seq RESTART WITH 1`;
|
|
74
|
+
});
|
|
75
|
+
/**
|
|
76
|
+
* This test is run twice and would fail if the database is shared between
|
|
77
|
+
* tests
|
|
78
|
+
*/
|
|
79
|
+
test.each([0, 1])("individual tests are isolated - %s", async () => {
|
|
80
|
+
const sql = neon(process.env.DATABASE_URL);
|
|
81
|
+
expect(await sql `SELECT * FROM users`).toStrictEqual([]);
|
|
82
|
+
await sql `INSERT INTO users (name) VALUES ('Ellen Ripley')`;
|
|
83
|
+
expect(await sql `SELECT * FROM users`).toStrictEqual([
|
|
84
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
85
|
+
]);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
/**
|
|
89
|
+
* Truncate tables before each test
|
|
90
|
+
*
|
|
91
|
+
* When you truncate tables, the tables themselves are intact so there is no
|
|
92
|
+
* need to re-apply the database migrations/schema
|
|
93
|
+
*/
|
|
94
|
+
describe("isolate tests by truncating tables", () => {
|
|
95
|
+
beforeEach(async () => {
|
|
96
|
+
const sql = neon(process.env.DATABASE_URL);
|
|
97
|
+
await sql `CREATE TABLE IF NOT EXISTS users (id SERIAL PRIMARY KEY, name TEXT)`;
|
|
98
|
+
await sql `TRUNCATE TABLE users`;
|
|
99
|
+
await sql `ALTER SEQUENCE users_id_seq RESTART WITH 1`;
|
|
100
|
+
});
|
|
101
|
+
/**
|
|
102
|
+
* This test is run twice and would fail if the database is shared between
|
|
103
|
+
* tests
|
|
104
|
+
*/
|
|
105
|
+
test.each([0, 1])("individual tests are isolated - %s", async () => {
|
|
106
|
+
const sql = neon(process.env.DATABASE_URL);
|
|
107
|
+
expect(await sql `SELECT * FROM users`).toStrictEqual([]);
|
|
108
|
+
await sql `INSERT INTO users (name) VALUES ('Ellen Ripley')`;
|
|
109
|
+
expect(await sql `SELECT * FROM users`).toStrictEqual([
|
|
110
|
+
{ id: 1, name: "Ellen Ripley" },
|
|
111
|
+
]);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=isolated.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isolated.test.js","sourceRoot":"","sources":["../../examples/isolated.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEhD,WAAW,EAAE,CAAC;AAEd;;;;;GAKG;AACH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,CAAC;QAC5C,MAAM,GAAG,CAAA,sCAAsC,CAAC;QAChD,MAAM,GAAG,CAAA,sBAAsB,CAAC;QAChC,MAAM,GAAG,CAAA,uDAAuD,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,GAAG,CAAA,qBAAqB,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEzD,MAAM,GAAG,CAAA,kDAAkD,CAAC;QAE5D,MAAM,CAAC,MAAM,GAAG,CAAA,qBAAqB,CAAC,CAAC,aAAa,CAAC;YACnD,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;SAChC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,CAAC;QAE5C,MAAM,GAAG,CAAA,4BAA4B,CAAC;QACtC,MAAM,GAAG,CAAA,uDAAuD,CAAC;QAEjE,MAAM,GAAG,CAAA,mBAAmB,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,GAAG,CAAA,qBAAqB,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEzD,MAAM,GAAG,CAAA,kDAAkD,CAAC;QAE5D,MAAM,CAAC,MAAM,GAAG,CAAA,qBAAqB,CAAC,CAAC,aAAa,CAAC;YACnD,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;SAChC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,CAAC;QAC5C,MAAM,GAAG,CAAA,qEAAqE,CAAC;QAC/E,MAAM,GAAG,CAAA,mBAAmB,CAAC;QAC7B,MAAM,GAAG,CAAA,4CAA4C,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,GAAG,CAAA,qBAAqB,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEzD,MAAM,GAAG,CAAA,kDAAkD,CAAC;QAE5D,MAAM,CAAC,MAAM,GAAG,CAAA,qBAAqB,CAAC,CAAC,aAAa,CAAC;YACnD,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;SAChC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,CAAC;QAC5C,MAAM,GAAG,CAAA,qEAAqE,CAAC;QAC/E,MAAM,GAAG,CAAA,sBAAsB,CAAC;QAChC,MAAM,GAAG,CAAA,4CAA4C,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC,CAAC;QAE5C,MAAM,CAAC,MAAM,GAAG,CAAA,qBAAqB,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAEzD,MAAM,GAAG,CAAA,kDAAkD,CAAC;QAE5D,MAAM,CAAC,MAAM,GAAG,CAAA,qBAAqB,CAAC,CAAC,aAAa,CAAC;YACnD,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;SAChC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minimal.test.d.ts","sourceRoot":"","sources":["../../examples/minimal.test.ts"],"names":[],"mappings":""}
|