fastypest 1.2.1 → 1.3.2

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 CHANGED
@@ -1,39 +1,42 @@
1
- <h1 align="center">FASTYPEST</h1>
2
- <p align="center">
3
- <a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="GitHub package.json version" src="https://img.shields.io/github/package-json/v/juanjo96dev/fastypest?logo=github&logoColor=fff&label=GitHub+package"></a>
4
- <a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="npm" src="https://img.shields.io/npm/v/fastypest?logo=npm&logoColor=fff&label=NPM+package"></a>
5
- <a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="npm peer dependency version" src="https://img.shields.io/npm/dependency-version/fastypest/peer/typeorm"></a>
6
- <a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="Node version" src="https://img.shields.io/node/v/fastypest"></a>
7
- <a href="https://www.npmjs.com/fastypest" target="_blank"><img src="https://img.shields.io/npm/l/fastypest" alt="Package License" /></a>
8
- <a href="https://www.npmjs.com/fastypest" target="_blank"><img src="https://img.shields.io/npm/dm/fastypest" alt="NPM Downloads" /></a>
9
- </p>
10
-
11
- With this library, you can run your test suites without having to stop and restore the database in between them.
12
-
13
- Currently compatible with:
14
-
15
- - <a href="https://www.npmjs.com/fastypest"><img alt="Mysql >= v5.7 supported" src="https://img.shields.io/badge/Mysql-%3E%3D5.7-informational"></a>
16
- - <a href="https://www.npmjs.com/fastypest"><img alt="MariaDB >= v10.0 supported" src="https://img.shields.io/badge/MariaDB-%3E%3D10.0-yellowgreen"></a>
17
- - <a href="https://www.npmjs.com/fastypest"><img alt="Postgres >= v9.0 supported" src="https://img.shields.io/badge/Postgres-%3E%3D9.0-green"></a>
18
- - <a href="https://www.npmjs.com/fastypest"><img alt="cockroachdb >= v22.2.0 supported" src="https://img.shields.io/badge/Cockroachdb-%3E%3D22.2.0-blue"></a>
19
-
20
- Install with npm
21
-
22
- ```
23
- npm i -D fastypest
24
- ```
25
-
26
- To use it, you must have inserted all the seeds beforehand, and before starting the tests, you must initialize it by indicating the typeorm connection configuration. You must execute restoreData after each test, so that the database is returned to its initial state.
27
-
28
- Example of use with jest:
29
-
30
- ```typescript
31
- beforeAll(async () => {
32
- fastypest = new Fastypest(connection);
33
- await fastypest.init();
34
- });
35
-
36
- afterEach(async () => {
37
- await fastypest.restoreData();
38
- });
39
- ```
1
+ <h1 align="center">FASTYPEST</h1>
2
+ <p align="center">
3
+ <a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="GitHub package.json version" src="https://img.shields.io/github/package-json/v/juanjoGonDev/fastypest?logo=github&logoColor=fff&label=GitHub+package"></a>
4
+ <a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="npm" src="https://img.shields.io/npm/v/fastypest?logo=npm&logoColor=fff&label=NPM+package"></a>
5
+ <a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="npm peer dependency version" src="https://img.shields.io/npm/dependency-version/fastypest/peer/typeorm"></a>
6
+ <a href="https://www.npmjs.com/fastypest" target="_blank"><img alt="Node version" src="https://img.shields.io/node/v/fastypest"></a>
7
+ <a href="https://www.npmjs.com/fastypest" target="_blank"><img src="https://img.shields.io/npm/l/fastypest" alt="Package License" /></a>
8
+ <a href="https://www.npmjs.com/fastypest" target="_blank"><img src="https://img.shields.io/npm/dm/fastypest" alt="NPM Downloads" /></a>
9
+ </p>
10
+
11
+ With this library, you can run your test suites without having to stop and restore the database in between them.
12
+
13
+ Currently compatible with:
14
+
15
+ - <a href="https://www.npmjs.com/fastypest"><img alt="MySQL >= v5.7 supported" src="https://img.shields.io/badge/MySQL-%3E%3D5.7-informational"></a>
16
+ - <a href="https://www.npmjs.com/fastypest"><img alt="MariaDB >= v10.0 supported" src="https://img.shields.io/badge/MariaDB-%3E%3D10.0-yellowgreen"></a>
17
+ - <a href="https://www.npmjs.com/fastypest"><img alt="Postgres >= v9.0 supported" src="https://img.shields.io/badge/Postgres-%3E%3D9.0-green"></a>
18
+ - <a href="https://www.npmjs.com/fastypest"><img alt="cockroachDB >= v22.2.0 supported" src="https://img.shields.io/badge/CockroachDB-%3E%3D22.2.0-blue"></a>
19
+
20
+ Install with npm
21
+
22
+ ```
23
+ npm i -D fastypest
24
+ ```
25
+
26
+ To use it, you must have inserted all the seeds beforehand, and before starting the tests, you must initialize it by indicating the typeorm connection configuration. You must execute restoreData after each test, so that the database is returned to its initial state.
27
+
28
+ Example of use with jest
29
+
30
+ > **Note**
31
+ > (I recommend using it in a [setupFilesAfterEnv](https://jestjs.io/es-ES/docs/configuration#setupfilesafterenv-array) file):
32
+
33
+ ```typescript
34
+ beforeAll(async () => {
35
+ fastypest = new Fastypest(connection);
36
+ await fastypest.init();
37
+ });
38
+
39
+ afterEach(async () => {
40
+ await fastypest.restoreData();
41
+ });
42
+ ```
@@ -1,10 +1,21 @@
1
- import { Connection, DataSource } from "typeorm";
1
+ import { Connection, DataSource, EntityManager } from "typeorm";
2
2
  import { SQLScript } from "./sql-script";
3
+ interface Manager {
4
+ foreignKey: {
5
+ disable: () => Promise<string | object>;
6
+ enable: () => Promise<string | object>;
7
+ };
8
+ dependencyTree: () => Promise<Set<string> | undefined>;
9
+ }
3
10
  export declare class Fastypest extends SQLScript {
4
11
  private manager;
5
12
  private tables;
6
13
  constructor(connection: DataSource | Connection);
7
14
  init(): Promise<void>;
15
+ detectTables(em: EntityManager): Promise<void>;
8
16
  restoreData(): Promise<void>;
17
+ private restoreOrder;
18
+ restoreManager(em: EntityManager): Promise<Manager>;
9
19
  clearTempTables(): Promise<void>;
10
20
  }
21
+ export {};
@@ -20,34 +20,79 @@ class Fastypest extends sql_script_1.SQLScript {
20
20
  init() {
21
21
  return __awaiter(this, void 0, void 0, function* () {
22
22
  yield this.manager.transaction((em) => __awaiter(this, void 0, void 0, function* () {
23
- (yield em.query(this.getQuery("getTables"))).map((row) => {
24
- this.tables.add(row.name);
25
- });
23
+ yield this.detectTables(em);
26
24
  yield Promise.all([...this.tables].map((tableName) => __awaiter(this, void 0, void 0, function* () {
27
25
  yield em.query(this.getQuery("createTempTable", { tableName }));
28
26
  })));
29
27
  }));
30
28
  });
31
29
  }
30
+ detectTables(em) {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ (yield em.query(this.getQuery("getTables"))).map((row) => {
33
+ this.tables.add(row.name);
34
+ });
35
+ });
36
+ }
32
37
  restoreData() {
33
38
  return __awaiter(this, void 0, void 0, function* () {
34
39
  yield this.manager.transaction((em) => __awaiter(this, void 0, void 0, function* () {
35
- yield em.query(this.getQuery("foreignKey.disable"));
36
- yield Promise.all([...this.tables].map((tableName) => __awaiter(this, void 0, void 0, function* () {
37
- yield em.query(this.getQuery("truncateTable", { tableName }));
38
- yield em.query(this.getQuery("restoreData", { tableName }));
39
- })));
40
- yield em.query(this.getQuery("foreignKey.enable"));
40
+ const restoreManager = yield this.restoreManager(em);
41
+ yield restoreManager.foreignKey.disable();
42
+ const dependencyTree = yield restoreManager.dependencyTree();
43
+ const tables = [...(dependencyTree || this.tables)];
44
+ yield this.restoreOrder(em, tables, dependencyTree ? "sorted" : "random");
45
+ yield restoreManager.foreignKey.enable();
41
46
  }));
42
47
  });
43
48
  }
49
+ restoreOrder(em_1, tables_1) {
50
+ return __awaiter(this, arguments, void 0, function* (em, tables, type = "random") {
51
+ switch (type) {
52
+ case "sorted":
53
+ for (const tableName of tables) {
54
+ yield em.query(this.getQuery("truncateTable", { tableName }));
55
+ yield em.query(this.getQuery("restoreData", { tableName }));
56
+ }
57
+ break;
58
+ default:
59
+ yield Promise.all(tables.map((tableName) => __awaiter(this, void 0, void 0, function* () {
60
+ yield em.query(this.getQuery("truncateTable", { tableName }));
61
+ yield em.query(this.getQuery("restoreData", { tableName }));
62
+ })));
63
+ break;
64
+ }
65
+ });
66
+ }
67
+ restoreManager(em) {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ if (this.tables.size === 0) {
70
+ yield this.detectTables(em);
71
+ }
72
+ const manager = {
73
+ foreignKey: {
74
+ disable: () => __awaiter(this, void 0, void 0, function* () { return Promise.resolve({}); }),
75
+ enable: () => __awaiter(this, void 0, void 0, function* () { return Promise.resolve({}); }),
76
+ },
77
+ dependencyTree: () => __awaiter(this, void 0, void 0, function* () { return Promise.resolve(undefined); }),
78
+ };
79
+ switch (this.type) {
80
+ case "cockroachdb":
81
+ const dependencyTree = yield em.query(this.getQuery("dependencyTree"));
82
+ manager.dependencyTree = () => __awaiter(this, void 0, void 0, function* () {
83
+ return new Set(dependencyTree.map((row) => row.table_name));
84
+ });
85
+ break;
86
+ case "mariadb":
87
+ case "mysql":
88
+ manager.foreignKey.disable = () => __awaiter(this, void 0, void 0, function* () { return em.query(this.getQuery("foreignKey.disable")); });
89
+ manager.foreignKey.enable = () => __awaiter(this, void 0, void 0, function* () { return em.query(this.getQuery("foreignKey.enable")); });
90
+ }
91
+ return manager;
92
+ });
93
+ }
44
94
  clearTempTables() {
45
95
  return __awaiter(this, void 0, void 0, function* () {
46
- yield this.manager.transaction((em) => __awaiter(this, void 0, void 0, function* () {
47
- yield Promise.all([...this.tables].map((tableName) => __awaiter(this, void 0, void 0, function* () {
48
- yield em.query(yield em.query(this.getQuery("dropTempTable", { tableName })));
49
- })));
50
- }));
51
96
  this.tables.clear();
52
97
  });
53
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fastypest.js","sourceRoot":"","sources":["../../src/core/fastypest.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,6CAAyC;AAEzC,MAAa,SAAU,SAAQ,sBAAS;IAItC,YAAY,UAAmC;QAC7C,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAHzB,WAAM,GAAgB,IAAI,GAAG,EAAE,CAAC;QAItC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACpC,CAAC;IAEK,IAAI;;YACR,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAO,EAAE,EAAE,EAAE;gBAC1C,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAC9C,CAAC,GAA2B,EAAE,EAAE;oBAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5B,CAAC,CACF,CAAC;gBAEF,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAO,SAAS,EAAE,EAAE;oBACvC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAClE,CAAC,CAAA,CAAC,CACH,CAAC;YACJ,CAAC,CAAA,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,WAAW;;YACf,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAO,EAAE,EAAE,EAAE;gBAC1C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAEpD,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAO,SAAS,EAAE,EAAE;oBACvC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;oBAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAC9D,CAAC,CAAA,CAAC,CACH,CAAC;gBAEF,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACrD,CAAC,CAAA,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,eAAe;;YACnB,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAO,EAAE,EAAE,EAAE;gBAC1C,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAO,SAAS,EAAE,EAAE;oBACvC,MAAM,EAAE,CAAC,KAAK,CACZ,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAC9D,CAAC;gBACJ,CAAC,CAAA,CAAC,CACH,CAAC;YACJ,CAAC,CAAA,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;KAAA;CACF;AArDD,8BAqDC"}
1
+ {"version":3,"file":"fastypest.js","sourceRoot":"","sources":["../../src/core/fastypest.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,6CAAyC;AAUzC,MAAa,SAAU,SAAQ,sBAAS;IAItC,YAAY,UAAmC;QAC7C,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAHzB,WAAM,GAAgB,IAAI,GAAG,EAAE,CAAC;QAItC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IACpC,CAAC;IAEK,IAAI;;YACR,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAO,EAAiB,EAAE,EAAE;gBACzD,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAE5B,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAO,SAAS,EAAE,EAAE;oBACvC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAClE,CAAC,CAAA,CAAC,CACH,CAAC;YACJ,CAAC,CAAA,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,YAAY,CAAC,EAAiB;;YAClC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAC9C,CAAC,GAA2B,EAAE,EAAE;gBAC9B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC,CACF,CAAC;QACJ,CAAC;KAAA;IAEK,WAAW;;YACf,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAO,EAAiB,EAAE,EAAE;gBACzD,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBACrD,MAAM,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBAC1C,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,cAAc,EAAE,CAAC;gBAC7D,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAEpD,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAE1E,MAAM,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC3C,CAAC,CAAA,CAAC,CAAC;QACL,CAAC;KAAA;IAEa,YAAY;6DACxB,EAAiB,EACjB,MAAgB,EAChB,OAA4B,QAAQ;YAEpC,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,QAAQ;oBACX,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;wBAC/B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;wBAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;oBAC9D,CAAC;oBACD,MAAM;gBACR;oBACE,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,GAAG,CAAC,CAAO,SAAS,EAAE,EAAE;wBAC7B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;wBAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;oBAC9D,CAAC,CAAA,CAAC,CACH,CAAC;oBACF,MAAM;YACV,CAAC;QACH,CAAC;KAAA;IAEK,cAAc,CAAC,EAAiB;;YACpC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC9B,CAAC;YAED,MAAM,OAAO,GAAY;gBACvB,UAAU,EAAE;oBACV,OAAO,EAAE,GAAS,EAAE,gDAAC,OAAA,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA,GAAA;oBACxC,MAAM,EAAE,GAAS,EAAE,gDAAC,OAAA,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA,GAAA;iBACxC;gBACD,cAAc,EAAE,GAAS,EAAE,gDAAC,OAAA,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA,GAAA;aACvD,CAAC;YAEF,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,aAAa;oBAChB,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBACvE,OAAO,CAAC,cAAc,GAAG,GAAS,EAAE;wBAClC,OAAA,IAAI,GAAG,CACL,cAAc,CAAC,GAAG,CAAC,CAAC,GAA2B,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CACrD,CAAA;sBAAA,CAAC;oBACnB,MAAM;gBACR,KAAK,SAAS,CAAC;gBACf,KAAK,OAAO;oBACV,OAAO,CAAC,UAAU,CAAC,OAAO,GAAG,GAAS,EAAE,gDACtC,OAAA,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAA,GAAA,CAAC;oBAChD,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,GAAS,EAAE,gDACrC,OAAA,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAA,GAAA,CAAC;YACnD,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KAAA;IAEK,eAAe;;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;KAAA;CACF;AApGD,8BAoGC"}
@@ -1,11 +1,12 @@
1
1
  {
2
+ "dependencyTree": "WITH RECURSIVE dependency_tree AS (SELECT table_name, 0 AS level FROM information_schema.tables WHERE table_schema = 'public' AND table_name NOT IN (SELECT DISTINCT ccu.table_name FROM information_schema.table_constraints tc JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name WHERE constraint_type = 'FOREIGN KEY' AND tc.table_schema = 'public') UNION ALL SELECT ccu.table_name, dt.level + 1 AS level FROM information_schema.table_constraints tc JOIN information_schema.constraint_column_usage ccu ON ccu.constraint_name = tc.constraint_name JOIN dependency_tree dt ON dt.table_name = tc.table_name WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema = 'public') SELECT table_name FROM dependency_tree ORDER BY level DESC, table_name",
2
3
  "foreignKey": {
3
- "disable": "SET sql_safe_updates = 'off'",
4
- "enable": "SET sql_safe_updates = 'on'"
4
+ "disable": "-- NOT USED",
5
+ "enable": "-- NOT USED"
5
6
  },
6
7
  "getTables": "SELECT table_name AS name FROM information_schema.tables WHERE table_catalog = CURRENT_DATABASE() AND table_schema = 'public' AND table_type = 'BASE TABLE'",
7
- "createTempTable": "SET experimental_enable_temp_tables=on; CREATE TEMPORARY TABLE {{tableName}}_temp AS SELECT * FROM {{tableName}}",
8
- "dropTempTable": "DROP TABLE IF EXISTS {{tableName}}_temp",
9
- "restoreData": "INSERT INTO {{tableName}} SELECT * FROM {{tableName}}_temp; SELECT setval(pg_get_serial_sequence('{{tableName}}', 'id'), (SELECT COALESCE(MAX(id), 0) FROM {{tableName}}))",
10
- "truncateTable": "TRUNCATE TABLE {{tableName}}; ALTER SEQUENCE {{tableName}}_id_seq RESTART WITH 1;"
8
+ "createTempTable": "SET experimental_enable_temp_tables=on; CREATE TEMPORARY TABLE \"{{tableName}}_temp\" AS SELECT * FROM \"{{tableName}}\"",
9
+ "dropTempTable": "DROP TABLE IF EXISTS \"{{tableName}}_temp\"",
10
+ "restoreData": "INSERT INTO \"{{tableName}}\" SELECT * FROM \"{{tableName}}_temp\"; SELECT setval(pg_get_serial_sequence('\"{{tableName}}\"', 'id'), (SELECT COALESCE(MAX(id), 0) FROM \"{{tableName}}\"))",
11
+ "truncateTable": "TRUNCATE TABLE \"{{tableName}}\" CASCADE; ALTER SEQUENCE {{tableName}}_id_seq RESTART WITH 1;"
11
12
  }
@@ -1,5 +1,6 @@
1
1
  export declare const DB_QUERIES: {
2
2
  mysql: {
3
+ dependencyTree: string;
3
4
  foreignKey: {
4
5
  disable: string;
5
6
  enable: string;
@@ -11,6 +12,7 @@ export declare const DB_QUERIES: {
11
12
  truncateTable: string;
12
13
  };
13
14
  mariadb: {
15
+ dependencyTree: string;
14
16
  foreignKey: {
15
17
  disable: string;
16
18
  enable: string;
@@ -22,6 +24,7 @@ export declare const DB_QUERIES: {
22
24
  truncateTable: string;
23
25
  };
24
26
  postgres: {
27
+ dependencyTree: string;
25
28
  foreignKey: {
26
29
  disable: string;
27
30
  enable: string;
@@ -33,6 +36,7 @@ export declare const DB_QUERIES: {
33
36
  truncateTable: string;
34
37
  };
35
38
  cockroachdb: {
39
+ dependencyTree: string;
36
40
  foreignKey: {
37
41
  disable: string;
38
42
  enable: string;
@@ -1,4 +1,5 @@
1
1
  {
2
+ "dependencyTree": "-- NOT USED",
2
3
  "foreignKey": {
3
4
  "disable": "SET FOREIGN_KEY_CHECKS=0",
4
5
  "enable": "SET FOREIGN_KEY_CHECKS=1"
@@ -1,11 +1,12 @@
1
1
  {
2
+ "dependencyTree": "-- NOT USED",
2
3
  "foreignKey": {
3
- "disable": "SET CONSTRAINTS ALL DEFERRED",
4
- "enable": "SET CONSTRAINTS ALL IMMEDIATE"
4
+ "disable": "-- NOT USED",
5
+ "enable": "-- NOT USED"
5
6
  },
6
7
  "getTables": "SELECT table_name AS name FROM information_schema.tables WHERE table_schema = CURRENT_SCHEMA() AND table_type = 'BASE TABLE'",
7
- "createTempTable": "CREATE TEMPORARY TABLE {{tableName}}_temp AS SELECT * FROM {{tableName}}",
8
- "dropTempTable": "DROP TABLE IF EXISTS {{tableName}}_temp",
9
- "restoreData": "INSERT INTO {{tableName}} SELECT * FROM {{tableName}}_temp; SELECT SETVAL(pg_get_serial_sequence('{{tableName}}', 'id'), (SELECT COALESCE(MAX(id), 0) FROM {{tableName}}))",
10
- "truncateTable": "TRUNCATE TABLE {{tableName}} RESTART IDENTITY"
8
+ "createTempTable": "CREATE TEMPORARY TABLE \"{{tableName}}_temp\" AS SELECT * FROM \"{{tableName}}\"",
9
+ "dropTempTable": "DROP TABLE IF EXISTS \"{{tableName}}_temp\"",
10
+ "restoreData": "INSERT INTO \"{{tableName}}\" SELECT * FROM \"{{tableName}}_temp\"; SELECT SETVAL(pg_get_serial_sequence('{{tableName}}', 'id'), (SELECT COALESCE(MAX(id), 0) FROM \"{{tableName}}\"))",
11
+ "truncateTable": "TRUNCATE TABLE \"{{tableName}}\" RESTART IDENTITY CASCADE"
11
12
  }
@@ -3,9 +3,9 @@ import { Queries } from "./queries";
3
3
  import { QueryPath } from "./types";
4
4
  type DBTypes = DataSourceOptions["type"];
5
5
  export declare class SQLScript {
6
- private readonly type;
6
+ readonly type: DBTypes;
7
7
  queries: Queries;
8
8
  constructor(type: DBTypes);
9
- protected getQuery(queryPath: QueryPath<Queries>, values?: Record<string, string>): string;
9
+ getQuery(queryPath: QueryPath<Queries>, values?: Record<string, string>): string;
10
10
  }
11
11
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"sql-script.js","sourceRoot":"","sources":["../../../src/core/sql-script/sql-script.ts"],"names":[],"mappings":";;;AACA,uCAAkE;AAKlE,MAAa,SAAS;IAEpB,YAA6B,IAAa;QAAb,SAAI,GAAJ,IAAI,CAAS;QACxC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,oBAAU,CAAC,EAAE;YAC9B,MAAM,IAAI,KAAK,CACb,kFAAkF,MAAM,CAAC,IAAI,CAC3F,oBAAU,CACX,EAAE,CACJ,CAAC;SACH;QAED,IAAI,CAAC,OAAO,GAAG,oBAAU,CAAC,IAAI,CAAC,IAAwB,CAAC,CAAC;IAC3D,CAAC;IAES,QAAQ,CAChB,SAA6B,EAC7B,MAA+B;QAE/B,MAAM,QAAQ,GAAG,SAAS;aACvB,KAAK,CAAC,GAAG,CAAC;aACV,MAAM,CAAC,CAAC,GAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAErD,IAAI,QAAQ,GAAG,QAAQ,CAAC;QAExB,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACxB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,IAAI,MAAM,CAAC,SAAS,GAAG,QAAQ,EAAE,GAAG,CAAC,EACrC,MAAM,CAAC,GAAG,CAAC,CACZ,CAAC;SACH;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAjCD,8BAiCC"}
1
+ {"version":3,"file":"sql-script.js","sourceRoot":"","sources":["../../../src/core/sql-script/sql-script.ts"],"names":[],"mappings":";;;AACA,uCAAkE;AAKlE,MAAa,SAAS;IAEpB,YAAqB,IAAa;QAAb,SAAI,GAAJ,IAAI,CAAS;QAChC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,oBAAU,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,kFAAkF,MAAM,CAAC,IAAI,CAC3F,oBAAU,CACX,EAAE,CACJ,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,oBAAU,CAAC,IAAI,CAAC,IAAwB,CAAC,CAAC;IAC3D,CAAC;IAED,QAAQ,CACN,SAA6B,EAC7B,MAA+B;QAE/B,MAAM,QAAQ,GAAG,SAAS;aACvB,KAAK,CAAC,GAAG,CAAC;aACV,MAAM,CAAC,CAAC,GAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAErD,IAAI,QAAQ,GAAG,QAAQ,CAAC;QAExB,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,IAAI,MAAM,CAAC,SAAS,GAAG,QAAQ,EAAE,GAAG,CAAC,EACrC,MAAM,CAAC,GAAG,CAAC,CACZ,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAjCD,8BAiCC"}
@@ -1,6 +1,6 @@
1
1
  type JsonKeys<T> = T extends object ? {
2
2
  [K in keyof T]-?: `${string & K}` | `${JsonKeys<T[K]> & `.${string & K}`}`;
3
3
  }[keyof T] : "";
4
- type FlattenJson<T, K = JsonKeys<T>> = K extends keyof T ? T[K] extends Record<string, any> ? `${string & K}.${FlattenJson<T[K]>}` : K : never;
4
+ type FlattenJson<T, K = JsonKeys<T>> = K extends keyof T ? T[K] extends Record<string, string | object> ? `${string & K}.${FlattenJson<T[K]>}` : K : never;
5
5
  export type QueryPath<T> = FlattenJson<T>;
6
6
  export {};
@@ -0,0 +1,28 @@
1
+ import pluginJs from "@eslint/js";
2
+ import globals from "globals";
3
+ import tseslint from "typescript-eslint";
4
+
5
+ const common = {
6
+ files: ["src/**/*.ts"],
7
+ ignores: ["**/dist/*", "**/node_modules/*"],
8
+ rules: {
9
+ "no-case-declarations": "off",
10
+ },
11
+ };
12
+
13
+ const tsRecommended = tseslint.configs.recommended.map((config) => ({
14
+ ...config,
15
+ ...common,
16
+ }));
17
+
18
+ export default [
19
+ {
20
+ languageOptions: { globals: globals.node },
21
+ ...common,
22
+ },
23
+ {
24
+ ...pluginJs.configs.recommended,
25
+ ...common,
26
+ },
27
+ ...tsRecommended,
28
+ ];
package/package.json CHANGED
@@ -1,68 +1,82 @@
1
- {
2
- "name": "fastypest",
3
- "version": "1.2.1",
4
- "description": "Restores the database automatically after each test. Allows serial execution of tests without having to delete and restore the database having to stop the application",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "engines": {
8
- "node": ">=18"
9
- },
10
- "volta": {
11
- "node": "18.0.0"
12
- },
13
- "scripts": {
14
- "prebuild": "rimraf dist",
15
- "build": "tsc",
16
- "eslint": "eslint . --fix --config .eslintrc",
17
- "test": "jest --runInBand --config ./jest.config.json",
18
- "docker": "ts-node -r tsconfig-paths/register scripts/prepare-docker.ts"
19
- },
20
- "repository": {
21
- "type": "git",
22
- "url": "git+https://github.com/juanjo96Dev/fastypest.git"
23
- },
24
- "keywords": [
25
- "typeorm",
26
- "test",
27
- "transaction",
28
- "rollback",
29
- "nestjs",
30
- "restore",
31
- "db",
32
- "speed",
33
- "up",
34
- "tests",
35
- "jest",
36
- "fastypest"
37
- ],
38
- "author": "juanjo96Dev",
39
- "license": "GPL",
40
- "bugs": {
41
- "url": "https://github.com/juanjo96Dev/fastypest/issues"
42
- },
43
- "homepage": "https://github.com/juanjo96Dev/fastypest#readme",
44
- "devDependencies": {
45
- "@types/cross-spawn": "^6.0.2",
46
- "@types/jest": "^29.4.0",
47
- "@types/node": "^18.13.0",
48
- "@typescript-eslint/eslint-plugin": "^5.54.0",
49
- "cross-spawn": "^7.0.3",
50
- "eslint": "^8.34.0",
51
- "eslint-config-standard-with-typescript": "^34.0.0",
52
- "eslint-plugin-import": "^2.27.5",
53
- "eslint-plugin-n": "^15.6.1",
54
- "eslint-plugin-prettier": "^4.2.1",
55
- "eslint-plugin-promise": "^6.1.1",
56
- "jest": "^29.4.2",
57
- "mariadb": "^3.1.0",
58
- "mysql": "^2.18.1",
59
- "pg": "^8.9.0",
60
- "rimraf": "^4.3.0",
61
- "ts-jest": "^29.0.5",
62
- "ts-node": "^10.9.1",
63
- "typescript": "^4.9.5"
64
- },
65
- "peerDependencies": {
66
- "typeorm": "^0.3.12"
67
- }
68
- }
1
+ {
2
+ "name": "fastypest",
3
+ "version": "1.3.2",
4
+ "description": "Restores the database automatically after each test. Allows serial execution of tests without having to delete and restore the database having to stop the application",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "engines": {
8
+ "node": ">=18.18.0"
9
+ },
10
+ "packageManager": "yarn@4.2.2",
11
+ "volta": {
12
+ "node": "18.18.0",
13
+ "yarn": "4.2.2"
14
+ },
15
+ "installConfig": {
16
+ "pnp": false
17
+ },
18
+ "scripts": {
19
+ "prebuild": "rimraf dist",
20
+ "build": "tsc",
21
+ "eslint": "eslint --fix .",
22
+ "pretest": "tsc",
23
+ "test": "jest --runInBand --config ./jest.config.json",
24
+ "docker": "ts-node -r tsconfig-paths/register scripts/prepare-docker.ts",
25
+ "release": "standard-version --release-as patch",
26
+ "publish": "npm publish"
27
+ },
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "git+https://github.com/juanjoGonDev/fastypest.git"
31
+ },
32
+ "keywords": [
33
+ "typeorm",
34
+ "test",
35
+ "transaction",
36
+ "rollback",
37
+ "nestjs",
38
+ "restore",
39
+ "db",
40
+ "speed",
41
+ "up",
42
+ "tests",
43
+ "jest",
44
+ "fastypest"
45
+ ],
46
+ "author": "juanjoGonDev",
47
+ "license": "GPL",
48
+ "bugs": {
49
+ "url": "https://github.com/juanjoGonDev/fastypest/issues"
50
+ },
51
+ "homepage": "https://github.com/juanjoGonDev/fastypest#readme",
52
+ "devDependencies": {
53
+ "@eslint/js": "^9.2.0",
54
+ "@types/cross-spawn": "^6.0.6",
55
+ "@types/jest": "^29.5.12",
56
+ "@types/node": "^20.12.11",
57
+ "@typescript-eslint/eslint-plugin": "^7.8.0",
58
+ "cross-spawn": "^7.0.3",
59
+ "eslint": "^9.2.0",
60
+ "eslint-config-standard-with-typescript": "^43.0.1",
61
+ "eslint-plugin-import": "^2.29.1",
62
+ "eslint-plugin-n": "^17.5.1",
63
+ "eslint-plugin-prettier": "^5.1.3",
64
+ "eslint-plugin-promise": "^6.1.1",
65
+ "globals": "^15.2.0",
66
+ "jest": "^29.7.0",
67
+ "mariadb": "^3.3.0",
68
+ "mysql": "^2.18.1",
69
+ "pg": "^8.11.5",
70
+ "rimraf": "^5.0.5",
71
+ "standard-version": "^9.5.0",
72
+ "ts-jest": "^29.1.2",
73
+ "ts-node": "^10.9.2",
74
+ "tsconfig-paths": "^4.2.0",
75
+ "typeorm": "^0.3.20",
76
+ "typescript": "^5.4.5",
77
+ "typescript-eslint": "^7.8.0"
78
+ },
79
+ "peerDependencies": {
80
+ "typeorm": "^0.3.20"
81
+ }
82
+ }