@futdevpro/nts-dynamo 1.15.2 → 1.15.3
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/.cursor/rules/__assistant_guide.mdc +30 -0
- package/.cursor/rules/__main.mdc +62 -0
- package/.cursor/rules/_ag_backend-structure.mdc +86 -0
- package/.cursor/rules/_ag_backend.mdc +16 -0
- package/.cursor/rules/_ag_debug.mdc +8 -0
- package/.cursor/rules/_ag_documentation_writing_rules.mdc +372 -0
- package/.cursor/rules/_ag_file-refactoring.mdc +113 -0
- package/.cursor/rules/_ag_fixes_rules.mdc +6 -0
- package/.cursor/rules/_ag_frontend-structure.mdc +87 -0
- package/.cursor/rules/_ag_frontend.mdc +40 -0
- package/.cursor/rules/_ag_import-rules.mdc +45 -0
- package/.cursor/rules/_ag_naming.mdc +116 -0
- package/.cursor/rules/_ag_running_commands.mdc +5 -0
- package/.cursor/rules/_ag_server-controller.mdc +6 -0
- package/.cursor/rules/_ag_should-be.mdc +7 -0
- package/.cursor/rules/_ag_swearing.mdc +47 -0
- package/.cursor/rules/ai_development_guide.md +61 -0
- package/.cursor/rules/ai_directives.md +114 -0
- package/.cursor/rules/cursor-rules.md +160 -0
- package/.cursor/rules/default-command.mdc +229 -0
- package/.cursor/rules/error_code_pattern.md +40 -0
- package/.cursor/rules/saved rule mcp server use.md +16 -0
- package/build/_modules/custom-data/custom-data.controller.d.ts.map +1 -1
- package/build/_modules/custom-data/custom-data.controller.js +1 -2
- package/build/_modules/custom-data/custom-data.controller.js.map +1 -1
- package/build/_services/core/api.service.d.ts.map +1 -1
- package/build/_services/core/api.service.js +1 -0
- package/build/_services/core/api.service.js.map +1 -1
- package/package.json +5 -4
- package/scripts/run-coverage-tests.js +5 -1
- package/spec/support/helpers/spec-reporter-loader.js +359 -0
- package/spec/support/helpers/ts-node-helper.js +84 -0
- package/spec/support/jasmine.coverage.json +2 -1
- package/spec/support/jasmine.json +3 -3
- package/src/_collections/archive.util.spec.ts +36 -0
- package/src/_collections/get-environment-settings.util.spec.ts +210 -0
- package/src/_collections/star.controller.spec.ts +224 -0
- package/src/_models/control-models/api-call-params.control-model.spec.ts +62 -3
- package/src/_models/control-models/app-ext-system-controls.control-model.spec.ts +52 -0
- package/src/_models/control-models/app-params.control-model.spec.ts +158 -2
- package/src/_models/control-models/endpoint-params.control-model.spec.ts +578 -0
- package/src/_modules/ai/_modules/document-ai/_collections/dai-chunking.util.spec.ts +242 -0
- package/src/_modules/ai/_modules/document-ai/_collections/dai-document.util.spec.ts +209 -0
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-document.data-service.spec.ts +342 -0
- package/src/_modules/ai/_modules/open-ai/_services/data-services/oai-vector-data.service.spec.ts +550 -0
- package/src/_modules/ai/_modules/open-ai/_services/oai-embedding.control-service.spec.ts +240 -0
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm-chat.service-base.spec.ts +462 -0
- package/src/_modules/ai/_modules/open-ai/_services/oai-llm.service-base.spec.ts +437 -0
- package/src/_modules/ai/_services/ai-embedding.service-base.spec.ts +98 -0
- package/src/_modules/ai/_services/ai-llm-chat.service-base.spec.ts +229 -0
- package/src/_modules/ai/_services/ai-llm.service-base.spec.ts +250 -0
- package/src/_modules/ai/_services/ai-provider.service-base.spec.ts +79 -0
- package/src/_modules/assistant/_collections/ass.util.spec.ts +176 -0
- package/src/_modules/assistant/_services/ass-io.control-service.spec.ts +140 -0
- package/src/_modules/assistant/_services/ass-main.control-service.spec.ts +192 -0
- package/src/_modules/bot/_modules/discord-bot/_services/dib-messaging-provider.control-service.spec.ts +431 -0
- package/src/_modules/bot/_modules/dynamo-bot/_collections/dyb-operations.util.spec.ts +160 -0
- package/src/_modules/bot/_modules/dynamo-bot/_services/dyb-messaging-provider.control-service.spec.ts +374 -0
- package/src/_modules/bot/_modules/slack-bot/_services/slb-messaging-provider.control-service.spec.ts +344 -0
- package/src/_modules/bot/_modules/teams-bot/_services/teb-messaging-provider.control-service.spec.ts +345 -0
- package/src/_modules/bot/_services/bot-commands.control-service.spec.ts +116 -0
- package/src/_modules/bot/_services/bot-io.control-service.spec.ts +285 -0
- package/src/_modules/bot/_services/bot-main.control-service.spec.ts +208 -0
- package/src/_modules/bot/_services/bot-messaging-provider.service-base.spec.ts +349 -0
- package/src/_modules/bot/_services/bot-routines.control-service.spec.ts +111 -0
- package/src/_modules/custom-data/custom-data.controller.spec.ts +49 -0
- package/src/_modules/custom-data/custom-data.controller.ts +1 -3
- package/src/_modules/custom-data/custom-data.data-service.spec.ts +54 -0
- package/src/_modules/custom-data/get-custom-data-routing-module.util.spec.ts +28 -0
- package/src/_modules/defaults/_services/default-auth.service.spec.ts +269 -0
- package/src/_modules/defaults/_services/default-socket-events.service.spec.ts +42 -0
- package/src/_modules/defaults/_services/default-user.data-service.spec.ts +187 -0
- package/src/_modules/discord-assistant/_collections/dias.util.spec.ts +366 -0
- package/src/_modules/discord-assistant/_services/dias-io.control-service.spec.ts +108 -0
- package/src/_modules/discord-assistant/_services/dias-main.control-service.spec.ts +22 -0
- package/src/_modules/discord-assistant/_services/dias.service-base.spec.ts +195 -0
- package/src/_modules/discord-assistant-voiced/_services/dias-discord-bot.control-service.spec.ts +34 -0
- package/src/_modules/discord-bot/_collections/dibo-operations.util.spec.ts +214 -0
- package/src/_modules/discord-bot/_services/dibo-commands.control-service.spec.ts +154 -0
- package/src/_modules/discord-bot/_services/dibo-io.control-service.spec.ts +264 -0
- package/src/_modules/discord-bot/_services/dibo-main.control-service.spec.ts +408 -0
- package/src/_modules/discord-bot/_services/dibo-routines.control-service.spec.ts +105 -0
- package/src/_modules/local-vector-search/_services/lvs-doc-chunk-data.service.spec.ts +418 -0
- package/src/_modules/local-vector-search/_services/lvs-local-vector-search.data-service.spec.ts +345 -0
- package/src/_modules/messaging/_collections/msg.util.spec.ts +226 -0
- package/src/_modules/messaging/_services/msg-events.service.spec.ts +219 -0
- package/src/_modules/messaging/_services/msg-main.control-service.spec.ts +147 -0
- package/src/_modules/messaging/_services/msg.controller.spec.ts +201 -0
- package/src/_modules/mock/data-model.mock.spec.ts +27 -24
- package/src/_modules/oauth2/_routes/oauth2.controller.spec.ts +107 -0
- package/src/_modules/oauth2/_services/oauth2.auth-service.spec.ts +254 -0
- package/src/_modules/oauth2/_services/oauth2.control-service.spec.ts +585 -0
- package/src/_modules/server/errors/errors.control-service.spec.ts +230 -0
- package/src/_modules/server/errors/errors.controller.spec.ts +165 -0
- package/src/_modules/server/errors/errors.data-service.spec.ts +355 -0
- package/src/_modules/server/server-status/server-status-snapshot.control-service.spec.ts +70 -0
- package/src/_modules/server/server-status/server-status-snapshot.data-service.spec.ts +77 -0
- package/src/_modules/server/server-status/server-status.control-service.spec.ts +516 -0
- package/src/_modules/server/server-status/server-status.controller.spec.ts +156 -0
- package/src/_modules/socket/_models/socket-client-service-params.control-model.spec.ts +6 -3
- package/src/_modules/socket/_models/socket-presence.control-model.spec.ts +164 -0
- package/src/_modules/socket/_services/socket-client.service.spec.ts +15 -0
- package/src/_modules/test/get-test-routing-module.util.spec.ts +28 -0
- package/src/_modules/test/test.controller.spec.ts +72 -0
- package/src/_modules/usage/usage.controller.spec.ts +81 -0
- package/src/_modules/usage/usage.data-service.spec.ts +332 -0
- package/src/_services/base/api.service-base.spec.ts +125 -0
- package/src/_services/base/archive-data.service.spec.ts +196 -0
- package/src/_services/base/data.service.spec.ts +493 -0
- package/src/_services/base/db.service.spec.ts +59 -18
- package/src/_services/base/singleton.service-base.spec.ts +28 -0
- package/src/_services/base/singleton.service.spec.ts +114 -0
- package/src/_services/core/api.service.ts +1 -0
- package/src/_services/core/auth.service.spec.ts +159 -0
- package/src/_services/core/email.service.spec.ts +14 -22
- package/src/_services/core/global.service.spec.ts +275 -0
- package/src/_services/core/service-collection.service.spec.ts +46 -0
- package/src/_services/route/routing-module.service.spec.ts +8 -6
- package/src/_services/shared.static-service.spec.ts +89 -0
- package/src/_modules/socket/app-extended.server.spec.ts +0 -227
- package/src/_services/server/app.server.spec.ts +0 -138
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// EGYEDI SPEC REPORTER - JELENLEG KIKOMMENTEZVE
|
|
3
|
+
// ============================================================================
|
|
4
|
+
// Ez az egyedi spec reporter jelenleg kikommentezve van, és a default reporter
|
|
5
|
+
// van használatban.
|
|
6
|
+
//
|
|
7
|
+
// ÚJRA AKTIVÁLÁS:
|
|
8
|
+
// 1. spec/support/jasmine.json fájlban:
|
|
9
|
+
// - Kommentezd ki: "../spec/support/helpers/ts-node-helper.js"
|
|
10
|
+
// - Kommentezd be: "../spec/support/helpers/spec-reporter-loader.js"
|
|
11
|
+
//
|
|
12
|
+
// 2. scripts/run-coverage-tests.js fájlban:
|
|
13
|
+
// - Kommentezd ki: NODE_OPTIONS: `--require ${tsNodeRegister} --require ${tsNodeHelper}`
|
|
14
|
+
// - Kommentezd be: NODE_OPTIONS: `--require ${tsNodeRegister} --require ${tsNodeHelper} --require ${specReporterLoader}`
|
|
15
|
+
//
|
|
16
|
+
// Ez az egyedi reporter a következő funkciókat biztosítja:
|
|
17
|
+
// - SpecNameReporter: Kiírja a spec nevét és statisztikákat minden tesztnél
|
|
18
|
+
// - SlowTestReporter: Jelzi a lassú teszteket (>1 másodperc)
|
|
19
|
+
// - FailedTestsReporter: Részletes hibajelentés a sikertelen tesztekről
|
|
20
|
+
// - SpecReporter: Színes, formázott kimenet a jasmine-spec-reporter-rel
|
|
21
|
+
// ============================================================================
|
|
22
|
+
|
|
23
|
+
// A jasmine-spec-reporter betöltése és konfigurálása
|
|
24
|
+
// Ez a fájl helper-ként töltődik be, így a Jasmine inicializálása után fut
|
|
25
|
+
|
|
26
|
+
console.log('[spec-reporter-loader] Helper fájl betöltve');
|
|
27
|
+
|
|
28
|
+
// Egyedi reporter, ami kiírja a spec nevét, amikor elindul
|
|
29
|
+
class SpecNameReporter {
|
|
30
|
+
constructor() {
|
|
31
|
+
this.currentTestNumber = 0;
|
|
32
|
+
this.totalTests = 0;
|
|
33
|
+
this.successfulCount = 0;
|
|
34
|
+
this.failedCount = 0;
|
|
35
|
+
this.pendingCount = 0;
|
|
36
|
+
this.startTime = Date.now();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
jasmineStarted(result) {
|
|
40
|
+
// Get total number of specs from the result
|
|
41
|
+
if (result && result.totalSpecsDefined !== undefined) {
|
|
42
|
+
this.totalTests = result.totalSpecsDefined;
|
|
43
|
+
}
|
|
44
|
+
this.startTime = Date.now();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
specStarted(result) {
|
|
48
|
+
this.currentTestNumber++;
|
|
49
|
+
const stats = `[${this.currentTestNumber}/${this.totalTests || '?'}] (✓${this.successfulCount} ✗${this.failedCount} ⊘${this.pendingCount})`;
|
|
50
|
+
console.log(`▶ ${stats} ${result.fullName}`);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
specDone(result) {
|
|
54
|
+
if (result.status === 'passed') {
|
|
55
|
+
this.successfulCount++;
|
|
56
|
+
} else if (result.status === 'failed') {
|
|
57
|
+
this.failedCount++;
|
|
58
|
+
} else if (result.status === 'pending' || result.status === 'disabled') {
|
|
59
|
+
this.pendingCount++;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
jasmineDone(result) {
|
|
64
|
+
const duration = Date.now() - this.startTime;
|
|
65
|
+
const durationSeconds = (duration / 1000).toFixed(2);
|
|
66
|
+
|
|
67
|
+
console.log('\n' + '='.repeat(80));
|
|
68
|
+
console.log('TEST SUMMARY');
|
|
69
|
+
console.log('='.repeat(80));
|
|
70
|
+
console.log(`Total: ${this.totalTests || '?'} specs`);
|
|
71
|
+
console.log(`✓ Successful: ${this.successfulCount}`);
|
|
72
|
+
console.log(`✗ Failed: ${this.failedCount}`);
|
|
73
|
+
console.log(`⊘ Pending: ${this.pendingCount}`);
|
|
74
|
+
console.log(`Duration: ${durationSeconds}s`);
|
|
75
|
+
console.log('='.repeat(80) + '\n');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Slow test reporter - tracks tests that take longer than 1ms
|
|
80
|
+
class SlowTestReporter {
|
|
81
|
+
constructor() {
|
|
82
|
+
this.slowTests = [];
|
|
83
|
+
this.testStartTimes = new Map();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
specStarted(result) {
|
|
87
|
+
// Extract file name from fullName (format: "| Suite | Test" or "Suite | Test")
|
|
88
|
+
let file = 'Unknown';
|
|
89
|
+
if (result.fullName) {
|
|
90
|
+
const parts = result.fullName.split('|');
|
|
91
|
+
if (parts.length > 0) {
|
|
92
|
+
file = parts[0].trim() || 'Unknown';
|
|
93
|
+
}
|
|
94
|
+
// If it starts with |, try to get from description or suite
|
|
95
|
+
if (file === '' && result.description) {
|
|
96
|
+
file = result.description.split('|')[0]?.trim() || 'Unknown';
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
this.testStartTimes.set(result.id, {
|
|
101
|
+
startTime: Date.now(),
|
|
102
|
+
fullName: result.fullName,
|
|
103
|
+
file: file
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
specDone(result) {
|
|
108
|
+
const testInfo = this.testStartTimes.get(result.id);
|
|
109
|
+
if (testInfo) {
|
|
110
|
+
const duration = Date.now() - testInfo.startTime;
|
|
111
|
+
if (duration > 1000) { // Only track tests longer than 1 second (1000ms)
|
|
112
|
+
this.slowTests.push({
|
|
113
|
+
file: testInfo.file,
|
|
114
|
+
test: result.fullName,
|
|
115
|
+
duration: duration
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
this.testStartTimes.delete(result.id);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
jasmineDone(result) {
|
|
123
|
+
if (this.slowTests.length > 0) {
|
|
124
|
+
console.log('\n' + '='.repeat(80));
|
|
125
|
+
console.log('SLOW TESTS REPORT (tests taking longer than 1 second)');
|
|
126
|
+
console.log('='.repeat(80));
|
|
127
|
+
|
|
128
|
+
// Group by file
|
|
129
|
+
const byFile = {};
|
|
130
|
+
this.slowTests.forEach(test => {
|
|
131
|
+
if (!byFile[test.file]) {
|
|
132
|
+
byFile[test.file] = [];
|
|
133
|
+
}
|
|
134
|
+
byFile[test.file].push(test);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
// Sort files by total duration
|
|
138
|
+
const fileEntries = Object.entries(byFile).map(([file, tests]) => ({
|
|
139
|
+
file,
|
|
140
|
+
tests,
|
|
141
|
+
totalDuration: tests.reduce((sum, t) => sum + t.duration, 0)
|
|
142
|
+
})).sort((a, b) => b.totalDuration - a.totalDuration);
|
|
143
|
+
|
|
144
|
+
// Output report
|
|
145
|
+
fileEntries.forEach(({ file, tests, totalDuration }) => {
|
|
146
|
+
console.log(`\n${file} (total: ${totalDuration}ms)`);
|
|
147
|
+
tests.sort((a, b) => b.duration - a.duration).forEach(test => {
|
|
148
|
+
console.log(` ${test.duration}ms - ${test.test}`);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
console.log('\n' + '='.repeat(80));
|
|
153
|
+
console.log(`Total slow tests: ${this.slowTests.length}`);
|
|
154
|
+
console.log('='.repeat(80) + '\n');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Failed tests reporter - tracks all failed tests
|
|
160
|
+
class FailedTestsReporter {
|
|
161
|
+
constructor() {
|
|
162
|
+
this.failedTests = [];
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
specDone(result) {
|
|
166
|
+
if (result.status === 'failed') {
|
|
167
|
+
// Extract file name from fullName
|
|
168
|
+
let file = 'Unknown';
|
|
169
|
+
if (result.fullName) {
|
|
170
|
+
const parts = result.fullName.split('|');
|
|
171
|
+
if (parts.length > 0) {
|
|
172
|
+
file = parts[0].trim() || 'Unknown';
|
|
173
|
+
}
|
|
174
|
+
if (file === '' && result.description) {
|
|
175
|
+
file = result.description.split('|')[0]?.trim() || 'Unknown';
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
this.failedTests.push({
|
|
180
|
+
file: file,
|
|
181
|
+
test: result.fullName,
|
|
182
|
+
message: result.failedExpectations && result.failedExpectations.length > 0
|
|
183
|
+
? result.failedExpectations[0].message
|
|
184
|
+
: 'Unknown error',
|
|
185
|
+
stack: result.failedExpectations && result.failedExpectations.length > 0
|
|
186
|
+
? result.failedExpectations[0].stack
|
|
187
|
+
: undefined
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
jasmineDone() {
|
|
193
|
+
if (this.failedTests.length > 0) {
|
|
194
|
+
console.log('\n' + '='.repeat(80));
|
|
195
|
+
console.log('FAILED TESTS REPORT');
|
|
196
|
+
console.log('='.repeat(80));
|
|
197
|
+
|
|
198
|
+
// Group by file
|
|
199
|
+
const byFile = {};
|
|
200
|
+
this.failedTests.forEach(test => {
|
|
201
|
+
if (!byFile[test.file]) {
|
|
202
|
+
byFile[test.file] = [];
|
|
203
|
+
}
|
|
204
|
+
byFile[test.file].push(test);
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
// Sort files by number of failures
|
|
208
|
+
const fileEntries = Object.entries(byFile).map(([file, tests]) => ({
|
|
209
|
+
file,
|
|
210
|
+
tests,
|
|
211
|
+
count: tests.length
|
|
212
|
+
})).sort((a, b) => b.count - a.count);
|
|
213
|
+
|
|
214
|
+
// Output report
|
|
215
|
+
fileEntries.forEach(({ file, tests, count }) => {
|
|
216
|
+
console.log(`\n${file} (${count} failure${count > 1 ? 's' : ''})`);
|
|
217
|
+
tests.forEach((test, index) => {
|
|
218
|
+
console.log(`\n ${index + 1}. ✗ ${test.test}`);
|
|
219
|
+
const raw = test.message || 'Unknown';
|
|
220
|
+
const message = raw.length > 150 ? raw.substring(0, 150) + '...' : raw;
|
|
221
|
+
console.log(` Message: ${(message || 'Unknown').split('\n')[0]}`);
|
|
222
|
+
|
|
223
|
+
// Print stacktrace if available
|
|
224
|
+
if (test.stack) {
|
|
225
|
+
// Filter out node_modules and jasmine internals for cleaner stacktrace
|
|
226
|
+
const stackLines = test.stack.split('\n')
|
|
227
|
+
.filter(line => {
|
|
228
|
+
const lowerLine = line.toLowerCase();
|
|
229
|
+
return !lowerLine.includes('node_modules') &&
|
|
230
|
+
!lowerLine.includes('jasmine') &&
|
|
231
|
+
!lowerLine.includes('spec-reporter');
|
|
232
|
+
})
|
|
233
|
+
.slice(0, 10); // Limit to first 10 relevant lines
|
|
234
|
+
|
|
235
|
+
if (stackLines.length > 0) {
|
|
236
|
+
console.log(` Stack:`);
|
|
237
|
+
stackLines.forEach(line => {
|
|
238
|
+
console.log(` ${line.trim()}`);
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
console.log('\n' + '='.repeat(80));
|
|
246
|
+
console.log(`Total failed tests: ${this.failedTests.length}`);
|
|
247
|
+
console.log('='.repeat(80) + '\n');
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// A jasmine-spec-reporter betöltése
|
|
253
|
+
const { SpecReporter } = require('jasmine-spec-reporter');
|
|
254
|
+
|
|
255
|
+
// Helper fájlként töltődik be, így a Jasmine már inicializálva van
|
|
256
|
+
const initReporters = () => {
|
|
257
|
+
const getJasmineEnv = () => {
|
|
258
|
+
// Módszer 1: globális jasmine objektum
|
|
259
|
+
if (typeof global !== 'undefined' && global.jasmine && typeof global.jasmine.getEnv === 'function') {
|
|
260
|
+
return global.jasmine.getEnv();
|
|
261
|
+
}
|
|
262
|
+
// Módszer 2: jasmine globális változó
|
|
263
|
+
if (typeof jasmine !== 'undefined' && typeof jasmine.getEnv === 'function') {
|
|
264
|
+
return jasmine.getEnv();
|
|
265
|
+
}
|
|
266
|
+
return null;
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
const env = getJasmineEnv();
|
|
270
|
+
if (env) {
|
|
271
|
+
console.log('[spec-reporter-loader] Jasmine környezet megtalálva, reporterek inicializálása...');
|
|
272
|
+
const slowTestReporter = new SlowTestReporter();
|
|
273
|
+
const failedTestsReporter = new FailedTestsReporter();
|
|
274
|
+
|
|
275
|
+
const specNameReporter = new SpecNameReporter();
|
|
276
|
+
env.addReporter(specNameReporter);
|
|
277
|
+
env.addReporter(slowTestReporter);
|
|
278
|
+
env.addReporter(failedTestsReporter);
|
|
279
|
+
env.addReporter(new SpecReporter({
|
|
280
|
+
spec: {
|
|
281
|
+
displayPending: true,
|
|
282
|
+
displayDuration: true,
|
|
283
|
+
displaySuccessful: true,
|
|
284
|
+
displayFailed: true
|
|
285
|
+
},
|
|
286
|
+
suite: {
|
|
287
|
+
displayNumber: true
|
|
288
|
+
},
|
|
289
|
+
summary: {
|
|
290
|
+
displayDuration: true,
|
|
291
|
+
displayErrorMessages: true,
|
|
292
|
+
displayStacktrace: 'pretty',
|
|
293
|
+
displaySuccessful: true,
|
|
294
|
+
displayFailed: true
|
|
295
|
+
},
|
|
296
|
+
colors: {
|
|
297
|
+
enabled: true
|
|
298
|
+
}
|
|
299
|
+
}));
|
|
300
|
+
|
|
301
|
+
// Ensure reports are printed before coverage report
|
|
302
|
+
// Order: slow tests, failed tests, then summary
|
|
303
|
+
env.addReporter({
|
|
304
|
+
jasmineDone: (result) => {
|
|
305
|
+
// Print slow tests report first
|
|
306
|
+
slowTestReporter.jasmineDone(result);
|
|
307
|
+
// Print failed tests report second
|
|
308
|
+
failedTestsReporter.jasmineDone(result);
|
|
309
|
+
// Print summary last (before coverage table)
|
|
310
|
+
specNameReporter.jasmineDone(result);
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
console.log('[spec-reporter-loader] Reporterek sikeresen inicializálva');
|
|
315
|
+
return true;
|
|
316
|
+
}
|
|
317
|
+
return false;
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
// Próbáljuk meg azonnal
|
|
321
|
+
if (!initReporters()) {
|
|
322
|
+
console.log('[spec-reporter-loader] Jasmine környezet még nem elérhető, várunk...');
|
|
323
|
+
|
|
324
|
+
// Próbáljuk meg több időpontban is, hasonlóan a timeout-helper-hez
|
|
325
|
+
setTimeout(() => {
|
|
326
|
+
if (!initReporters()) {
|
|
327
|
+
setTimeout(() => {
|
|
328
|
+
if (!initReporters()) {
|
|
329
|
+
setTimeout(() => {
|
|
330
|
+
if (!initReporters()) {
|
|
331
|
+
// Ha még mindig nem sikerült, várunk és újra próbáljuk
|
|
332
|
+
let attempts = 0;
|
|
333
|
+
const maxAttempts = 100;
|
|
334
|
+
|
|
335
|
+
const interval = setInterval(() => {
|
|
336
|
+
attempts++;
|
|
337
|
+
if (initReporters()) {
|
|
338
|
+
clearInterval(interval);
|
|
339
|
+
console.log('[spec-reporter-loader] Reporterek sikeresen inicializálva', attempts, 'próbálkozás után');
|
|
340
|
+
} else if (attempts >= maxAttempts) {
|
|
341
|
+
clearInterval(interval);
|
|
342
|
+
console.error('[spec-reporter-loader] Failed to initialize reporters after', maxAttempts, 'attempts');
|
|
343
|
+
console.error('[spec-reporter-loader] Debug info:', {
|
|
344
|
+
hasGlobal: typeof global !== 'undefined',
|
|
345
|
+
hasJasmine: typeof jasmine !== 'undefined',
|
|
346
|
+
globalJasmine: typeof global !== 'undefined' && global.jasmine,
|
|
347
|
+
jasmineGetEnv: typeof jasmine !== 'undefined' && typeof jasmine.getEnv === 'function'
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}, 50);
|
|
351
|
+
}
|
|
352
|
+
}, 100);
|
|
353
|
+
}
|
|
354
|
+
}, 50);
|
|
355
|
+
}
|
|
356
|
+
}, 0);
|
|
357
|
+
} else {
|
|
358
|
+
console.log('[spec-reporter-loader] Reporterek azonnal inicializálva');
|
|
359
|
+
}
|
|
@@ -7,3 +7,87 @@ require('ts-node').register({
|
|
|
7
7
|
}
|
|
8
8
|
});
|
|
9
9
|
|
|
10
|
+
// Set default timeout for all tests immediately
|
|
11
|
+
// This ensures that failed tests timeout quickly (2 seconds) instead of running for too long
|
|
12
|
+
// We set it both immediately and in a delayed callback to ensure it works even if spec files override it
|
|
13
|
+
// NOTE: This is also set in jasmine.json and jasmine.coverage.json - keep all 3 in sync!
|
|
14
|
+
const FORCE_TIMEOUT = 2000; // 2 seconds
|
|
15
|
+
|
|
16
|
+
// Function to force timeout setting - agresszíven felülírja minden timeout beállítást
|
|
17
|
+
const forceTimeout = () => {
|
|
18
|
+
if (typeof jasmine !== 'undefined') {
|
|
19
|
+
jasmine.DEFAULT_TIMEOUT_INTERVAL = FORCE_TIMEOUT;
|
|
20
|
+
}
|
|
21
|
+
if (typeof global !== 'undefined' && global.jasmine) {
|
|
22
|
+
global.jasmine.DEFAULT_TIMEOUT_INTERVAL = FORCE_TIMEOUT;
|
|
23
|
+
}
|
|
24
|
+
// Try to access jasmine through window if available (for browser environments)
|
|
25
|
+
if (typeof window !== 'undefined' && window.jasmine) {
|
|
26
|
+
window.jasmine.DEFAULT_TIMEOUT_INTERVAL = FORCE_TIMEOUT;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// Set timeout immediately if jasmine is available
|
|
31
|
+
forceTimeout();
|
|
32
|
+
|
|
33
|
+
// Agresszív timeout felülírás - folyamatosan felülírja minden 100ms-ben
|
|
34
|
+
// Ez biztosítja, hogy még a spec fájlokban lévő timeout beállítások is felülírásra kerüljenek
|
|
35
|
+
const aggressiveTimeoutInterval = setInterval(() => {
|
|
36
|
+
forceTimeout();
|
|
37
|
+
}, 100);
|
|
38
|
+
|
|
39
|
+
// Stop the aggressive interval after 10 seconds (enough time for all tests to start)
|
|
40
|
+
setTimeout(() => {
|
|
41
|
+
clearInterval(aggressiveTimeoutInterval);
|
|
42
|
+
}, 10000);
|
|
43
|
+
|
|
44
|
+
// Hook into jasmine's environment if available
|
|
45
|
+
const initTimeout = () => {
|
|
46
|
+
// Try both global and local jasmine
|
|
47
|
+
const jasmineObj = (typeof global !== 'undefined' && global.jasmine) || (typeof jasmine !== 'undefined' ? jasmine : null);
|
|
48
|
+
|
|
49
|
+
if (jasmineObj && typeof jasmineObj.getEnv === 'function') {
|
|
50
|
+
try {
|
|
51
|
+
const env = jasmineObj.getEnv();
|
|
52
|
+
if (env) {
|
|
53
|
+
// Force timeout immediately
|
|
54
|
+
forceTimeout();
|
|
55
|
+
|
|
56
|
+
// Add a global beforeEach that runs in every spec file to force timeout
|
|
57
|
+
env.beforeEach(() => {
|
|
58
|
+
forceTimeout();
|
|
59
|
+
});
|
|
60
|
+
// Also add afterEach to ensure timeout is set after each test
|
|
61
|
+
env.afterEach(() => {
|
|
62
|
+
forceTimeout();
|
|
63
|
+
});
|
|
64
|
+
// Add a reporter that forces timeout on every spec start and done
|
|
65
|
+
// This ensures that even if a spec file sets timeout, it gets overridden
|
|
66
|
+
env.addReporter({
|
|
67
|
+
specStarted: () => {
|
|
68
|
+
forceTimeout();
|
|
69
|
+
},
|
|
70
|
+
specDone: () => {
|
|
71
|
+
forceTimeout();
|
|
72
|
+
},
|
|
73
|
+
suiteStarted: () => {
|
|
74
|
+
forceTimeout();
|
|
75
|
+
},
|
|
76
|
+
suiteDone: () => {
|
|
77
|
+
forceTimeout();
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
} catch (e) {
|
|
82
|
+
// Ignore errors if jasmine is not fully initialized yet
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// Try to initialize multiple times to catch late initialization
|
|
88
|
+
initTimeout();
|
|
89
|
+
setTimeout(initTimeout, 0);
|
|
90
|
+
setTimeout(initTimeout, 50);
|
|
91
|
+
setTimeout(initTimeout, 200);
|
|
92
|
+
setTimeout(initTimeout, 1000);
|
|
93
|
+
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
"**/*[sS]pec.ts"
|
|
15
15
|
],
|
|
16
16
|
"helpers": [
|
|
17
|
-
"helpers
|
|
18
|
-
"helpers/**/*.js"
|
|
17
|
+
"../spec/support/helpers/ts-node-helper.js"
|
|
19
18
|
],
|
|
20
19
|
"env": {
|
|
21
20
|
"stopSpecOnExpectationFailure": false,
|
|
22
|
-
"random": true
|
|
21
|
+
"random": true,
|
|
22
|
+
"defaultTimeoutInterval": 2000
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -18,4 +18,40 @@ describe('| DyNTS_getArchivedDBName', () => {
|
|
|
18
18
|
const expectedArchivedName = `${dbName}_${DyNTS_archiveSuffix}`;
|
|
19
19
|
expect(DyNTS_getArchivedDBName(dbName)).toBe(expectedArchivedName);
|
|
20
20
|
});
|
|
21
|
+
|
|
22
|
+
it('| should handle database names with spaces', () => {
|
|
23
|
+
const dbName = 'Test DB Name';
|
|
24
|
+
const expectedArchivedName = `${dbName}_${DyNTS_archiveSuffix}`;
|
|
25
|
+
expect(DyNTS_getArchivedDBName(dbName)).toBe(expectedArchivedName);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('| should handle database names with numbers', () => {
|
|
29
|
+
const dbName = 'DB123';
|
|
30
|
+
const expectedArchivedName = `${dbName}_${DyNTS_archiveSuffix}`;
|
|
31
|
+
expect(DyNTS_getArchivedDBName(dbName)).toBe(expectedArchivedName);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('| should handle very long database names', () => {
|
|
35
|
+
const dbName = 'A'.repeat(100);
|
|
36
|
+
const expectedArchivedName = `${dbName}_${DyNTS_archiveSuffix}`;
|
|
37
|
+
expect(DyNTS_getArchivedDBName(dbName)).toBe(expectedArchivedName);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('| should use the correct archive suffix constant', () => {
|
|
41
|
+
expect(DyNTS_archiveSuffix).toBe('archived');
|
|
42
|
+
const dbName = 'TestDB';
|
|
43
|
+
const result = DyNTS_getArchivedDBName(dbName);
|
|
44
|
+
expect(result).toContain('archived');
|
|
45
|
+
expect(result).toBe('TestDB_archived');
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
describe('| DyNTS_archiveSuffix', () => {
|
|
50
|
+
it('| should have the correct value', () => {
|
|
51
|
+
expect(DyNTS_archiveSuffix).toBe('archived');
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it('| should be a string', () => {
|
|
55
|
+
expect(typeof DyNTS_archiveSuffix).toBe('string');
|
|
56
|
+
});
|
|
21
57
|
});
|