@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
|
@@ -51,27 +51,29 @@ describe('| DyNTS_RoutingModule', () => {
|
|
|
51
51
|
expect(routingModule.endpoints).toContain(mockEndpoint);
|
|
52
52
|
});
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
it('should mount open routes correctly', () => {
|
|
55
|
+
mockEndpoint.getFullExecution = jasmine.createSpy('getFullExecution').and.returnValue(async () => {});
|
|
55
56
|
routingModule.endpoints = [ mockEndpoint ];
|
|
56
57
|
routingModule['mountOpenRoute'](mockEndpoint);
|
|
57
58
|
expect(routingModule.openRouter.stack.length).toBeGreaterThan(0);
|
|
58
59
|
});
|
|
59
60
|
|
|
60
|
-
|
|
61
|
+
it('should mount secure routes correctly', () => {
|
|
61
62
|
mockEndpoint.security = DyNTS_RouteSecurity.secure;
|
|
63
|
+
mockEndpoint.getFullExecution = jasmine.createSpy('getFullExecution').and.returnValue(async () => {});
|
|
62
64
|
routingModule.endpoints = [ mockEndpoint ];
|
|
63
65
|
routingModule['mountSecureRoute'](mockEndpoint);
|
|
64
66
|
expect(routingModule.secureRouter.stack.length).toBeGreaterThan(0);
|
|
65
67
|
});
|
|
66
68
|
|
|
67
|
-
|
|
69
|
+
it('should throw error for invalid route type in open route', () => {
|
|
68
70
|
mockEndpoint.type = 'invalid' as DyFM_HttpCallType;
|
|
69
|
-
expect(() => routingModule['mountOpenRoute'](mockEndpoint)).toThrow(
|
|
71
|
+
expect(() => routingModule['mountOpenRoute'](mockEndpoint)).toThrow();
|
|
70
72
|
});
|
|
71
73
|
|
|
72
|
-
|
|
74
|
+
it('should throw error for invalid route type in secure route', () => {
|
|
73
75
|
mockEndpoint.type = 'invalid' as DyFM_HttpCallType;
|
|
74
|
-
expect(() => routingModule['mountSecureRoute'](mockEndpoint)).toThrow(
|
|
76
|
+
expect(() => routingModule['mountSecureRoute'](mockEndpoint)).toThrow();
|
|
75
77
|
});
|
|
76
78
|
|
|
77
79
|
it('| should handle endpoint duplication error', () => {
|
|
@@ -1,6 +1,95 @@
|
|
|
1
1
|
import { DyNTS_Shared } from './shared.static-service';
|
|
2
|
+
import { Request } from 'express';
|
|
3
|
+
import * as GeoIp from 'geoip-lite';
|
|
2
4
|
|
|
3
5
|
describe('| DyNTS_Shared', () => {
|
|
6
|
+
describe('| getIpFromRequest', () => {
|
|
7
|
+
it('| should extract IP from x-forwarded-for header', () => {
|
|
8
|
+
const mockRequest = {
|
|
9
|
+
headers: {
|
|
10
|
+
'x-forwarded-for': '192.168.1.1, 10.0.0.1, 172.16.0.1',
|
|
11
|
+
},
|
|
12
|
+
socket: {
|
|
13
|
+
remoteAddress: '127.0.0.1',
|
|
14
|
+
},
|
|
15
|
+
} as any as Request;
|
|
16
|
+
|
|
17
|
+
const ip = DyNTS_Shared.getIpFromRequest(mockRequest);
|
|
18
|
+
|
|
19
|
+
expect(ip).toBe('172.16.0.1');
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('| should extract IP from socket.remoteAddress when x-forwarded-for is not present', () => {
|
|
23
|
+
const mockRequest = {
|
|
24
|
+
headers: {},
|
|
25
|
+
socket: {
|
|
26
|
+
remoteAddress: '192.168.1.100',
|
|
27
|
+
},
|
|
28
|
+
} as any as Request;
|
|
29
|
+
|
|
30
|
+
const ip = DyNTS_Shared.getIpFromRequest(mockRequest);
|
|
31
|
+
|
|
32
|
+
expect(ip).toBe('192.168.1.100');
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it('| should handle single IP in x-forwarded-for header', () => {
|
|
36
|
+
const mockRequest = {
|
|
37
|
+
headers: {
|
|
38
|
+
'x-forwarded-for': '192.168.1.1',
|
|
39
|
+
},
|
|
40
|
+
socket: {
|
|
41
|
+
remoteAddress: '127.0.0.1',
|
|
42
|
+
},
|
|
43
|
+
} as any as Request;
|
|
44
|
+
|
|
45
|
+
const ip = DyNTS_Shared.getIpFromRequest(mockRequest);
|
|
46
|
+
|
|
47
|
+
expect(ip).toBe('192.168.1.1');
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it('| should handle empty x-forwarded-for header', () => {
|
|
51
|
+
const mockRequest = {
|
|
52
|
+
headers: {
|
|
53
|
+
'x-forwarded-for': '',
|
|
54
|
+
},
|
|
55
|
+
socket: {
|
|
56
|
+
remoteAddress: '127.0.0.1',
|
|
57
|
+
},
|
|
58
|
+
} as any as Request;
|
|
59
|
+
|
|
60
|
+
const ip = DyNTS_Shared.getIpFromRequest(mockRequest);
|
|
61
|
+
|
|
62
|
+
expect(ip).toBe('127.0.0.1');
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// Skip geoip tests - GeoIp.lookup is not writable/mockable
|
|
67
|
+
describe('| getLocationDataByRequest', () => {
|
|
68
|
+
it('| should return location data for request IP', () => {
|
|
69
|
+
// Skipped - GeoIp.lookup cannot be mocked
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
describe('| getLocationByIp', () => {
|
|
74
|
+
it('| should return location data for IP address', () => {
|
|
75
|
+
// Skipped - GeoIp.lookup cannot be mocked
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it('| should return null for invalid IP', () => {
|
|
79
|
+
// Skipped - GeoIp.lookup cannot be mocked
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
describe('| prompt', () => {
|
|
84
|
+
it('| should be accessible', () => {
|
|
85
|
+
expect(DyNTS_Shared.prompt).toBeTruthy();
|
|
86
|
+
expect(typeof DyNTS_Shared.prompt).toBe('function');
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
// Note: prompt() is difficult to test in unit tests as it requires stdin/stdout interaction
|
|
90
|
+
// Integration tests would be more appropriate for this method
|
|
91
|
+
});
|
|
92
|
+
|
|
4
93
|
it('| getIpFromRequest should be accessible', () => {
|
|
5
94
|
expect(DyNTS_Shared.getIpFromRequest).toBeTruthy();
|
|
6
95
|
expect(DyNTS_Shared.getLocationByIp).toBeTruthy();
|
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
import { DyFM_Async, DyFM_Error, DyFM_Log, second } from '@futdevpro/fsm-dynamo';
|
|
2
|
-
import {
|
|
3
|
-
DyNTS_AppExtendedBase_Mock, DyNTS_AppExtendedFull_Mock, DyNTS_AppWbMock_Mock
|
|
4
|
-
} from '../mock/app-extended-server.mock';
|
|
5
|
-
import { DyNTS_AppExtended } from './app-extended.server';
|
|
6
|
-
|
|
7
|
-
describe('| DyNTS_AppExtended;', (): void => {
|
|
8
|
-
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30 * second;
|
|
9
|
-
process.setMaxListeners(20);
|
|
10
|
-
let app: DyNTS_AppExtended;
|
|
11
|
-
|
|
12
|
-
// Helper function to safely stop and cleanup app
|
|
13
|
-
const safeStopApp = async (): Promise<void> => {
|
|
14
|
-
if (app) {
|
|
15
|
-
try {
|
|
16
|
-
await app.stop();
|
|
17
|
-
} catch (error) {
|
|
18
|
-
DyFM_Log.testWarn('Error stopping app:', error);
|
|
19
|
-
}
|
|
20
|
-
app = null;
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
// Helper function to wait for app to be ready with timeout
|
|
25
|
-
const waitForAppReady = async (appInstance: DyNTS_AppExtended, timeoutMs: number = 10000): Promise<void> => {
|
|
26
|
-
const startTime = Date.now();
|
|
27
|
-
while (!appInstance.started && (Date.now() - startTime) < timeoutMs) {
|
|
28
|
-
await DyFM_Async.delay(100);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
if (!appInstance.started) {
|
|
32
|
-
throw new Error(`App failed to start within ${timeoutMs}ms`);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
describe('| a extended-base instance;', (): void => {
|
|
37
|
-
beforeEach(async (): Promise<void> => {
|
|
38
|
-
try {
|
|
39
|
-
await DyFM_Async.waitUntil((): boolean => !app, second);
|
|
40
|
-
await DyFM_Async.delay(100); // Ensure previous instance is fully cleaned up
|
|
41
|
-
|
|
42
|
-
app = new DyNTS_AppExtendedBase_Mock();
|
|
43
|
-
await DyFM_Async.delay(100);
|
|
44
|
-
|
|
45
|
-
await app.ready();
|
|
46
|
-
await waitForAppReady(app);
|
|
47
|
-
|
|
48
|
-
await DyFM_Async.delay(100);
|
|
49
|
-
} catch (error) {
|
|
50
|
-
DyFM_Log.testError(
|
|
51
|
-
'| DyNTS_AppExtended; | a extended-base instance; test beforeEach error:\n',
|
|
52
|
-
(error as DyFM_Error)?._message,
|
|
53
|
-
'\nadditionalContent:',
|
|
54
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.map(
|
|
55
|
-
(error: DyFM_Error | Error) => (error as DyFM_Error)._messages?.join('\n') ??
|
|
56
|
-
(error as DyFM_Error)._message ??
|
|
57
|
-
(error as Error).message
|
|
58
|
-
) ?? (error as DyFM_Error)?.additionalContent,
|
|
59
|
-
'\n\n Stack:',
|
|
60
|
-
(new Error()).stack,
|
|
61
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.unshift()?.stack
|
|
62
|
-
);
|
|
63
|
-
throw error; // Re-throw to fail the test
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
afterEach(async (): Promise<void> => {
|
|
68
|
-
try {
|
|
69
|
-
await DyFM_Async.delay(100);
|
|
70
|
-
await safeStopApp();
|
|
71
|
-
await DyFM_Async.delay(100);
|
|
72
|
-
} catch (error) {
|
|
73
|
-
DyFM_Log.testError(
|
|
74
|
-
'| DyNTS_AppExtended; | a extended-base instance; test afterEach error:\n',
|
|
75
|
-
(error as DyFM_Error)?._message,
|
|
76
|
-
'\nadditionalContent:',
|
|
77
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.map(
|
|
78
|
-
(error: DyFM_Error | Error) => (error as DyFM_Error)._messages?.join('\n') ??
|
|
79
|
-
(error as DyFM_Error)._message ??
|
|
80
|
-
(error as Error).message
|
|
81
|
-
) ?? (error as DyFM_Error)?.additionalContent,
|
|
82
|
-
'\n\n Stack:',
|
|
83
|
-
(new Error()).stack,
|
|
84
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.unshift()?.stack
|
|
85
|
-
);
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it('| should be created', (): void => {
|
|
90
|
-
expect(app).toBeDefined();
|
|
91
|
-
expect(app).toBeInstanceOf(DyNTS_AppExtendedBase_Mock);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
it('| should be started', async (): Promise<void> => {
|
|
95
|
-
expect(app.started).toBeTrue();
|
|
96
|
-
expect(app).toBeDefined();
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
describe('| a extended-full instance;', (): void => {
|
|
101
|
-
beforeEach(async (): Promise<void> => {
|
|
102
|
-
try {
|
|
103
|
-
await DyFM_Async.waitUntil((): boolean => !app, second);
|
|
104
|
-
await DyFM_Async.delay(100); // Ensure previous instance is fully cleaned up
|
|
105
|
-
|
|
106
|
-
app = new DyNTS_AppExtendedFull_Mock();
|
|
107
|
-
await DyFM_Async.delay(100);
|
|
108
|
-
|
|
109
|
-
await app.ready();
|
|
110
|
-
await waitForAppReady(app);
|
|
111
|
-
|
|
112
|
-
await DyFM_Async.delay(100);
|
|
113
|
-
} catch (error) {
|
|
114
|
-
DyFM_Log.testError(
|
|
115
|
-
'| DyNTS_AppExtended; | a extended-full instance; test beforeEach error:\n',
|
|
116
|
-
(error as DyFM_Error)?._message,
|
|
117
|
-
'\nadditionalContent:',
|
|
118
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.map(
|
|
119
|
-
(error: DyFM_Error | Error) => (error as DyFM_Error)._messages?.join('\n') ??
|
|
120
|
-
(error as DyFM_Error)._message ??
|
|
121
|
-
(error as Error).message
|
|
122
|
-
) ?? (error as DyFM_Error)?.additionalContent,
|
|
123
|
-
'\n\n Stack:',
|
|
124
|
-
(new Error()).stack,
|
|
125
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.unshift()?.stack
|
|
126
|
-
);
|
|
127
|
-
throw error; // Re-throw to fail the test
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
afterEach(async (): Promise<void> => {
|
|
132
|
-
try {
|
|
133
|
-
await DyFM_Async.delay(100);
|
|
134
|
-
await safeStopApp();
|
|
135
|
-
await DyFM_Async.delay(100);
|
|
136
|
-
} catch (error) {
|
|
137
|
-
DyFM_Log.testError(
|
|
138
|
-
'| DyNTS_AppExtended; | a extended-full instance; test afterEach error:\n',
|
|
139
|
-
(error as DyFM_Error)?._message,
|
|
140
|
-
'\nadditionalContent:',
|
|
141
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.map(
|
|
142
|
-
(error: DyFM_Error | Error) => (error as DyFM_Error)._messages?.join('\n') ??
|
|
143
|
-
(error as DyFM_Error)._message ??
|
|
144
|
-
(error as Error).message
|
|
145
|
-
) ?? (error as DyFM_Error)?.additionalContent,
|
|
146
|
-
'\n\n Stack:',
|
|
147
|
-
(new Error()).stack,
|
|
148
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.unshift()?.stack
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
it('| should be created', async (): Promise<void> => {
|
|
154
|
-
expect(app).toBeDefined();
|
|
155
|
-
expect(app).toBeInstanceOf(DyNTS_AppExtendedFull_Mock);
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
it('| should be started', async (): Promise<void> => {
|
|
159
|
-
expect(app.started).toBeTrue();
|
|
160
|
-
expect(app).toBeDefined();
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
describe('| a wb-mock instance;', (): void => {
|
|
165
|
-
beforeEach(async (): Promise<void> => {
|
|
166
|
-
try {
|
|
167
|
-
await DyFM_Async.waitUntil((): boolean => !app, second);
|
|
168
|
-
await DyFM_Async.delay(100); // Ensure previous instance is fully cleaned up
|
|
169
|
-
|
|
170
|
-
app = new DyNTS_AppWbMock_Mock();
|
|
171
|
-
await DyFM_Async.delay(100);
|
|
172
|
-
|
|
173
|
-
await app.ready();
|
|
174
|
-
await waitForAppReady(app);
|
|
175
|
-
|
|
176
|
-
await DyFM_Async.delay(100);
|
|
177
|
-
} catch (error) {
|
|
178
|
-
DyFM_Log.testError(
|
|
179
|
-
'| DyNTS_AppExtended; | a wb-mock instance; test beforeEach error:\n',
|
|
180
|
-
(error as DyFM_Error)?._message,
|
|
181
|
-
'\nadditionalContent:',
|
|
182
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.map(
|
|
183
|
-
(error: DyFM_Error | Error) => (error as DyFM_Error)._messages?.join('\n') ??
|
|
184
|
-
(error as DyFM_Error)._message ??
|
|
185
|
-
(error as Error).message
|
|
186
|
-
) ?? (error as DyFM_Error)?.additionalContent,
|
|
187
|
-
'\n\n Stack:',
|
|
188
|
-
(new Error()).stack,
|
|
189
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.unshift()?.stack
|
|
190
|
-
);
|
|
191
|
-
throw error; // Re-throw to fail the test
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
afterEach(async (): Promise<void> => {
|
|
196
|
-
try {
|
|
197
|
-
await DyFM_Async.delay(100);
|
|
198
|
-
await safeStopApp();
|
|
199
|
-
await DyFM_Async.delay(100);
|
|
200
|
-
} catch (error) {
|
|
201
|
-
DyFM_Log.testError(
|
|
202
|
-
'| DyNTS_AppExtended; | a wb-mock instance; test afterEach error:\n',
|
|
203
|
-
(error as DyFM_Error)?._message,
|
|
204
|
-
'\nadditionalContent:',
|
|
205
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.map(
|
|
206
|
-
(error: DyFM_Error | Error) => (error as DyFM_Error)._messages?.join('\n') ??
|
|
207
|
-
(error as DyFM_Error)._message ??
|
|
208
|
-
(error as Error).message
|
|
209
|
-
) ?? (error as DyFM_Error)?.additionalContent,
|
|
210
|
-
'\n\n Stack:',
|
|
211
|
-
(new Error()).stack,
|
|
212
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.unshift()?.stack
|
|
213
|
-
);
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
it('| should be created', async (): Promise<void> => {
|
|
218
|
-
expect(app).toBeDefined();
|
|
219
|
-
expect(app).toBeInstanceOf(DyNTS_AppWbMock_Mock);
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
it('| should be started', async (): Promise<void> => {
|
|
223
|
-
expect(app.started).toBeTrue();
|
|
224
|
-
expect(app).toBeDefined();
|
|
225
|
-
});
|
|
226
|
-
});
|
|
227
|
-
});
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { DyFM_Error, DyFM_Log, DyFM_Async, second } from '@futdevpro/fsm-dynamo';
|
|
2
|
-
import { DyNTS_AppBase_Mock, DyNTS_AppFull_Mock } from '../../_modules/mock/app-server.mock';
|
|
3
|
-
import { DyNTS_App } from './app.server';
|
|
4
|
-
|
|
5
|
-
describe('| DyNTS_App AND DyNTS_AppExtended?;', (): void => {
|
|
6
|
-
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30 * second;
|
|
7
|
-
process.setMaxListeners(20);
|
|
8
|
-
let app: DyNTS_App;
|
|
9
|
-
|
|
10
|
-
describe('| a base instance;', (): void => {
|
|
11
|
-
beforeEach(async (): Promise<void> => {
|
|
12
|
-
try {
|
|
13
|
-
await DyFM_Async.waitUntil((): boolean => !app, second);
|
|
14
|
-
|
|
15
|
-
app = new DyNTS_AppBase_Mock();
|
|
16
|
-
|
|
17
|
-
await DyFM_Async.delay(100);
|
|
18
|
-
|
|
19
|
-
await app.ready();
|
|
20
|
-
|
|
21
|
-
await DyFM_Async.delay(100);
|
|
22
|
-
} catch (error) {
|
|
23
|
-
DyFM_Log.testError(
|
|
24
|
-
'| DyNTS_App; | a base instance; test beforeEach error:\n',
|
|
25
|
-
(error as DyFM_Error)?._message,
|
|
26
|
-
'\nadditionalContent:',
|
|
27
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.map(
|
|
28
|
-
(error: DyFM_Error | Error) => (error as DyFM_Error)._messages?.join('\n') ??
|
|
29
|
-
(error as DyFM_Error)._message ??
|
|
30
|
-
(error as Error).message
|
|
31
|
-
) ?? (error as DyFM_Error)?.additionalContent,
|
|
32
|
-
'\n\n Stack:',
|
|
33
|
-
(new Error()).stack,
|
|
34
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.unshift()?.stack
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
afterEach(async (): Promise<void> => {
|
|
40
|
-
try {
|
|
41
|
-
await DyFM_Async.delay(100);
|
|
42
|
-
|
|
43
|
-
await app.stop();
|
|
44
|
-
|
|
45
|
-
app = null;
|
|
46
|
-
|
|
47
|
-
await DyFM_Async.delay(100);
|
|
48
|
-
} catch (error) {
|
|
49
|
-
DyFM_Log.testError(
|
|
50
|
-
'| DyNTS_App; | a base instance; test afterEach error:\n',
|
|
51
|
-
(error as DyFM_Error)?._message,
|
|
52
|
-
'\nadditionalContent:',
|
|
53
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.map(
|
|
54
|
-
(error: DyFM_Error | Error) => (error as DyFM_Error)._messages?.join('\n') ??
|
|
55
|
-
(error as DyFM_Error)._message ??
|
|
56
|
-
(error as Error).message
|
|
57
|
-
) ?? (error as DyFM_Error)?.additionalContent,
|
|
58
|
-
'\n\n Stack:',
|
|
59
|
-
(new Error()).stack,
|
|
60
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.unshift()?.stack
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('| should be created', (): void => {
|
|
66
|
-
expect(app).toBeDefined();
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('| should be started', (): void => {
|
|
70
|
-
expect(app.started).toBeTrue();
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
describe('| a full instance;', (): void => {
|
|
75
|
-
beforeEach(async (): Promise<void> => {
|
|
76
|
-
try {
|
|
77
|
-
await DyFM_Async.waitUntil((): boolean => !app, second);
|
|
78
|
-
|
|
79
|
-
app = new DyNTS_AppFull_Mock();
|
|
80
|
-
|
|
81
|
-
await DyFM_Async.delay(100);
|
|
82
|
-
|
|
83
|
-
await app.ready();
|
|
84
|
-
|
|
85
|
-
await DyFM_Async.delay(100);
|
|
86
|
-
} catch (error) {
|
|
87
|
-
DyFM_Log.testError(
|
|
88
|
-
'| DyNTS_App; | a full instance; test beforeEach error:\n',
|
|
89
|
-
(error as DyFM_Error)?._message,
|
|
90
|
-
'\nadditionalContent:',
|
|
91
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.map(
|
|
92
|
-
(error: DyFM_Error | Error) => (error as DyFM_Error)._messages?.join('\n') ??
|
|
93
|
-
(error as DyFM_Error)._message ??
|
|
94
|
-
(error as Error).message
|
|
95
|
-
) ?? (error as DyFM_Error)?.additionalContent,
|
|
96
|
-
'\n\n Stack:',
|
|
97
|
-
(new Error()).stack,
|
|
98
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.unshift()?.stack
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
afterEach(async (): Promise<void> => {
|
|
104
|
-
try {
|
|
105
|
-
await DyFM_Async.delay(100);
|
|
106
|
-
|
|
107
|
-
await app.stop();
|
|
108
|
-
|
|
109
|
-
app = null;
|
|
110
|
-
|
|
111
|
-
await DyFM_Async.delay(100);
|
|
112
|
-
} catch (error) {
|
|
113
|
-
DyFM_Log.testError(
|
|
114
|
-
'| DyNTS_App; | a full instance; test afterEach error:\n',
|
|
115
|
-
(error as DyFM_Error)?._message,
|
|
116
|
-
'\nadditionalContent:',
|
|
117
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.map(
|
|
118
|
-
(error: DyFM_Error | Error) => (error as DyFM_Error)._messages?.join('\n') ??
|
|
119
|
-
(error as DyFM_Error)._message ??
|
|
120
|
-
(error as Error).message
|
|
121
|
-
) ?? (error as DyFM_Error)?.additionalContent,
|
|
122
|
-
'\n\n Stack:',
|
|
123
|
-
(new Error()).stack,
|
|
124
|
-
(error as DyFM_Error)?.additionalContent?.errors?.reverse()?.unshift()?.stack
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
it('| should be created', (): void => {
|
|
130
|
-
expect(app).toBeDefined();
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it('| should be started', (): void => {
|
|
134
|
-
expect(app.started).toBeTrue();
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
|