@proteinjs/db 1.19.0 → 1.20.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/CHANGELOG.md +16 -0
- package/dist/generated/index.js +1 -1
- package/dist/generated/index.js.map +1 -1
- package/dist/generated/test/index.d.ts +1 -1
- package/dist/generated/test/index.d.ts.map +1 -1
- package/dist/generated/test/index.js +50 -32
- package/dist/generated/test/index.js.map +1 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -6
- package/dist/index.js.map +1 -1
- package/dist/src/Db.d.ts +2 -2
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +6 -3
- package/dist/src/Db.js.map +1 -1
- package/dist/src/TableWatcherRunner.d.ts.map +1 -1
- package/dist/src/TableWatcherRunner.js +4 -1
- package/dist/src/TableWatcherRunner.js.map +1 -1
- package/dist/src/schema/TableManager.d.ts.map +1 -1
- package/dist/src/schema/TableManager.js +4 -1
- package/dist/src/schema/TableManager.js.map +1 -1
- package/dist/test/index.d.ts +13 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +29 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test/reusable/CascadeDeleteTests.d.ts +1 -189
- package/dist/test/reusable/CascadeDeleteTests.d.ts.map +1 -1
- package/dist/test/reusable/CascadeDeleteTests.js +36 -393
- package/dist/test/reusable/CascadeDeleteTests.js.map +1 -1
- package/dist/test/reusable/ColumnTypesTests.d.ts +1 -52
- package/dist/test/reusable/ColumnTypesTests.d.ts.map +1 -1
- package/dist/test/reusable/ColumnTypesTests.js +20 -86
- package/dist/test/reusable/ColumnTypesTests.js.map +1 -1
- package/dist/test/reusable/CrudTests.d.ts +1 -50
- package/dist/test/reusable/CrudTests.d.ts.map +1 -1
- package/dist/test/reusable/CrudTests.js +37 -126
- package/dist/test/reusable/CrudTests.js.map +1 -1
- package/dist/test/reusable/DynamicReferenceColumnTests.d.ts +3 -0
- package/dist/test/reusable/DynamicReferenceColumnTests.d.ts.map +1 -0
- package/dist/test/reusable/DynamicReferenceColumnTests.js +429 -0
- package/dist/test/reusable/DynamicReferenceColumnTests.js.map +1 -0
- package/dist/test/reusable/TableManagerTests.d.ts +1 -2
- package/dist/test/reusable/TableManagerTests.d.ts.map +1 -1
- package/dist/test/reusable/TableManagerTests.js +57 -152
- package/dist/test/reusable/TableManagerTests.js.map +1 -1
- package/dist/test/reusable/TransactionTests.d.ts +1 -51
- package/dist/test/reusable/TransactionTests.d.ts.map +1 -1
- package/dist/test/reusable/TransactionTests.js +24 -111
- package/dist/test/reusable/TransactionTests.js.map +1 -1
- package/dist/test/util/DbTestEnvironment.d.ts +12 -0
- package/dist/test/util/DbTestEnvironment.d.ts.map +1 -0
- package/dist/test/util/DbTestEnvironment.js +125 -0
- package/dist/test/util/DbTestEnvironment.js.map +1 -0
- package/dist/test/util/tables/cascadeDeleteTestTables.d.ts +191 -0
- package/dist/test/util/tables/cascadeDeleteTestTables.d.ts.map +1 -0
- package/dist/test/util/tables/cascadeDeleteTestTables.js +234 -0
- package/dist/test/util/tables/cascadeDeleteTestTables.js.map +1 -0
- package/dist/test/util/tables/columnTypesTestTables.d.ts +47 -0
- package/dist/test/util/tables/columnTypesTestTables.d.ts.map +1 -0
- package/dist/test/util/tables/columnTypesTestTables.js +49 -0
- package/dist/test/util/tables/columnTypesTestTables.js.map +1 -0
- package/dist/test/util/tables/crudTestTables.d.ts +48 -0
- package/dist/test/util/tables/crudTestTables.d.ts.map +1 -0
- package/dist/test/util/tables/crudTestTables.js +58 -0
- package/dist/test/util/tables/crudTestTables.js.map +1 -0
- package/dist/test/util/tables/dynamicReferenceColumnTestTables.d.ts +76 -0
- package/dist/test/util/tables/dynamicReferenceColumnTestTables.d.ts.map +1 -0
- package/dist/test/util/tables/dynamicReferenceColumnTestTables.js +131 -0
- package/dist/test/util/tables/dynamicReferenceColumnTestTables.js.map +1 -0
- package/dist/test/util/tables/tableManagerTestTables.d.ts +86 -0
- package/dist/test/util/tables/tableManagerTestTables.d.ts.map +1 -0
- package/dist/test/util/tables/tableManagerTestTables.js +131 -0
- package/dist/test/util/tables/tableManagerTestTables.js.map +1 -0
- package/dist/test/util/tables/transactionTestTables.d.ts +48 -0
- package/dist/test/util/tables/transactionTestTables.d.ts.map +1 -0
- package/dist/test/util/tables/transactionTestTables.js +58 -0
- package/dist/test/util/tables/transactionTestTables.js.map +1 -0
- package/generated/index.ts +1 -1
- package/generated/test/index.ts +35 -17
- package/index.ts +0 -7
- package/package.json +23 -10
- package/src/Db.ts +8 -3
- package/src/TableWatcherRunner.ts +4 -1
- package/src/schema/TableManager.ts +4 -1
- package/test/index.ts +13 -0
- package/test/reusable/CascadeDeleteTests.ts +38 -320
- package/test/reusable/ColumnTypesTests.ts +9 -85
- package/test/reusable/CrudTests.ts +26 -97
- package/test/reusable/DynamicReferenceColumnTests.ts +342 -0
- package/test/reusable/TableManagerTests.ts +18 -97
- package/test/reusable/TransactionTests.ts +26 -93
- package/test/util/DbTestEnvironment.ts +46 -0
- package/test/util/tables/cascadeDeleteTestTables.ts +232 -0
- package/test/util/tables/columnTypesTestTables.ts +63 -0
- package/test/util/tables/crudTestTables.ts +44 -0
- package/test/util/tables/dynamicReferenceColumnTestTables.ts +87 -0
- package/test/util/tables/tableManagerTestTables.ts +98 -0
- package/test/util/tables/transactionTestTables.ts +44 -0
- package/tsconfig.json +7 -1
- package/dist/test/reusable/DynamicReferenceColumn.d.ts +0 -77
- package/dist/test/reusable/DynamicReferenceColumn.d.ts.map +0 -1
- package/dist/test/reusable/DynamicReferenceColumn.js +0 -656
- package/dist/test/reusable/DynamicReferenceColumn.js.map +0 -1
- package/test/reusable/DynamicReferenceColumn.ts +0 -487
|
@@ -1,656 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __extends = (this && this.__extends) || (function () {
|
|
3
|
-
var extendStatics = function (d, b) {
|
|
4
|
-
extendStatics = Object.setPrototypeOf ||
|
|
5
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
-
return extendStatics(d, b);
|
|
8
|
-
};
|
|
9
|
-
return function (d, b) {
|
|
10
|
-
if (typeof b !== "function" && b !== null)
|
|
11
|
-
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
-
extendStatics(d, b);
|
|
13
|
-
function __() { this.constructor = d; }
|
|
14
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
-
};
|
|
16
|
-
})();
|
|
17
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
28
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
-
function step(op) {
|
|
31
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
33
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
34
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
-
switch (op[0]) {
|
|
36
|
-
case 0: case 1: t = op; break;
|
|
37
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
-
default:
|
|
41
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
-
if (t[2]) _.ops.pop();
|
|
46
|
-
_.trys.pop(); continue;
|
|
47
|
-
}
|
|
48
|
-
op = body.call(thisArg, _);
|
|
49
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
-
exports.dynamicReferenceColumnTests = exports.getDynamicReferenceColumnTestTable = void 0;
|
|
55
|
-
var Columns_1 = require("../../src/Columns");
|
|
56
|
-
var Db_1 = require("../../src/Db");
|
|
57
|
-
var Reference_1 = require("../../src/reference/Reference");
|
|
58
|
-
var Table_1 = require("../../src/Table");
|
|
59
|
-
var Record_1 = require("../../src/Record");
|
|
60
|
-
var db_query_1 = require("@proteinjs/db-query");
|
|
61
|
-
var ProjectAssignmentTable = /** @class */ (function (_super) {
|
|
62
|
-
__extends(ProjectAssignmentTable, _super);
|
|
63
|
-
function ProjectAssignmentTable() {
|
|
64
|
-
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
65
|
-
_this.name = 'db_test_project_assignments';
|
|
66
|
-
_this.columns = (0, Record_1.withRecordColumns)({
|
|
67
|
-
projectName: new Columns_1.StringColumn('project_name'),
|
|
68
|
-
employeeTableName: new Columns_1.DynamicReferenceTableNameColumn('employee_table_name', 'employee_ref'),
|
|
69
|
-
employeeRef: new Columns_1.DynamicReferenceColumn('employee_ref', 'employee_table_name', true // Enable cascade delete for testing
|
|
70
|
-
),
|
|
71
|
-
projectLeadTableName: new Columns_1.DynamicReferenceTableNameColumn('project_lead_table_name', 'project_lead_ref', {
|
|
72
|
-
defaultValue: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
73
|
-
return [2 /*return*/, 'TEST_DEFAULT_VALUE'];
|
|
74
|
-
}); }); },
|
|
75
|
-
updateValue: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
76
|
-
return [2 /*return*/, 'TEST_UPDATE_VALUE'];
|
|
77
|
-
}); }); },
|
|
78
|
-
}),
|
|
79
|
-
projectLeadRef: new Columns_1.DynamicReferenceColumn('project_lead_ref', 'project_lead_table_name', true // Enable cascade delete for testing
|
|
80
|
-
),
|
|
81
|
-
startDate: new Columns_1.StringColumn('start_date'),
|
|
82
|
-
});
|
|
83
|
-
return _this;
|
|
84
|
-
}
|
|
85
|
-
return ProjectAssignmentTable;
|
|
86
|
-
}(Table_1.Table));
|
|
87
|
-
var EngineerTable = /** @class */ (function (_super) {
|
|
88
|
-
__extends(EngineerTable, _super);
|
|
89
|
-
function EngineerTable() {
|
|
90
|
-
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
91
|
-
_this.name = 'db_test_engineers';
|
|
92
|
-
_this.columns = (0, Record_1.withRecordColumns)({
|
|
93
|
-
name: new Columns_1.StringColumn('name'),
|
|
94
|
-
yearsOfExperience: new Columns_1.StringColumn('years_of_experience'),
|
|
95
|
-
});
|
|
96
|
-
return _this;
|
|
97
|
-
}
|
|
98
|
-
return EngineerTable;
|
|
99
|
-
}(Table_1.Table));
|
|
100
|
-
var DesignerTable = /** @class */ (function (_super) {
|
|
101
|
-
__extends(DesignerTable, _super);
|
|
102
|
-
function DesignerTable() {
|
|
103
|
-
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
104
|
-
_this.name = 'db_test_designers';
|
|
105
|
-
_this.columns = (0, Record_1.withRecordColumns)({
|
|
106
|
-
name: new Columns_1.StringColumn('name'),
|
|
107
|
-
specialization: new Columns_1.StringColumn('specialization'),
|
|
108
|
-
});
|
|
109
|
-
return _this;
|
|
110
|
-
}
|
|
111
|
-
return DesignerTable;
|
|
112
|
-
}(Table_1.Table));
|
|
113
|
-
var ProjectManagerTable = /** @class */ (function (_super) {
|
|
114
|
-
__extends(ProjectManagerTable, _super);
|
|
115
|
-
function ProjectManagerTable() {
|
|
116
|
-
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
117
|
-
_this.name = 'db_test_project_managers';
|
|
118
|
-
_this.columns = (0, Record_1.withRecordColumns)({
|
|
119
|
-
name: new Columns_1.StringColumn('name'),
|
|
120
|
-
certificate: new Columns_1.StringColumn('certificate'),
|
|
121
|
-
});
|
|
122
|
-
return _this;
|
|
123
|
-
}
|
|
124
|
-
return ProjectManagerTable;
|
|
125
|
-
}(Table_1.Table));
|
|
126
|
-
// Invalid table with missing DynamicReferenceTableNameColumn
|
|
127
|
-
var InvalidTableMissingTableName = /** @class */ (function (_super) {
|
|
128
|
-
__extends(InvalidTableMissingTableName, _super);
|
|
129
|
-
function InvalidTableMissingTableName() {
|
|
130
|
-
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
131
|
-
_this.name = 'db_test_invalid_missing_table_name';
|
|
132
|
-
_this.columns = (0, Record_1.withRecordColumns)({
|
|
133
|
-
// Only has DynamicReferenceColumn without its required table name column
|
|
134
|
-
employeeRef: new Columns_1.DynamicReferenceColumn('employee_ref', 'employee_table_name', // References a non-existent column
|
|
135
|
-
true),
|
|
136
|
-
});
|
|
137
|
-
return _this;
|
|
138
|
-
}
|
|
139
|
-
return InvalidTableMissingTableName;
|
|
140
|
-
}(Table_1.Table));
|
|
141
|
-
// Invalid table with unused DynamicReferenceTableNameColumn
|
|
142
|
-
var InvalidTableUnusedTableName = /** @class */ (function (_super) {
|
|
143
|
-
__extends(InvalidTableUnusedTableName, _super);
|
|
144
|
-
function InvalidTableUnusedTableName() {
|
|
145
|
-
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
146
|
-
_this.name = 'db_test_invalid_unused_table_name';
|
|
147
|
-
_this.columns = (0, Record_1.withRecordColumns)({
|
|
148
|
-
// Has DynamicReferenceTableNameColumn but no DynamicReferenceColumn using it
|
|
149
|
-
employeeTableName: new Columns_1.DynamicReferenceTableNameColumn('employee_table_name', 'employee_ref'),
|
|
150
|
-
});
|
|
151
|
-
return _this;
|
|
152
|
-
}
|
|
153
|
-
return InvalidTableUnusedTableName;
|
|
154
|
-
}(Table_1.Table));
|
|
155
|
-
/** Used for testing purposes only. */
|
|
156
|
-
var getDynamicReferenceColumnTestTable = function (tableName) {
|
|
157
|
-
var projectAssignmentTable = new ProjectAssignmentTable();
|
|
158
|
-
var engineerTable = new EngineerTable();
|
|
159
|
-
var designerTable = new DesignerTable();
|
|
160
|
-
var projectManagerTable = new ProjectManagerTable();
|
|
161
|
-
switch (tableName) {
|
|
162
|
-
case projectAssignmentTable.name:
|
|
163
|
-
return projectAssignmentTable;
|
|
164
|
-
case engineerTable.name:
|
|
165
|
-
return engineerTable;
|
|
166
|
-
case designerTable.name:
|
|
167
|
-
return designerTable;
|
|
168
|
-
case projectManagerTable.name:
|
|
169
|
-
return projectManagerTable;
|
|
170
|
-
default:
|
|
171
|
-
throw new Error("Cannot find test table: ".concat(tableName));
|
|
172
|
-
}
|
|
173
|
-
};
|
|
174
|
-
exports.getDynamicReferenceColumnTestTable = getDynamicReferenceColumnTestTable;
|
|
175
|
-
// Test suite
|
|
176
|
-
var dynamicReferenceColumnTests = function (driver, dropTable) {
|
|
177
|
-
return function () {
|
|
178
|
-
var projectAssignmentTable;
|
|
179
|
-
var engineerTable;
|
|
180
|
-
var designerTable;
|
|
181
|
-
var projectManagerTable;
|
|
182
|
-
var db = new Db_1.Db(driver, exports.getDynamicReferenceColumnTestTable);
|
|
183
|
-
beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
184
|
-
return __generator(this, function (_a) {
|
|
185
|
-
switch (_a.label) {
|
|
186
|
-
case 0:
|
|
187
|
-
if (!driver.start) return [3 /*break*/, 2];
|
|
188
|
-
return [4 /*yield*/, driver.start()];
|
|
189
|
-
case 1:
|
|
190
|
-
_a.sent();
|
|
191
|
-
_a.label = 2;
|
|
192
|
-
case 2: return [4 /*yield*/, driver.getTableManager().loadTable(new ProjectAssignmentTable())];
|
|
193
|
-
case 3:
|
|
194
|
-
_a.sent();
|
|
195
|
-
return [4 /*yield*/, driver.getTableManager().loadTable(new EngineerTable())];
|
|
196
|
-
case 4:
|
|
197
|
-
_a.sent();
|
|
198
|
-
return [4 /*yield*/, driver.getTableManager().loadTable(new DesignerTable())];
|
|
199
|
-
case 5:
|
|
200
|
-
_a.sent();
|
|
201
|
-
return [4 /*yield*/, driver.getTableManager().loadTable(new ProjectManagerTable())];
|
|
202
|
-
case 6:
|
|
203
|
-
_a.sent();
|
|
204
|
-
return [2 /*return*/];
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
}); });
|
|
208
|
-
beforeEach(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
209
|
-
return __generator(this, function (_a) {
|
|
210
|
-
switch (_a.label) {
|
|
211
|
-
case 0: return [4 /*yield*/, driver.getTableManager().loadTable(new ProjectAssignmentTable())];
|
|
212
|
-
case 1:
|
|
213
|
-
_a.sent();
|
|
214
|
-
return [4 /*yield*/, driver.getTableManager().loadTable(new EngineerTable())];
|
|
215
|
-
case 2:
|
|
216
|
-
_a.sent();
|
|
217
|
-
return [4 /*yield*/, driver.getTableManager().loadTable(new DesignerTable())];
|
|
218
|
-
case 3:
|
|
219
|
-
_a.sent();
|
|
220
|
-
return [4 /*yield*/, driver.getTableManager().loadTable(new ProjectManagerTable())];
|
|
221
|
-
case 4:
|
|
222
|
-
_a.sent();
|
|
223
|
-
projectAssignmentTable = new ProjectAssignmentTable();
|
|
224
|
-
engineerTable = new EngineerTable();
|
|
225
|
-
designerTable = new DesignerTable();
|
|
226
|
-
projectManagerTable = new ProjectManagerTable();
|
|
227
|
-
return [2 /*return*/];
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
}); });
|
|
231
|
-
afterEach(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
232
|
-
return __generator(this, function (_a) {
|
|
233
|
-
switch (_a.label) {
|
|
234
|
-
case 0: return [4 /*yield*/, dropTable(new ProjectAssignmentTable())];
|
|
235
|
-
case 1:
|
|
236
|
-
_a.sent();
|
|
237
|
-
return [4 /*yield*/, dropTable(new EngineerTable())];
|
|
238
|
-
case 2:
|
|
239
|
-
_a.sent();
|
|
240
|
-
return [4 /*yield*/, dropTable(new DesignerTable())];
|
|
241
|
-
case 3:
|
|
242
|
-
_a.sent();
|
|
243
|
-
return [4 /*yield*/, dropTable(new ProjectManagerTable())];
|
|
244
|
-
case 4:
|
|
245
|
-
_a.sent();
|
|
246
|
-
return [2 /*return*/];
|
|
247
|
-
}
|
|
248
|
-
});
|
|
249
|
-
}); });
|
|
250
|
-
describe('TableManager validation', function () {
|
|
251
|
-
test('should throw error when DynamicReferenceTableNameColumn is missing', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
252
|
-
var invalidTable;
|
|
253
|
-
return __generator(this, function (_a) {
|
|
254
|
-
switch (_a.label) {
|
|
255
|
-
case 0:
|
|
256
|
-
invalidTable = new InvalidTableMissingTableName();
|
|
257
|
-
return [4 /*yield*/, expect(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
258
|
-
return __generator(this, function (_a) {
|
|
259
|
-
switch (_a.label) {
|
|
260
|
-
case 0: return [4 /*yield*/, driver.getTableManager().loadTable(invalidTable)];
|
|
261
|
-
case 1:
|
|
262
|
-
_a.sent();
|
|
263
|
-
return [2 /*return*/];
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
}); }).rejects.toThrow(/missing its required DynamicReferenceTableNameColumn 'employee_table_name'/)];
|
|
267
|
-
case 1:
|
|
268
|
-
_a.sent();
|
|
269
|
-
return [2 /*return*/];
|
|
270
|
-
}
|
|
271
|
-
});
|
|
272
|
-
}); });
|
|
273
|
-
test('should throw error when DynamicReferenceTableNameColumn is unused', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
274
|
-
var invalidTable;
|
|
275
|
-
return __generator(this, function (_a) {
|
|
276
|
-
switch (_a.label) {
|
|
277
|
-
case 0:
|
|
278
|
-
invalidTable = new InvalidTableUnusedTableName();
|
|
279
|
-
return [4 /*yield*/, expect(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
280
|
-
return __generator(this, function (_a) {
|
|
281
|
-
switch (_a.label) {
|
|
282
|
-
case 0: return [4 /*yield*/, driver.getTableManager().loadTable(invalidTable)];
|
|
283
|
-
case 1:
|
|
284
|
-
_a.sent();
|
|
285
|
-
return [2 /*return*/];
|
|
286
|
-
}
|
|
287
|
-
});
|
|
288
|
-
}); }).rejects.toThrow(/has a DynamicReferenceTableNameColumn 'employee_table_name' but no DynamicReferenceColumn references it/)];
|
|
289
|
-
case 1:
|
|
290
|
-
_a.sent();
|
|
291
|
-
return [2 /*return*/];
|
|
292
|
-
}
|
|
293
|
-
});
|
|
294
|
-
}); });
|
|
295
|
-
});
|
|
296
|
-
test('should handle references to different types', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
297
|
-
var engineer, designer, engineerAssignment, designerAssignment, fetchedEngineerAssignment, fetchedDesignerAssignment;
|
|
298
|
-
var _a, _b, _c, _d;
|
|
299
|
-
return __generator(this, function (_e) {
|
|
300
|
-
switch (_e.label) {
|
|
301
|
-
case 0: return [4 /*yield*/, db.insert(engineerTable, {
|
|
302
|
-
name: 'John Doe',
|
|
303
|
-
yearsOfExperience: 5,
|
|
304
|
-
})];
|
|
305
|
-
case 1:
|
|
306
|
-
engineer = _e.sent();
|
|
307
|
-
return [4 /*yield*/, db.insert(designerTable, {
|
|
308
|
-
name: 'Jane Smith',
|
|
309
|
-
specialization: 'UI/UX',
|
|
310
|
-
})];
|
|
311
|
-
case 2:
|
|
312
|
-
designer = _e.sent();
|
|
313
|
-
return [4 /*yield*/, db.insert(projectAssignmentTable, {
|
|
314
|
-
projectName: 'Backend API',
|
|
315
|
-
employeeRef: new Reference_1.Reference(engineerTable.name, engineer.id),
|
|
316
|
-
startDate: '2024-01-01',
|
|
317
|
-
})];
|
|
318
|
-
case 3:
|
|
319
|
-
engineerAssignment = _e.sent();
|
|
320
|
-
return [4 /*yield*/, db.insert(projectAssignmentTable, {
|
|
321
|
-
projectName: 'Website Redesign',
|
|
322
|
-
employeeRef: new Reference_1.Reference(designerTable.name, designer.id),
|
|
323
|
-
startDate: '2024-01-15',
|
|
324
|
-
})];
|
|
325
|
-
case 4:
|
|
326
|
-
designerAssignment = _e.sent();
|
|
327
|
-
return [4 /*yield*/, db.get(projectAssignmentTable, { id: engineerAssignment.id })];
|
|
328
|
-
case 5:
|
|
329
|
-
fetchedEngineerAssignment = _e.sent();
|
|
330
|
-
expect((_a = fetchedEngineerAssignment.employeeRef) === null || _a === void 0 ? void 0 : _a._table).toBe(engineerTable.name);
|
|
331
|
-
expect((_b = fetchedEngineerAssignment.employeeRef) === null || _b === void 0 ? void 0 : _b._id).toBe(engineer.id);
|
|
332
|
-
expect(fetchedEngineerAssignment.employeeTableName).toBe(engineerTable.name);
|
|
333
|
-
return [4 /*yield*/, db.get(projectAssignmentTable, { id: designerAssignment.id })];
|
|
334
|
-
case 6:
|
|
335
|
-
fetchedDesignerAssignment = _e.sent();
|
|
336
|
-
expect((_c = fetchedDesignerAssignment.employeeRef) === null || _c === void 0 ? void 0 : _c._table).toBe(designerTable.name);
|
|
337
|
-
expect((_d = fetchedDesignerAssignment.employeeRef) === null || _d === void 0 ? void 0 : _d._id).toBe(designer.id);
|
|
338
|
-
expect(fetchedDesignerAssignment.employeeTableName).toBe(designerTable.name);
|
|
339
|
-
return [2 /*return*/];
|
|
340
|
-
}
|
|
341
|
-
});
|
|
342
|
-
}); });
|
|
343
|
-
test('should cascade delete multiple types of records when references are deleted', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
344
|
-
var engineer, projectManager, designer, engineerAssignment, pmAssignment, designerAssignment, deleteQuery, recordsDeleted, remainingEngineers, remainingPMs, remainingDesigners, remainingAssignments;
|
|
345
|
-
return __generator(this, function (_a) {
|
|
346
|
-
switch (_a.label) {
|
|
347
|
-
case 0: return [4 /*yield*/, db.insert(engineerTable, {
|
|
348
|
-
name: 'John Doe',
|
|
349
|
-
yearsOfExperience: 5,
|
|
350
|
-
})];
|
|
351
|
-
case 1:
|
|
352
|
-
engineer = _a.sent();
|
|
353
|
-
return [4 /*yield*/, db.insert(projectManagerTable, {
|
|
354
|
-
name: 'Alice Brown',
|
|
355
|
-
certificate: 'Scrum Master',
|
|
356
|
-
})];
|
|
357
|
-
case 2:
|
|
358
|
-
projectManager = _a.sent();
|
|
359
|
-
return [4 /*yield*/, db.insert(designerTable, {
|
|
360
|
-
name: 'Jane Smith',
|
|
361
|
-
specialization: 'UI/UX',
|
|
362
|
-
})];
|
|
363
|
-
case 3:
|
|
364
|
-
designer = _a.sent();
|
|
365
|
-
return [4 /*yield*/, db.insert(projectAssignmentTable, {
|
|
366
|
-
projectName: 'Backend API',
|
|
367
|
-
employeeRef: new Reference_1.Reference(engineerTable.name, engineer.id),
|
|
368
|
-
startDate: '2024-01-01',
|
|
369
|
-
})];
|
|
370
|
-
case 4:
|
|
371
|
-
engineerAssignment = _a.sent();
|
|
372
|
-
return [4 /*yield*/, db.insert(projectAssignmentTable, {
|
|
373
|
-
projectName: 'Project Planning',
|
|
374
|
-
employeeRef: new Reference_1.Reference(projectManagerTable.name, projectManager.id),
|
|
375
|
-
startDate: '2024-01-10',
|
|
376
|
-
})];
|
|
377
|
-
case 5:
|
|
378
|
-
pmAssignment = _a.sent();
|
|
379
|
-
return [4 /*yield*/, db.insert(projectAssignmentTable, {
|
|
380
|
-
projectName: 'Website Redesign',
|
|
381
|
-
employeeRef: new Reference_1.Reference(designerTable.name, designer.id),
|
|
382
|
-
startDate: '2024-01-15',
|
|
383
|
-
})];
|
|
384
|
-
case 6:
|
|
385
|
-
designerAssignment = _a.sent();
|
|
386
|
-
deleteQuery = new db_query_1.QueryBuilder(projectAssignmentTable.name).condition({
|
|
387
|
-
field: 'id',
|
|
388
|
-
operator: 'IN',
|
|
389
|
-
value: [engineerAssignment.id, pmAssignment.id],
|
|
390
|
-
});
|
|
391
|
-
return [4 /*yield*/, db.delete(projectAssignmentTable, deleteQuery)];
|
|
392
|
-
case 7:
|
|
393
|
-
recordsDeleted = _a.sent();
|
|
394
|
-
expect(recordsDeleted).toBe(2);
|
|
395
|
-
return [4 /*yield*/, db.query(engineerTable, {})];
|
|
396
|
-
case 8:
|
|
397
|
-
remainingEngineers = _a.sent();
|
|
398
|
-
expect(remainingEngineers.length).toBe(0); // Engineer should be deleted
|
|
399
|
-
return [4 /*yield*/, db.query(projectManagerTable, {})];
|
|
400
|
-
case 9:
|
|
401
|
-
remainingPMs = _a.sent();
|
|
402
|
-
expect(remainingPMs.length).toBe(0); // PM should be deleted
|
|
403
|
-
return [4 /*yield*/, db.query(designerTable, {})];
|
|
404
|
-
case 10:
|
|
405
|
-
remainingDesigners = _a.sent();
|
|
406
|
-
expect(remainingDesigners.length).toBe(1); // Designer should still exist
|
|
407
|
-
expect(remainingDesigners[0].id).toBe(designer.id);
|
|
408
|
-
return [4 /*yield*/, db.query(projectAssignmentTable, {})];
|
|
409
|
-
case 11:
|
|
410
|
-
remainingAssignments = _a.sent();
|
|
411
|
-
expect(remainingAssignments.length).toBe(1);
|
|
412
|
-
expect(remainingAssignments[0].id).toBe(designerAssignment.id);
|
|
413
|
-
return [2 /*return*/];
|
|
414
|
-
}
|
|
415
|
-
});
|
|
416
|
-
}); });
|
|
417
|
-
test('should allow changing table name when updating reference to new type', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
418
|
-
var engineer, designer, assignment, updatedAssignment;
|
|
419
|
-
var _a, _b;
|
|
420
|
-
return __generator(this, function (_c) {
|
|
421
|
-
switch (_c.label) {
|
|
422
|
-
case 0: return [4 /*yield*/, db.insert(engineerTable, {
|
|
423
|
-
name: 'John Doe',
|
|
424
|
-
yearsOfExperience: 5,
|
|
425
|
-
})];
|
|
426
|
-
case 1:
|
|
427
|
-
engineer = _c.sent();
|
|
428
|
-
return [4 /*yield*/, db.insert(designerTable, {
|
|
429
|
-
name: 'Jane Smith',
|
|
430
|
-
specialization: 'UI/UX',
|
|
431
|
-
})];
|
|
432
|
-
case 2:
|
|
433
|
-
designer = _c.sent();
|
|
434
|
-
return [4 /*yield*/, db.insert(projectAssignmentTable, {
|
|
435
|
-
projectName: 'Full Stack App',
|
|
436
|
-
employeeRef: new Reference_1.Reference(engineerTable.name, engineer.id),
|
|
437
|
-
startDate: '2024-01-01',
|
|
438
|
-
})];
|
|
439
|
-
case 3:
|
|
440
|
-
assignment = _c.sent();
|
|
441
|
-
// Reassign to designer
|
|
442
|
-
return [4 /*yield*/, db.update(projectAssignmentTable, {
|
|
443
|
-
employeeRef: new Reference_1.Reference(designerTable.name, designer.id),
|
|
444
|
-
}, { id: assignment.id })];
|
|
445
|
-
case 4:
|
|
446
|
-
// Reassign to designer
|
|
447
|
-
_c.sent();
|
|
448
|
-
return [4 /*yield*/, db.get(projectAssignmentTable, { id: assignment.id })];
|
|
449
|
-
case 5:
|
|
450
|
-
updatedAssignment = _c.sent();
|
|
451
|
-
expect(updatedAssignment.employeeRef).toBeDefined();
|
|
452
|
-
expect((_a = updatedAssignment.employeeRef) === null || _a === void 0 ? void 0 : _a._table).toBe(designerTable.name);
|
|
453
|
-
expect((_b = updatedAssignment.employeeRef) === null || _b === void 0 ? void 0 : _b._id).toBe(designer.id);
|
|
454
|
-
expect(updatedAssignment.employeeTableName).toBe(designerTable.name);
|
|
455
|
-
return [2 /*return*/];
|
|
456
|
-
}
|
|
457
|
-
});
|
|
458
|
-
}); });
|
|
459
|
-
describe('DynamicReferenceTableNameColumn behavior', function () {
|
|
460
|
-
test('should handle defaultValue logic correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
461
|
-
var engineer, assignment, assignmentNoRef;
|
|
462
|
-
return __generator(this, function (_a) {
|
|
463
|
-
switch (_a.label) {
|
|
464
|
-
case 0: return [4 /*yield*/, db.insert(engineerTable, {
|
|
465
|
-
name: 'John Doe',
|
|
466
|
-
yearsOfExperience: 5,
|
|
467
|
-
})];
|
|
468
|
-
case 1:
|
|
469
|
-
engineer = _a.sent();
|
|
470
|
-
return [4 /*yield*/, db.insert(projectAssignmentTable, {
|
|
471
|
-
projectName: 'Test Project',
|
|
472
|
-
employeeRef: new Reference_1.Reference(engineerTable.name, engineer.id),
|
|
473
|
-
startDate: '2024-01-01',
|
|
474
|
-
})];
|
|
475
|
-
case 2:
|
|
476
|
-
assignment = _a.sent();
|
|
477
|
-
// Verify table name was set correctly from reference
|
|
478
|
-
expect(assignment.employeeTableName).toBe(engineerTable.name);
|
|
479
|
-
return [4 /*yield*/, db.insert(projectAssignmentTable, {
|
|
480
|
-
projectName: 'No Reference Project',
|
|
481
|
-
employeeRef: null,
|
|
482
|
-
startDate: '2024-01-01',
|
|
483
|
-
})];
|
|
484
|
-
case 3:
|
|
485
|
-
assignmentNoRef = _a.sent();
|
|
486
|
-
// Verify table name is null when reference is null
|
|
487
|
-
expect(assignmentNoRef.employeeTableName).toBeNull();
|
|
488
|
-
// Test case 3: Reference without table name should throw
|
|
489
|
-
return [4 /*yield*/, expect(db.insert(projectAssignmentTable, {
|
|
490
|
-
projectName: 'Invalid Reference',
|
|
491
|
-
employeeRef: new Reference_1.Reference('', engineer.id),
|
|
492
|
-
startDate: '2024-01-01',
|
|
493
|
-
})).rejects.toThrow(/table name must be set in Reference object/)];
|
|
494
|
-
case 4:
|
|
495
|
-
// Test case 3: Reference without table name should throw
|
|
496
|
-
_a.sent();
|
|
497
|
-
return [2 /*return*/];
|
|
498
|
-
}
|
|
499
|
-
});
|
|
500
|
-
}); });
|
|
501
|
-
test('should handle updateValue logic correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
502
|
-
var engineer, designer, assignment, updatedAssignment, unchangedAssignment;
|
|
503
|
-
return __generator(this, function (_a) {
|
|
504
|
-
switch (_a.label) {
|
|
505
|
-
case 0: return [4 /*yield*/, db.insert(engineerTable, {
|
|
506
|
-
name: 'John Doe',
|
|
507
|
-
yearsOfExperience: 5,
|
|
508
|
-
})];
|
|
509
|
-
case 1:
|
|
510
|
-
engineer = _a.sent();
|
|
511
|
-
return [4 /*yield*/, db.insert(designerTable, {
|
|
512
|
-
name: 'Jane Smith',
|
|
513
|
-
specialization: 'UI/UX',
|
|
514
|
-
})];
|
|
515
|
-
case 2:
|
|
516
|
-
designer = _a.sent();
|
|
517
|
-
return [4 /*yield*/, db.insert(projectAssignmentTable, {
|
|
518
|
-
projectName: 'Initial Project',
|
|
519
|
-
employeeRef: new Reference_1.Reference(engineerTable.name, engineer.id),
|
|
520
|
-
startDate: '2024-01-01',
|
|
521
|
-
})];
|
|
522
|
-
case 3:
|
|
523
|
-
assignment = _a.sent();
|
|
524
|
-
// Test case 1: Update reference to new table
|
|
525
|
-
return [4 /*yield*/, db.update(projectAssignmentTable, {
|
|
526
|
-
employeeRef: new Reference_1.Reference(designerTable.name, designer.id),
|
|
527
|
-
}, { id: assignment.id })];
|
|
528
|
-
case 4:
|
|
529
|
-
// Test case 1: Update reference to new table
|
|
530
|
-
_a.sent();
|
|
531
|
-
return [4 /*yield*/, db.get(projectAssignmentTable, { id: assignment.id })];
|
|
532
|
-
case 5:
|
|
533
|
-
updatedAssignment = _a.sent();
|
|
534
|
-
expect(updatedAssignment.employeeTableName).toBe(designerTable.name);
|
|
535
|
-
// Test case 2: Update without changing reference
|
|
536
|
-
return [4 /*yield*/, db.update(projectAssignmentTable, {
|
|
537
|
-
projectName: 'Updated Project Name',
|
|
538
|
-
}, { id: assignment.id })];
|
|
539
|
-
case 6:
|
|
540
|
-
// Test case 2: Update without changing reference
|
|
541
|
-
_a.sent();
|
|
542
|
-
return [4 /*yield*/, db.get(projectAssignmentTable, { id: assignment.id })];
|
|
543
|
-
case 7:
|
|
544
|
-
unchangedAssignment = _a.sent();
|
|
545
|
-
expect(unchangedAssignment.employeeTableName).toBe(designerTable.name); // Should retain previous value
|
|
546
|
-
// Test case 3: Update with invalid reference should throw
|
|
547
|
-
return [4 /*yield*/, expect(db.update(projectAssignmentTable, {
|
|
548
|
-
employeeRef: new Reference_1.Reference('', designer.id), // Empty table name
|
|
549
|
-
}, { id: assignment.id })).rejects.toThrow(/table name must be set in Reference object/)];
|
|
550
|
-
case 8:
|
|
551
|
-
// Test case 3: Update with invalid reference should throw
|
|
552
|
-
_a.sent();
|
|
553
|
-
return [2 /*return*/];
|
|
554
|
-
}
|
|
555
|
-
});
|
|
556
|
-
}); });
|
|
557
|
-
test('should handle null references correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
558
|
-
var engineer, assignment, nullRefAssignment;
|
|
559
|
-
return __generator(this, function (_a) {
|
|
560
|
-
switch (_a.label) {
|
|
561
|
-
case 0: return [4 /*yield*/, db.insert(engineerTable, {
|
|
562
|
-
name: 'John Doe',
|
|
563
|
-
yearsOfExperience: 5,
|
|
564
|
-
})];
|
|
565
|
-
case 1:
|
|
566
|
-
engineer = _a.sent();
|
|
567
|
-
return [4 /*yield*/, db.insert(projectAssignmentTable, {
|
|
568
|
-
projectName: 'Initial Project',
|
|
569
|
-
employeeRef: new Reference_1.Reference(engineerTable.name, engineer.id),
|
|
570
|
-
startDate: '2024-01-01',
|
|
571
|
-
})];
|
|
572
|
-
case 2:
|
|
573
|
-
assignment = _a.sent();
|
|
574
|
-
// Update to null reference
|
|
575
|
-
return [4 /*yield*/, db.update(projectAssignmentTable, {
|
|
576
|
-
employeeRef: null,
|
|
577
|
-
}, { id: assignment.id })];
|
|
578
|
-
case 3:
|
|
579
|
-
// Update to null reference
|
|
580
|
-
_a.sent();
|
|
581
|
-
return [4 /*yield*/, db.get(projectAssignmentTable, { id: assignment.id })];
|
|
582
|
-
case 4:
|
|
583
|
-
nullRefAssignment = _a.sent();
|
|
584
|
-
expect(nullRefAssignment.employeeRef).toBeNull();
|
|
585
|
-
expect(nullRefAssignment.employeeTableName).toBe(engineerTable.name); // Should retain previous value
|
|
586
|
-
return [2 /*return*/];
|
|
587
|
-
}
|
|
588
|
-
});
|
|
589
|
-
}); });
|
|
590
|
-
test('should handle custom defaultValue override for projectLead', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
591
|
-
var engineer, assignment;
|
|
592
|
-
return __generator(this, function (_a) {
|
|
593
|
-
switch (_a.label) {
|
|
594
|
-
case 0: return [4 /*yield*/, db.insert(engineerTable, {
|
|
595
|
-
name: 'John Doe',
|
|
596
|
-
yearsOfExperience: 5,
|
|
597
|
-
})];
|
|
598
|
-
case 1:
|
|
599
|
-
engineer = _a.sent();
|
|
600
|
-
return [4 /*yield*/, db.insert(projectAssignmentTable, {
|
|
601
|
-
projectName: 'Custom Default Test',
|
|
602
|
-
projectLeadRef: new Reference_1.Reference(engineerTable.name, engineer.id),
|
|
603
|
-
startDate: '2024-01-01',
|
|
604
|
-
})];
|
|
605
|
-
case 2:
|
|
606
|
-
assignment = _a.sent();
|
|
607
|
-
// Should use our custom default value instead of the reference's table name
|
|
608
|
-
expect(assignment.projectLeadTableName).toBe('TEST_DEFAULT_VALUE');
|
|
609
|
-
return [2 /*return*/];
|
|
610
|
-
}
|
|
611
|
-
});
|
|
612
|
-
}); });
|
|
613
|
-
test('should handle custom updateValue override for projectLead', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
614
|
-
var engineer, designer, assignment, updatedAssignment;
|
|
615
|
-
return __generator(this, function (_a) {
|
|
616
|
-
switch (_a.label) {
|
|
617
|
-
case 0: return [4 /*yield*/, db.insert(engineerTable, {
|
|
618
|
-
name: 'John Doe',
|
|
619
|
-
yearsOfExperience: 5,
|
|
620
|
-
})];
|
|
621
|
-
case 1:
|
|
622
|
-
engineer = _a.sent();
|
|
623
|
-
return [4 /*yield*/, db.insert(designerTable, {
|
|
624
|
-
name: 'Jane Smith',
|
|
625
|
-
specialization: 'UI/UX',
|
|
626
|
-
})];
|
|
627
|
-
case 2:
|
|
628
|
-
designer = _a.sent();
|
|
629
|
-
return [4 /*yield*/, db.insert(projectAssignmentTable, {
|
|
630
|
-
projectName: 'Initial Project',
|
|
631
|
-
projectLeadRef: new Reference_1.Reference(engineerTable.name, engineer.id),
|
|
632
|
-
startDate: '2024-01-01',
|
|
633
|
-
})];
|
|
634
|
-
case 3:
|
|
635
|
-
assignment = _a.sent();
|
|
636
|
-
// Update the reference
|
|
637
|
-
return [4 /*yield*/, db.update(projectAssignmentTable, {
|
|
638
|
-
projectLeadRef: new Reference_1.Reference(designerTable.name, designer.id),
|
|
639
|
-
}, { id: assignment.id })];
|
|
640
|
-
case 4:
|
|
641
|
-
// Update the reference
|
|
642
|
-
_a.sent();
|
|
643
|
-
return [4 /*yield*/, db.get(projectAssignmentTable, { id: assignment.id })];
|
|
644
|
-
case 5:
|
|
645
|
-
updatedAssignment = _a.sent();
|
|
646
|
-
// Should use our custom update value instead of the new reference's table name
|
|
647
|
-
expect(updatedAssignment.projectLeadTableName).toBe('TEST_UPDATE_VALUE');
|
|
648
|
-
return [2 /*return*/];
|
|
649
|
-
}
|
|
650
|
-
});
|
|
651
|
-
}); });
|
|
652
|
-
});
|
|
653
|
-
};
|
|
654
|
-
};
|
|
655
|
-
exports.dynamicReferenceColumnTests = dynamicReferenceColumnTests;
|
|
656
|
-
//# sourceMappingURL=DynamicReferenceColumn.js.map
|