@rsdk/db.typeorm 4.0.8-next.5 → 4.0.8-next.7
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/CHANGELOG.md +8 -0
- package/package.json +9 -9
- package/tsconfig.build.json +4 -9
- package/tsconfig.json +0 -1
- package/dist/internal/test/concurrency.test.e2e.d.ts +0 -5
- package/dist/internal/test/concurrency.test.e2e.js +0 -83
- package/dist/internal/test/concurrency.test.e2e.js.map +0 -1
- package/dist/internal/test/strategy.test.e2e.d.ts +0 -5
- package/dist/internal/test/strategy.test.e2e.js +0 -779
- package/dist/internal/test/strategy.test.e2e.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [4.0.8-next.7](https://github.com/R-Vision/rsdk/compare/v4.0.8-next.6...v4.0.8-next.7) (2024-01-18)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @rsdk/db.typeorm
|
|
9
|
+
|
|
10
|
+
## [4.0.8-next.6](https://github.com/R-Vision/rsdk/compare/v4.0.8-next.5...v4.0.8-next.6) (2024-01-18)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package @rsdk/db.typeorm
|
|
13
|
+
|
|
6
14
|
## [4.0.8-next.5](https://github.com/R-Vision/rsdk/compare/v4.0.8-next.4...v4.0.8-next.5) (2024-01-17)
|
|
7
15
|
|
|
8
16
|
**Note:** Version bump only for package @rsdk/db.typeorm
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsdk/db.typeorm",
|
|
3
|
-
"version": "4.0.8-next.
|
|
3
|
+
"version": "4.0.8-next.7",
|
|
4
4
|
"description": "TypeOrm module for platform",
|
|
5
5
|
"license": "Apache License 2.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -14,21 +14,21 @@
|
|
|
14
14
|
"prepublishOnly": "npm run build"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@rsdk/common.node": "^4.0.8-next.
|
|
17
|
+
"@rsdk/common.node": "^4.0.8-next.7"
|
|
18
18
|
},
|
|
19
19
|
"peerDependencies": {
|
|
20
20
|
"@nestjs/common": "^10.0.0",
|
|
21
21
|
"@nestjs/core": "^10.0.0",
|
|
22
22
|
"@nestjs/typeorm": "^10.0.0",
|
|
23
|
-
"@rsdk/common": "^4.0.8-next.
|
|
24
|
-
"@rsdk/common.nestjs": "^4.0.8-next.
|
|
25
|
-
"@rsdk/core": "^4.0.8-next.
|
|
26
|
-
"@rsdk/db": "^4.0.8-next.
|
|
27
|
-
"@rsdk/logging": "^4.0.8-next.
|
|
28
|
-
"@rsdk/nest-tools": "^4.0.8-next.
|
|
23
|
+
"@rsdk/common": "^4.0.8-next.7",
|
|
24
|
+
"@rsdk/common.nestjs": "^4.0.8-next.7",
|
|
25
|
+
"@rsdk/core": "^4.0.8-next.7",
|
|
26
|
+
"@rsdk/db": "^4.0.8-next.7",
|
|
27
|
+
"@rsdk/logging": "^4.0.8-next.7",
|
|
28
|
+
"@rsdk/nest-tools": "^4.0.8-next.7",
|
|
29
29
|
"reflect-metadata": "^0.1.13",
|
|
30
30
|
"rxjs": "^7.0.0",
|
|
31
31
|
"typeorm": "^0.3.12"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "a77389bc7f13b914e298d66f20450769893da707"
|
|
34
34
|
}
|
package/tsconfig.build.json
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"extends": "./tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"incremental": false,
|
|
5
|
-
"rootDir": "./src"
|
|
6
|
-
},
|
|
7
|
-
"include": [
|
|
8
|
-
"src/**/*"
|
|
9
|
-
],
|
|
10
3
|
"exclude": [
|
|
11
4
|
"node_modules",
|
|
12
5
|
"dist",
|
|
13
6
|
"test",
|
|
14
|
-
"
|
|
15
|
-
"
|
|
7
|
+
"**/*.spec.ts",
|
|
8
|
+
"**/*.test.ts",
|
|
9
|
+
"**/*.test.e2e.ts",
|
|
10
|
+
"**/*.test.manual-e2e.ts",
|
|
16
11
|
]
|
|
17
12
|
}
|
package/tsconfig.json
CHANGED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.pingDatabase = exports.createSecondCat = exports.createCat = exports.fetchCats = void 0;
|
|
27
|
-
/* eslint-disable unicorn/consistent-function-scoping,unicorn/catch-error-name */
|
|
28
|
-
const db_1 = require("@rsdk/db");
|
|
29
|
-
const process = __importStar(require("node:process"));
|
|
30
|
-
const pg_1 = require("pg");
|
|
31
|
-
const typeorm_1 = require("typeorm");
|
|
32
|
-
const initializer_1 = require("../initializer");
|
|
33
|
-
const strategy_1 = require("../strategy");
|
|
34
|
-
const util_1 = require("./util");
|
|
35
|
-
const fetchCats = async () => dataSource.manager.find(util_1.Cat);
|
|
36
|
-
exports.fetchCats = fetchCats;
|
|
37
|
-
const createCat = async () => dataSource.manager.getRepository(util_1.Cat).save(util_1.cat);
|
|
38
|
-
exports.createCat = createCat;
|
|
39
|
-
const createSecondCat = async () => {
|
|
40
|
-
const catRepo = dataSource.manager.getRepository(util_1.Cat);
|
|
41
|
-
return await catRepo.save(catRepo.create(util_1.secondCat));
|
|
42
|
-
};
|
|
43
|
-
exports.createSecondCat = createSecondCat;
|
|
44
|
-
const runner = new db_1.TransactionRunner(new strategy_1.TypeOrmTransactionalStrategy());
|
|
45
|
-
let dataSource;
|
|
46
|
-
const pingDatabase = async () => await dataSource.query('select 1 + 1');
|
|
47
|
-
exports.pingDatabase = pingDatabase;
|
|
48
|
-
const schemaName = `typeorm`;
|
|
49
|
-
const setupSchema = async () => {
|
|
50
|
-
const dbUrl = process.env.DB_URL;
|
|
51
|
-
const client = new pg_1.Client(dbUrl);
|
|
52
|
-
await client.connect();
|
|
53
|
-
await client.query(`CREATE SCHEMA IF NOT EXISTS ${schemaName}`);
|
|
54
|
-
await client.end();
|
|
55
|
-
};
|
|
56
|
-
beforeAll(setupSchema);
|
|
57
|
-
beforeAll(async () => {
|
|
58
|
-
initializer_1.Initializer.initialize();
|
|
59
|
-
dataSource = new typeorm_1.DataSource({
|
|
60
|
-
url: process.env.DB_URL,
|
|
61
|
-
type: process.env.DB_TYPE ?? 'postgres',
|
|
62
|
-
entities: [util_1.Cat, util_1.Account],
|
|
63
|
-
schema: schemaName,
|
|
64
|
-
logging: process.env.DB_LOGGING,
|
|
65
|
-
});
|
|
66
|
-
await dataSource.initialize();
|
|
67
|
-
});
|
|
68
|
-
beforeEach(async () => {
|
|
69
|
-
await dataSource.synchronize(true);
|
|
70
|
-
});
|
|
71
|
-
afterAll(async () => {
|
|
72
|
-
await dataSource.destroy();
|
|
73
|
-
});
|
|
74
|
-
it('correct run transaction', async () => {
|
|
75
|
-
const testedFunc = async () => {
|
|
76
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
77
|
-
const r = await Promise.all([(0, exports.fetchCats)(), (0, exports.fetchCats)()]);
|
|
78
|
-
expect(r).toEqual([[], []]);
|
|
79
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
80
|
-
};
|
|
81
|
-
await runner.transactional(testedFunc);
|
|
82
|
-
});
|
|
83
|
-
//# sourceMappingURL=concurrency.test.e2e.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"concurrency.test.e2e.js","sourceRoot":"","sources":["../../../src/internal/test/concurrency.test.e2e.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,779 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.pingDatabase = exports.createSecondCat = exports.createCat = exports.fetchCats = void 0;
|
|
27
|
-
/* eslint-disable unicorn/consistent-function-scoping,unicorn/catch-error-name */
|
|
28
|
-
const db_1 = require("@rsdk/db");
|
|
29
|
-
const process = __importStar(require("node:process"));
|
|
30
|
-
const pg_1 = require("pg");
|
|
31
|
-
const typeorm_1 = require("typeorm");
|
|
32
|
-
const types_1 = require("../../types");
|
|
33
|
-
const initializer_1 = require("../initializer");
|
|
34
|
-
const strategy_1 = require("../strategy");
|
|
35
|
-
const util_1 = require("./util");
|
|
36
|
-
const fetchCats = async () => dataSource.manager.find(util_1.Cat);
|
|
37
|
-
exports.fetchCats = fetchCats;
|
|
38
|
-
const createCat = async () => dataSource.manager.getRepository(util_1.Cat).save(util_1.cat);
|
|
39
|
-
exports.createCat = createCat;
|
|
40
|
-
const createSecondCat = async () => {
|
|
41
|
-
const catRepo = dataSource.manager.getRepository(util_1.Cat);
|
|
42
|
-
return await catRepo.save(catRepo.create(util_1.secondCat));
|
|
43
|
-
};
|
|
44
|
-
exports.createSecondCat = createSecondCat;
|
|
45
|
-
const runner = new db_1.TransactionRunner(new strategy_1.TypeOrmTransactionalStrategy());
|
|
46
|
-
let dataSource;
|
|
47
|
-
const pingDatabase = async () => await dataSource.query('select 1 + 1');
|
|
48
|
-
exports.pingDatabase = pingDatabase;
|
|
49
|
-
const schemaName = `typeorm`;
|
|
50
|
-
const setupSchema = async () => {
|
|
51
|
-
const client = new pg_1.Client(process.env.DB_URL);
|
|
52
|
-
await client.connect();
|
|
53
|
-
await client.query(`CREATE SCHEMA IF NOT EXISTS ${schemaName}`);
|
|
54
|
-
await client.end();
|
|
55
|
-
};
|
|
56
|
-
beforeAll(setupSchema);
|
|
57
|
-
beforeAll(async () => {
|
|
58
|
-
initializer_1.Initializer.initialize();
|
|
59
|
-
dataSource = new typeorm_1.DataSource({
|
|
60
|
-
url: process.env.DB_URL,
|
|
61
|
-
type: process.env.DB_TYPE,
|
|
62
|
-
entities: [util_1.Cat, util_1.Account],
|
|
63
|
-
schema: schemaName,
|
|
64
|
-
logging: process.env.DB_LOGGING,
|
|
65
|
-
});
|
|
66
|
-
await dataSource.initialize();
|
|
67
|
-
});
|
|
68
|
-
beforeEach(async () => {
|
|
69
|
-
await dataSource.synchronize(true);
|
|
70
|
-
});
|
|
71
|
-
afterAll(async () => {
|
|
72
|
-
await dataSource.destroy();
|
|
73
|
-
});
|
|
74
|
-
it('correct run transaction', async () => {
|
|
75
|
-
const testedFunc = async () => {
|
|
76
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
77
|
-
await (0, exports.pingDatabase)();
|
|
78
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
79
|
-
};
|
|
80
|
-
await runner.transactional(testedFunc);
|
|
81
|
-
});
|
|
82
|
-
it('correct release queryRunner', async () => {
|
|
83
|
-
let qr;
|
|
84
|
-
const testedFunc = async () => {
|
|
85
|
-
const context = initializer_1.Initializer.storage.getContext();
|
|
86
|
-
const queryRunner = context?.queryRunner;
|
|
87
|
-
expect(queryRunner).toBeUndefined();
|
|
88
|
-
await (0, exports.pingDatabase)();
|
|
89
|
-
{
|
|
90
|
-
const queryRunner = initializer_1.Initializer.storage.getContext()?.queryRunner;
|
|
91
|
-
expect(queryRunner).toBeDefined();
|
|
92
|
-
qr = queryRunner;
|
|
93
|
-
const transactionActive = queryRunner?.isTransactionActive;
|
|
94
|
-
expect(transactionActive).toBe(true);
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
await runner.transactional(testedFunc);
|
|
98
|
-
expect(qr?.isTransactionActive).toBeFalsy();
|
|
99
|
-
expect(qr?.isReleased).toBeTruthy();
|
|
100
|
-
});
|
|
101
|
-
it('example correct release queryRunner', async () => {
|
|
102
|
-
/**
|
|
103
|
-
* В случае если queryRunner некорректно релизится по завершению транзакции
|
|
104
|
-
* Здесь будет ошибка так как queryRunner будет использоваться после своего релиза
|
|
105
|
-
* Также это проверка на то что queryRunner не прибивается намертво к менеджеру
|
|
106
|
-
*/
|
|
107
|
-
const testedFunc = async () => {
|
|
108
|
-
await dataSource.manager.query('select 1 + 1');
|
|
109
|
-
};
|
|
110
|
-
await runner.transactional(testedFunc);
|
|
111
|
-
await testedFunc();
|
|
112
|
-
await runner.transactional(testedFunc);
|
|
113
|
-
await testedFunc();
|
|
114
|
-
});
|
|
115
|
-
it('correct commit transaction', async () => {
|
|
116
|
-
const testedFunc = async () => {
|
|
117
|
-
await (0, exports.createCat)();
|
|
118
|
-
};
|
|
119
|
-
await runner.transactional(testedFunc);
|
|
120
|
-
const cats = await (0, exports.fetchCats)();
|
|
121
|
-
expect(cats).toMatchObject([util_1.cat]);
|
|
122
|
-
});
|
|
123
|
-
it('correct rollback transaction', async () => {
|
|
124
|
-
const testedFunc = async () => {
|
|
125
|
-
await (0, exports.createCat)();
|
|
126
|
-
throw new util_1.SyntheticException();
|
|
127
|
-
};
|
|
128
|
-
const err = await runner.transactional(testedFunc).catch((e) => e);
|
|
129
|
-
expect(err).toBeInstanceOf(util_1.SyntheticException);
|
|
130
|
-
const cats = await (0, exports.fetchCats)();
|
|
131
|
-
expect(cats).toHaveLength(0);
|
|
132
|
-
});
|
|
133
|
-
describe('nested', () => {
|
|
134
|
-
const doSuccessful = async () => {
|
|
135
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
136
|
-
return await (0, exports.createSecondCat)();
|
|
137
|
-
};
|
|
138
|
-
const doFailed = async () => {
|
|
139
|
-
await doSuccessful();
|
|
140
|
-
throw new util_1.SyntheticException();
|
|
141
|
-
};
|
|
142
|
-
it('correct run transaction', async () => {
|
|
143
|
-
const testedFunc = async () => {
|
|
144
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
145
|
-
await (0, exports.pingDatabase)();
|
|
146
|
-
await doSuccessful();
|
|
147
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
148
|
-
};
|
|
149
|
-
await runner.transactional(testedFunc);
|
|
150
|
-
});
|
|
151
|
-
it('correct release queryRunner', async () => {
|
|
152
|
-
let qr;
|
|
153
|
-
const testedFunc = async () => {
|
|
154
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
155
|
-
await (0, exports.pingDatabase)();
|
|
156
|
-
await doSuccessful();
|
|
157
|
-
{
|
|
158
|
-
const queryRunner = initializer_1.Initializer.storage.getContext()?.queryRunner;
|
|
159
|
-
expect(queryRunner).toBeDefined();
|
|
160
|
-
qr = queryRunner;
|
|
161
|
-
const transactionActive = queryRunner?.isTransactionActive;
|
|
162
|
-
expect(transactionActive).toBe(true);
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
await runner.transactional(testedFunc);
|
|
166
|
-
expect(qr?.isReleased).toBeTruthy();
|
|
167
|
-
});
|
|
168
|
-
it('correct commit transaction', async () => {
|
|
169
|
-
const testedFunc = async () => {
|
|
170
|
-
await (0, exports.createCat)();
|
|
171
|
-
await doSuccessful();
|
|
172
|
-
};
|
|
173
|
-
await runner.transactional(testedFunc);
|
|
174
|
-
const cats = await (0, exports.fetchCats)();
|
|
175
|
-
expect(cats).toMatchObject([util_1.cat, util_1.secondCat]);
|
|
176
|
-
});
|
|
177
|
-
it('correct rollback transaction', async () => {
|
|
178
|
-
const testedFunc = async () => {
|
|
179
|
-
await (0, exports.createCat)();
|
|
180
|
-
await doFailed();
|
|
181
|
-
};
|
|
182
|
-
const err = await runner.transactional(testedFunc).catch((e) => e);
|
|
183
|
-
expect(err).toBeInstanceOf(util_1.SyntheticException);
|
|
184
|
-
const cats = await (0, exports.fetchCats)();
|
|
185
|
-
expect(cats).toHaveLength(0);
|
|
186
|
-
});
|
|
187
|
-
it('correct rollback actions in nested function calls', async () => {
|
|
188
|
-
const testedFunc = async () => {
|
|
189
|
-
await (0, exports.createCat)();
|
|
190
|
-
await doSuccessful();
|
|
191
|
-
throw new util_1.SyntheticException();
|
|
192
|
-
};
|
|
193
|
-
const err = await runner.transactional(testedFunc).catch((e) => e);
|
|
194
|
-
expect(err).toBeInstanceOf(util_1.SyntheticException);
|
|
195
|
-
const cats = await (0, exports.fetchCats)();
|
|
196
|
-
expect(cats).toHaveLength(0);
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
describe('binded nested', () => {
|
|
200
|
-
const doSuccessfulCreateSecondCat = async () => {
|
|
201
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
202
|
-
return await (0, exports.createSecondCat)();
|
|
203
|
-
};
|
|
204
|
-
const contextDoSuccessful = (options = types_1.DEFAULT_ISOLATION_LEVEL) => runner.transactional(options, doSuccessfulCreateSecondCat);
|
|
205
|
-
const doFailed = async () => {
|
|
206
|
-
await doSuccessfulCreateSecondCat();
|
|
207
|
-
throw new util_1.SyntheticException();
|
|
208
|
-
};
|
|
209
|
-
const contextDoFailed = (options = types_1.DEFAULT_ISOLATION_LEVEL) => runner.transactional(options, doFailed);
|
|
210
|
-
it('correct run transaction', async () => {
|
|
211
|
-
const testedFunc = async () => {
|
|
212
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
213
|
-
await (0, exports.pingDatabase)();
|
|
214
|
-
await contextDoSuccessful();
|
|
215
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
216
|
-
};
|
|
217
|
-
await runner.transactional(testedFunc);
|
|
218
|
-
});
|
|
219
|
-
it('correct run nested transaction (savepoint)', async () => {
|
|
220
|
-
const testedFunc = async () => {
|
|
221
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
222
|
-
await runner.transactional(async () => {
|
|
223
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
224
|
-
return await (0, exports.createSecondCat)();
|
|
225
|
-
});
|
|
226
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
227
|
-
};
|
|
228
|
-
await runner.transactional(testedFunc);
|
|
229
|
-
});
|
|
230
|
-
it('correct release queryRunner', async () => {
|
|
231
|
-
let qr;
|
|
232
|
-
const testedFunc = async () => {
|
|
233
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
234
|
-
await (0, exports.pingDatabase)();
|
|
235
|
-
await contextDoSuccessful();
|
|
236
|
-
{
|
|
237
|
-
const queryRunner = initializer_1.Initializer.storage.getContext()?.queryRunner;
|
|
238
|
-
qr = queryRunner;
|
|
239
|
-
const transactionActive = queryRunner?.isTransactionActive;
|
|
240
|
-
expect(transactionActive).toBe(true);
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
|
-
await runner.transactional(testedFunc);
|
|
244
|
-
expect(qr?.isReleased).toBeTruthy();
|
|
245
|
-
});
|
|
246
|
-
it('correct commit transaction', async () => {
|
|
247
|
-
const testedFunc = async () => {
|
|
248
|
-
await (0, exports.createCat)();
|
|
249
|
-
await contextDoSuccessful();
|
|
250
|
-
};
|
|
251
|
-
await runner.transactional(testedFunc);
|
|
252
|
-
const cats = await (0, exports.fetchCats)();
|
|
253
|
-
expect(cats).toMatchObject([util_1.cat, util_1.secondCat]);
|
|
254
|
-
});
|
|
255
|
-
it('correct rollback transaction', async () => {
|
|
256
|
-
const testedFunc = async () => {
|
|
257
|
-
await (0, exports.createCat)();
|
|
258
|
-
await contextDoFailed();
|
|
259
|
-
};
|
|
260
|
-
const err = await runner.transactional(testedFunc).catch((e) => e);
|
|
261
|
-
expect(err).toBeInstanceOf(util_1.SyntheticException);
|
|
262
|
-
const cats = await (0, exports.fetchCats)();
|
|
263
|
-
expect(cats).toHaveLength(0);
|
|
264
|
-
});
|
|
265
|
-
});
|
|
266
|
-
/**
|
|
267
|
-
* - Поведение при вызове из обернутого в контекст с целевым `propagation` вложенного метода обернутого в контекст с `propagation`
|
|
268
|
-
* - NON_SUPPORTED
|
|
269
|
-
* - Проверить что внутренние обращения никак не аффектят внешний контекст, то есть в этих обращениях не используется внешнее соединение и как следствие действия внутри вложенного метода не будут откачены вместе с внешними
|
|
270
|
-
* - При исключении во вложенном методе сделанные внутри этого метода изменения в бд не будут откачены
|
|
271
|
-
* - REQUIRES_NEW
|
|
272
|
-
* - Проверить что внутренние обращения никак не аффектят внешний контекст, то есть в этих обращениях не используется внешнее соединение и как следствие действия внутри вложенного метода не будут откачены вместе с внешними
|
|
273
|
-
* - Изменения в БД сделанные после успешного завершения вложенного метода не должны быть откачены при завершении с ошибкой внешнего контекста
|
|
274
|
-
* - NESTED
|
|
275
|
-
* - Проверить что внутренние обращения создают транзакцию если её не было
|
|
276
|
-
* - Проверить что внутренние обращения создают savepoint если транзакция проинициализирована во внешнем контексте
|
|
277
|
-
* - Изменения в БД сделанные после успешного завершения вложенного метода должны быть откачены в случае неуспешного завершения внешнего контекста
|
|
278
|
-
* - Изменения в БД сделанные внутри метода, до выброса исключения должны быть откачены
|
|
279
|
-
* - REQUIRED
|
|
280
|
-
* - Проверить что внутренние обращения создают транзакцию если её не было
|
|
281
|
-
* - Проверить что внутренние обращения не создают savepoint если транзакция проинициализирована во внешнем контексте
|
|
282
|
-
* - Изменения в БД сделанные после успешного завершения вложенного метода должны быть откачены в случае неуспешного завершения внешнего контекста
|
|
283
|
-
* - Изменения в БД сделанные внутри метода, до выброса исключения не должны быть откачены
|
|
284
|
-
*/
|
|
285
|
-
describe('MANDATORY', () => {
|
|
286
|
-
const defaultOptions = {
|
|
287
|
-
isolation: types_1.DEFAULT_ISOLATION_LEVEL,
|
|
288
|
-
propagation: db_1.Propagation.MANDATORY,
|
|
289
|
-
};
|
|
290
|
-
const contextDoSuccessful = (isolationLevel = types_1.DEFAULT_ISOLATION_LEVEL) => runner.transactional({
|
|
291
|
-
isolation: isolationLevel,
|
|
292
|
-
propagation: db_1.Propagation.MANDATORY,
|
|
293
|
-
}, async () => {
|
|
294
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
295
|
-
return await (0, exports.createSecondCat)();
|
|
296
|
-
});
|
|
297
|
-
it('throw out of transaction context', async () => {
|
|
298
|
-
await expect(contextDoSuccessful()).rejects.toBeInstanceOf(db_1.CallOutOfContextWithMandatory);
|
|
299
|
-
});
|
|
300
|
-
it('correct run transaction', async () => {
|
|
301
|
-
const testedFunc = async () => {
|
|
302
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
303
|
-
await (0, exports.pingDatabase)();
|
|
304
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
305
|
-
};
|
|
306
|
-
await runner.transactional(testedFunc);
|
|
307
|
-
});
|
|
308
|
-
it('correct run new transaction', async () => {
|
|
309
|
-
const testedFunc = async () => {
|
|
310
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
311
|
-
await runner.transactional(defaultOptions, async () => {
|
|
312
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
313
|
-
return await (0, exports.createSecondCat)();
|
|
314
|
-
});
|
|
315
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
316
|
-
};
|
|
317
|
-
await runner.transactional(testedFunc);
|
|
318
|
-
});
|
|
319
|
-
it('correct run without nested transaction', async () => {
|
|
320
|
-
const testedFunc = async () => {
|
|
321
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
322
|
-
await runner.transactional({
|
|
323
|
-
isolation: types_1.DEFAULT_ISOLATION_LEVEL,
|
|
324
|
-
propagation: db_1.Propagation.REQUIRES_NEW,
|
|
325
|
-
}, async () => {
|
|
326
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
327
|
-
await (0, exports.createSecondCat)();
|
|
328
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
329
|
-
});
|
|
330
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
331
|
-
};
|
|
332
|
-
await runner.transactional(testedFunc);
|
|
333
|
-
});
|
|
334
|
-
it('non rollback actions in nested function calls', async () => {
|
|
335
|
-
const testedFunc = async () => {
|
|
336
|
-
try {
|
|
337
|
-
await runner.transactional(async () => {
|
|
338
|
-
await (0, exports.createCat)();
|
|
339
|
-
const cats = await (0, exports.fetchCats)();
|
|
340
|
-
expect(cats).toEqual([util_1.cat]);
|
|
341
|
-
throw new util_1.SyntheticException();
|
|
342
|
-
});
|
|
343
|
-
}
|
|
344
|
-
catch (e) {
|
|
345
|
-
const cats = await (0, exports.fetchCats)();
|
|
346
|
-
expect(cats).toHaveLength(1);
|
|
347
|
-
throw e;
|
|
348
|
-
}
|
|
349
|
-
};
|
|
350
|
-
await expect(runner.transactional(testedFunc)).rejects.toBeInstanceOf(util_1.SyntheticException);
|
|
351
|
-
const cats = await (0, exports.fetchCats)();
|
|
352
|
-
expect(cats).toHaveLength(0);
|
|
353
|
-
});
|
|
354
|
-
it('correct throw on call incompatible isolation levels', async () => {
|
|
355
|
-
const testedFunc = async () => {
|
|
356
|
-
await (0, exports.createCat)();
|
|
357
|
-
await contextDoSuccessful(types_1.IsolationLevel.READ_COMMITTED);
|
|
358
|
-
};
|
|
359
|
-
await expect(runner.transactional(testedFunc)).rejects.toBeInstanceOf(db_1.IncompatibleIsolationLevels);
|
|
360
|
-
const cats = await (0, exports.fetchCats)();
|
|
361
|
-
expect(cats).toHaveLength(0);
|
|
362
|
-
});
|
|
363
|
-
});
|
|
364
|
-
describe('NESTED', () => {
|
|
365
|
-
const usedPropagationLevel = db_1.Propagation.NESTED;
|
|
366
|
-
const defaultOptions = {
|
|
367
|
-
isolation: types_1.DEFAULT_ISOLATION_LEVEL,
|
|
368
|
-
propagation: usedPropagationLevel,
|
|
369
|
-
};
|
|
370
|
-
const contextDoSuccessful = (isolationLevel = types_1.DEFAULT_ISOLATION_LEVEL) => runner.transactional({
|
|
371
|
-
isolation: isolationLevel,
|
|
372
|
-
propagation: usedPropagationLevel,
|
|
373
|
-
}, async () => {
|
|
374
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
375
|
-
return await (0, exports.createSecondCat)();
|
|
376
|
-
});
|
|
377
|
-
it('correct run transaction', async () => {
|
|
378
|
-
const testedFunc = async () => {
|
|
379
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
380
|
-
await (0, exports.pingDatabase)();
|
|
381
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
382
|
-
};
|
|
383
|
-
await runner.transactional(testedFunc);
|
|
384
|
-
});
|
|
385
|
-
it('correct run new transaction', async () => {
|
|
386
|
-
const testedFunc = async () => {
|
|
387
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
388
|
-
await runner.transactional(defaultOptions, async () => {
|
|
389
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
390
|
-
await (0, exports.createSecondCat)();
|
|
391
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
392
|
-
});
|
|
393
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
394
|
-
};
|
|
395
|
-
await runner.transactional(defaultOptions, testedFunc);
|
|
396
|
-
});
|
|
397
|
-
it('throw for incompatible isolation levels', async () => {
|
|
398
|
-
const testedFunc = async () => {
|
|
399
|
-
await (0, exports.createCat)();
|
|
400
|
-
await contextDoSuccessful(types_1.IsolationLevel.READ_COMMITTED);
|
|
401
|
-
};
|
|
402
|
-
await expect(runner.transactional(testedFunc)).rejects.toBeInstanceOf(db_1.IncompatibleIsolationLevels);
|
|
403
|
-
const cats = await (0, exports.fetchCats)();
|
|
404
|
-
expect(cats).toHaveLength(0);
|
|
405
|
-
});
|
|
406
|
-
it('non rollback actions in nested function calls', async () => {
|
|
407
|
-
const testedFunc = async () => {
|
|
408
|
-
try {
|
|
409
|
-
await runner.transactional(defaultOptions, async () => {
|
|
410
|
-
await (0, exports.createCat)();
|
|
411
|
-
const cats = await (0, exports.fetchCats)();
|
|
412
|
-
expect(cats).toEqual([util_1.cat]);
|
|
413
|
-
throw new util_1.SyntheticException();
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
catch (e) {
|
|
417
|
-
const cats = await (0, exports.fetchCats)();
|
|
418
|
-
expect(cats).toHaveLength(0);
|
|
419
|
-
throw e;
|
|
420
|
-
}
|
|
421
|
-
};
|
|
422
|
-
await expect(runner.transactional(testedFunc)).rejects.toBeInstanceOf(util_1.SyntheticException);
|
|
423
|
-
const cats = await (0, exports.fetchCats)();
|
|
424
|
-
expect(cats).toHaveLength(0);
|
|
425
|
-
});
|
|
426
|
-
});
|
|
427
|
-
describe('NEVER', () => {
|
|
428
|
-
const usedPropagationLevel = db_1.Propagation.NEVER;
|
|
429
|
-
const defaultOptions = {
|
|
430
|
-
isolation: types_1.DEFAULT_ISOLATION_LEVEL,
|
|
431
|
-
propagation: usedPropagationLevel,
|
|
432
|
-
};
|
|
433
|
-
const contextDoSuccessful = (isolationLevel = types_1.DEFAULT_ISOLATION_LEVEL) => runner.transactional({
|
|
434
|
-
isolation: isolationLevel,
|
|
435
|
-
propagation: usedPropagationLevel,
|
|
436
|
-
}, async () => {
|
|
437
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
438
|
-
return await (0, exports.createSecondCat)();
|
|
439
|
-
});
|
|
440
|
-
it('correct run non transaction', async () => {
|
|
441
|
-
const testedFunc = async () => {
|
|
442
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
443
|
-
await (0, exports.pingDatabase)();
|
|
444
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
445
|
-
};
|
|
446
|
-
await runner.transactional(defaultOptions, testedFunc);
|
|
447
|
-
});
|
|
448
|
-
it('correct run nested transaction', async () => {
|
|
449
|
-
const testedFunc = async () => {
|
|
450
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
451
|
-
await runner.transactional(async () => {
|
|
452
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
453
|
-
await (0, exports.createSecondCat)();
|
|
454
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
455
|
-
});
|
|
456
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
457
|
-
};
|
|
458
|
-
await runner.transactional(defaultOptions, testedFunc);
|
|
459
|
-
});
|
|
460
|
-
it('correct throw on call in transaction', async () => {
|
|
461
|
-
const testedFunc = async () => {
|
|
462
|
-
await (0, exports.createCat)();
|
|
463
|
-
await contextDoSuccessful();
|
|
464
|
-
};
|
|
465
|
-
await expect(runner.transactional(testedFunc)).rejects.toBeInstanceOf(db_1.NeverRunningInTransaction);
|
|
466
|
-
const cats = await (0, exports.fetchCats)();
|
|
467
|
-
expect(cats).toHaveLength(0);
|
|
468
|
-
});
|
|
469
|
-
});
|
|
470
|
-
describe('NOT_SUPPORTED', () => {
|
|
471
|
-
const usedPropagationLevel = db_1.Propagation.NOT_SUPPORTED;
|
|
472
|
-
const defaultOptions = {
|
|
473
|
-
isolation: types_1.DEFAULT_ISOLATION_LEVEL,
|
|
474
|
-
propagation: usedPropagationLevel,
|
|
475
|
-
};
|
|
476
|
-
const contextDoSuccessful = async (isolationLevel = types_1.DEFAULT_ISOLATION_LEVEL) => await runner.transactional({
|
|
477
|
-
isolation: isolationLevel,
|
|
478
|
-
propagation: usedPropagationLevel,
|
|
479
|
-
}, async () => {
|
|
480
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
481
|
-
await (0, exports.createSecondCat)();
|
|
482
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
483
|
-
});
|
|
484
|
-
it('correct run transaction', async () => {
|
|
485
|
-
const testedFunc = async () => {
|
|
486
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
487
|
-
await (0, exports.pingDatabase)();
|
|
488
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
489
|
-
await contextDoSuccessful();
|
|
490
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
491
|
-
};
|
|
492
|
-
await runner.transactional(testedFunc);
|
|
493
|
-
});
|
|
494
|
-
it('correct run new transaction', async () => {
|
|
495
|
-
const testedFunc = async () => {
|
|
496
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
497
|
-
await runner.transactional(defaultOptions, async () => {
|
|
498
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
499
|
-
await (0, exports.createSecondCat)();
|
|
500
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
501
|
-
});
|
|
502
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
503
|
-
};
|
|
504
|
-
await runner.transactional(defaultOptions, testedFunc);
|
|
505
|
-
});
|
|
506
|
-
it('correct run without nested transaction', async () => {
|
|
507
|
-
const testedFunc = async () => {
|
|
508
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
509
|
-
await runner.transactional(defaultOptions, async () => {
|
|
510
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
511
|
-
await (0, exports.createSecondCat)();
|
|
512
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
513
|
-
});
|
|
514
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
515
|
-
};
|
|
516
|
-
await runner.transactional(testedFunc);
|
|
517
|
-
});
|
|
518
|
-
it('correct run for incompatible isolation levels', async () => {
|
|
519
|
-
const testedFunc = async () => {
|
|
520
|
-
await (0, exports.createCat)();
|
|
521
|
-
await contextDoSuccessful();
|
|
522
|
-
};
|
|
523
|
-
await runner.transactional(testedFunc);
|
|
524
|
-
const cats = await (0, exports.fetchCats)();
|
|
525
|
-
expect(cats).toEqual([util_1.cat, util_1.secondCat]);
|
|
526
|
-
});
|
|
527
|
-
it('non rollback actions in nested function calls', async () => {
|
|
528
|
-
const testedFunc = async () => {
|
|
529
|
-
try {
|
|
530
|
-
await runner.transactional(defaultOptions, async () => {
|
|
531
|
-
await (0, exports.createCat)();
|
|
532
|
-
const cats = await (0, exports.fetchCats)();
|
|
533
|
-
expect(cats).toEqual([util_1.cat]);
|
|
534
|
-
throw new util_1.SyntheticException();
|
|
535
|
-
});
|
|
536
|
-
}
|
|
537
|
-
catch (e) {
|
|
538
|
-
const cats = await (0, exports.fetchCats)();
|
|
539
|
-
expect(cats).toEqual([util_1.cat]);
|
|
540
|
-
throw e;
|
|
541
|
-
}
|
|
542
|
-
};
|
|
543
|
-
await expect(runner.transactional(testedFunc)).rejects.toBeInstanceOf(util_1.SyntheticException);
|
|
544
|
-
const cats = await (0, exports.fetchCats)();
|
|
545
|
-
expect(cats).toEqual([util_1.cat]);
|
|
546
|
-
});
|
|
547
|
-
});
|
|
548
|
-
describe('REQUIRED', () => {
|
|
549
|
-
const usedPropagationLevel = db_1.Propagation.REQUIRED;
|
|
550
|
-
const defaultOptions = {
|
|
551
|
-
isolation: types_1.DEFAULT_ISOLATION_LEVEL,
|
|
552
|
-
propagation: usedPropagationLevel,
|
|
553
|
-
};
|
|
554
|
-
const contextDoSuccessful = (isolationLevel = types_1.DEFAULT_ISOLATION_LEVEL) => runner.transactional({
|
|
555
|
-
isolation: isolationLevel,
|
|
556
|
-
propagation: usedPropagationLevel,
|
|
557
|
-
}, async () => {
|
|
558
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
559
|
-
return await (0, exports.createSecondCat)();
|
|
560
|
-
});
|
|
561
|
-
it('correct run transaction', async () => {
|
|
562
|
-
const testedFunc = async () => {
|
|
563
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
564
|
-
await (0, exports.pingDatabase)();
|
|
565
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
566
|
-
};
|
|
567
|
-
await runner.transactional(testedFunc);
|
|
568
|
-
});
|
|
569
|
-
it('correct run new transaction', async () => {
|
|
570
|
-
const testedFunc = async () => {
|
|
571
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
572
|
-
await runner.transactional(async () => {
|
|
573
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
574
|
-
await (0, exports.createSecondCat)();
|
|
575
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
576
|
-
});
|
|
577
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
578
|
-
};
|
|
579
|
-
await runner.transactional(testedFunc);
|
|
580
|
-
});
|
|
581
|
-
it('correct run without nested transaction', async () => {
|
|
582
|
-
const testedFunc = async () => {
|
|
583
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
584
|
-
await runner.transactional(defaultOptions, async () => {
|
|
585
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
586
|
-
await (0, exports.createSecondCat)();
|
|
587
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
588
|
-
});
|
|
589
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
590
|
-
};
|
|
591
|
-
await runner.transactional(testedFunc);
|
|
592
|
-
});
|
|
593
|
-
it('correct run for incompatible isolation levels', async () => {
|
|
594
|
-
const testedFunc = async () => {
|
|
595
|
-
await (0, exports.createCat)();
|
|
596
|
-
await contextDoSuccessful(types_1.IsolationLevel.READ_COMMITTED);
|
|
597
|
-
};
|
|
598
|
-
await expect(runner.transactional(testedFunc)).rejects.toBeInstanceOf(db_1.IncompatibleIsolationLevels);
|
|
599
|
-
const cats = await (0, exports.fetchCats)();
|
|
600
|
-
expect(cats).toHaveLength(0);
|
|
601
|
-
});
|
|
602
|
-
it('non rollback actions in nested function calls', async () => {
|
|
603
|
-
const testedFunc = async () => {
|
|
604
|
-
try {
|
|
605
|
-
await runner.transactional(defaultOptions, async () => {
|
|
606
|
-
await (0, exports.createCat)();
|
|
607
|
-
const cats = await (0, exports.fetchCats)();
|
|
608
|
-
expect(cats).toEqual([util_1.cat]);
|
|
609
|
-
throw new util_1.SyntheticException();
|
|
610
|
-
});
|
|
611
|
-
}
|
|
612
|
-
catch (e) {
|
|
613
|
-
const cats = await (0, exports.fetchCats)();
|
|
614
|
-
expect(cats).toHaveLength(1);
|
|
615
|
-
throw e;
|
|
616
|
-
}
|
|
617
|
-
};
|
|
618
|
-
await expect(runner.transactional(testedFunc)).rejects.toBeInstanceOf(util_1.SyntheticException);
|
|
619
|
-
const cats = await (0, exports.fetchCats)();
|
|
620
|
-
expect(cats).toHaveLength(0);
|
|
621
|
-
});
|
|
622
|
-
it('correct throw on call incompatible isolation levels', async () => {
|
|
623
|
-
const testedFunc = async () => {
|
|
624
|
-
await (0, exports.createCat)();
|
|
625
|
-
await contextDoSuccessful(types_1.IsolationLevel.READ_COMMITTED);
|
|
626
|
-
};
|
|
627
|
-
await expect(runner.transactional(testedFunc)).rejects.toBeInstanceOf(db_1.IncompatibleIsolationLevels);
|
|
628
|
-
const cats = await (0, exports.fetchCats)();
|
|
629
|
-
expect(cats).toHaveLength(0);
|
|
630
|
-
});
|
|
631
|
-
});
|
|
632
|
-
describe('REQUIRES_NEW', () => {
|
|
633
|
-
const usedPropagationLevel = db_1.Propagation.REQUIRES_NEW;
|
|
634
|
-
const defaultOptions = {
|
|
635
|
-
isolation: types_1.DEFAULT_ISOLATION_LEVEL,
|
|
636
|
-
propagation: usedPropagationLevel,
|
|
637
|
-
};
|
|
638
|
-
const contextDoSuccessful = (isolationLevel = types_1.DEFAULT_ISOLATION_LEVEL) => runner.transactional({
|
|
639
|
-
isolation: isolationLevel,
|
|
640
|
-
propagation: usedPropagationLevel,
|
|
641
|
-
}, async () => {
|
|
642
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
643
|
-
await (0, exports.createSecondCat)();
|
|
644
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
645
|
-
});
|
|
646
|
-
it('correct run transaction', async () => {
|
|
647
|
-
const testedFunc = async () => {
|
|
648
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
649
|
-
await (0, exports.pingDatabase)();
|
|
650
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
651
|
-
await contextDoSuccessful();
|
|
652
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
653
|
-
};
|
|
654
|
-
await runner.transactional(testedFunc);
|
|
655
|
-
});
|
|
656
|
-
it('correct run new transaction', async () => {
|
|
657
|
-
const testedFunc = async () => {
|
|
658
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
659
|
-
/**
|
|
660
|
-
* Не должно задействовать текущее соединение
|
|
661
|
-
*/
|
|
662
|
-
await contextDoSuccessful();
|
|
663
|
-
/**
|
|
664
|
-
* Убеждаемся в том что текущий контекст так и не был проинициализирован
|
|
665
|
-
*/
|
|
666
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
667
|
-
};
|
|
668
|
-
await runner.transactional(defaultOptions, testedFunc);
|
|
669
|
-
});
|
|
670
|
-
it('correct run for incompatible isolation levels', async () => {
|
|
671
|
-
const testedFunc = async () => {
|
|
672
|
-
await (0, exports.createCat)();
|
|
673
|
-
const cats = await (0, exports.fetchCats)();
|
|
674
|
-
expect(cats).toEqual([util_1.cat]);
|
|
675
|
-
/**
|
|
676
|
-
* Исключения не будет так как будет использовано другое соединение
|
|
677
|
-
*/
|
|
678
|
-
await contextDoSuccessful(types_1.IsolationLevel.READ_COMMITTED);
|
|
679
|
-
const cats2 = await (0, exports.fetchCats)();
|
|
680
|
-
expect(cats2).toEqual([util_1.cat, util_1.secondCat]);
|
|
681
|
-
};
|
|
682
|
-
await runner.transactional(testedFunc);
|
|
683
|
-
const cats = await (0, exports.fetchCats)();
|
|
684
|
-
expect(cats).toEqual([util_1.cat, util_1.secondCat]);
|
|
685
|
-
});
|
|
686
|
-
it('rollback actions in nested function calls', async () => {
|
|
687
|
-
const testedFunc = async () => {
|
|
688
|
-
try {
|
|
689
|
-
await runner.transactional(defaultOptions, async () => {
|
|
690
|
-
await (0, exports.createCat)();
|
|
691
|
-
const cats = await (0, exports.fetchCats)();
|
|
692
|
-
expect(cats).toEqual([util_1.cat]);
|
|
693
|
-
throw new util_1.SyntheticException();
|
|
694
|
-
});
|
|
695
|
-
}
|
|
696
|
-
catch (e) {
|
|
697
|
-
const cats = await (0, exports.fetchCats)();
|
|
698
|
-
expect(cats).toHaveLength(0);
|
|
699
|
-
throw e;
|
|
700
|
-
}
|
|
701
|
-
};
|
|
702
|
-
await expect(runner.transactional(testedFunc)).rejects.toBeInstanceOf(util_1.SyntheticException);
|
|
703
|
-
const cats = await (0, exports.fetchCats)();
|
|
704
|
-
expect(cats).toHaveLength(0);
|
|
705
|
-
});
|
|
706
|
-
it('non rollback actions in nested function calls', async () => {
|
|
707
|
-
const testedFunc = async () => {
|
|
708
|
-
await runner.transactional(defaultOptions, async () => {
|
|
709
|
-
await (0, exports.createCat)();
|
|
710
|
-
const cats = await (0, exports.fetchCats)();
|
|
711
|
-
expect(cats).toEqual([util_1.cat]);
|
|
712
|
-
});
|
|
713
|
-
/**
|
|
714
|
-
* Изменения вложенного вызова не должны быть откачены
|
|
715
|
-
*/
|
|
716
|
-
throw new util_1.SyntheticException();
|
|
717
|
-
};
|
|
718
|
-
await expect(runner.transactional(testedFunc)).rejects.toBeInstanceOf(util_1.SyntheticException);
|
|
719
|
-
const cats = await (0, exports.fetchCats)();
|
|
720
|
-
expect(cats).toEqual([util_1.cat]);
|
|
721
|
-
});
|
|
722
|
-
});
|
|
723
|
-
describe('SUPPORTS', () => {
|
|
724
|
-
const usedPropagationLevel = db_1.Propagation.SUPPORTS;
|
|
725
|
-
const contextDoSuccessful = (isolationLevel = types_1.DEFAULT_ISOLATION_LEVEL) => runner.transactional({
|
|
726
|
-
isolation: isolationLevel,
|
|
727
|
-
propagation: usedPropagationLevel,
|
|
728
|
-
}, async () => {
|
|
729
|
-
return await (0, exports.createSecondCat)();
|
|
730
|
-
});
|
|
731
|
-
it('correct run transaction', async () => {
|
|
732
|
-
const testedFunc = async () => {
|
|
733
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
734
|
-
await (0, exports.pingDatabase)();
|
|
735
|
-
await contextDoSuccessful();
|
|
736
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
737
|
-
};
|
|
738
|
-
await runner.transactional(testedFunc);
|
|
739
|
-
});
|
|
740
|
-
it('correct run new transaction', async () => {
|
|
741
|
-
const testedFunc = async () => {
|
|
742
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
743
|
-
await runner.transactional(async () => {
|
|
744
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
745
|
-
return await (0, exports.createSecondCat)();
|
|
746
|
-
});
|
|
747
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
748
|
-
};
|
|
749
|
-
await runner.transactional(testedFunc);
|
|
750
|
-
});
|
|
751
|
-
it('correct run without nested transaction', async () => {
|
|
752
|
-
const testedFunc = async () => {
|
|
753
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
754
|
-
await runner.transactional({
|
|
755
|
-
isolation: types_1.DEFAULT_ISOLATION_LEVEL,
|
|
756
|
-
propagation: usedPropagationLevel,
|
|
757
|
-
}, async () => {
|
|
758
|
-
(0, util_1.contextTransactionMustNotInitialized)();
|
|
759
|
-
await (0, exports.createSecondCat)();
|
|
760
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
761
|
-
});
|
|
762
|
-
(0, util_1.contextTransactionMustBeInitialized)();
|
|
763
|
-
};
|
|
764
|
-
await runner.transactional(testedFunc);
|
|
765
|
-
});
|
|
766
|
-
it('correct run for incompatible isolation levels', async () => {
|
|
767
|
-
const testedFunc = async () => {
|
|
768
|
-
await (0, exports.createCat)();
|
|
769
|
-
/**
|
|
770
|
-
* Всё должно сработать так как мы создаём новую транзакцию
|
|
771
|
-
*/
|
|
772
|
-
await contextDoSuccessful(types_1.IsolationLevel.READ_COMMITTED);
|
|
773
|
-
};
|
|
774
|
-
await runner.transactional(testedFunc);
|
|
775
|
-
const cats = await (0, exports.fetchCats)();
|
|
776
|
-
expect(cats).toEqual([util_1.cat, util_1.secondCat]);
|
|
777
|
-
});
|
|
778
|
-
});
|
|
779
|
-
//# sourceMappingURL=strategy.test.e2e.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"strategy.test.e2e.js","sourceRoot":"","sources":["../../../src/internal/test/strategy.test.e2e.ts"],"names":[],"mappings":"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"}
|