xcally-nest-library 0.0.35 → 0.0.37-XM3778-bae91
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/.jest/jestEnv.js +3 -0
- package/.nvmrc +1 -1
- package/.prettierrc +18 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/jest.config.d.ts +3 -0
- package/dist/jest.config.js +61 -0
- package/dist/jest.config.js.map +1 -0
- package/dist/src/core/application/__tests__/cached-base.service.spec.d.ts +1 -0
- package/dist/src/core/application/__tests__/cached-base.service.spec.js +224 -0
- package/dist/src/core/application/__tests__/cached-base.service.spec.js.map +1 -0
- package/dist/src/core/application/__tests__/mock-types.d.ts +66 -0
- package/dist/src/core/application/__tests__/mock-types.js +9 -0
- package/dist/src/core/application/__tests__/mock-types.js.map +1 -0
- package/dist/src/core/application/__tests__/mocks/paginated-query.mock.d.ts +2 -0
- package/dist/src/core/application/__tests__/mocks/paginated-query.mock.js +12 -0
- package/dist/src/core/application/__tests__/mocks/paginated-query.mock.js.map +1 -0
- package/dist/src/core/application/__tests__/mocks/paginated-result.mock.d.ts +31 -0
- package/dist/src/core/application/__tests__/mocks/paginated-result.mock.js +169 -0
- package/dist/src/core/application/__tests__/mocks/paginated-result.mock.js.map +1 -0
- package/dist/src/core/application/base.interface.d.ts +4 -4
- package/dist/src/core/application/base.mongo.interface.d.ts +16 -0
- package/dist/src/core/application/base.mongo.interface.js +3 -0
- package/dist/src/core/application/base.mongo.interface.js.map +1 -0
- package/dist/src/core/application/base.mongo.service.d.ts +23 -0
- package/dist/src/core/application/base.mongo.service.js +91 -0
- package/dist/src/core/application/base.mongo.service.js.map +1 -0
- package/dist/src/core/application/base.service.d.ts +2 -2
- package/dist/src/core/application/cached-base.service.d.ts +26 -0
- package/dist/src/core/application/cached-base.service.js +52 -0
- package/dist/src/core/application/cached-base.service.js.map +1 -0
- package/dist/src/core/application/cached.service.d.ts +13 -0
- package/dist/src/core/application/cached.service.js +55 -0
- package/dist/src/core/application/cached.service.js.map +1 -0
- package/dist/src/core/domain/interfaces/base.mongo.repository.interface.d.ts +12 -0
- package/dist/src/core/domain/interfaces/base.mongo.repository.interface.js +3 -0
- package/dist/src/core/domain/interfaces/base.mongo.repository.interface.js.map +1 -0
- package/dist/src/core/domain/interfaces/cache-configuration.interface.d.ts +8 -0
- package/dist/src/core/domain/interfaces/cache-configuration.interface.js +11 -0
- package/dist/src/core/domain/interfaces/cache-configuration.interface.js.map +1 -0
- package/dist/src/core/infrastracture/databases/base.mongo.entity.d.ts +14 -0
- package/dist/src/core/infrastracture/databases/base.mongo.entity.interface.d.ts +10 -0
- package/dist/src/core/infrastracture/databases/base.mongo.entity.interface.js +3 -0
- package/dist/src/core/infrastracture/databases/base.mongo.entity.interface.js.map +1 -0
- package/dist/src/core/infrastracture/databases/base.mongo.entity.js +66 -0
- package/dist/src/core/infrastracture/databases/base.mongo.entity.js.map +1 -0
- package/dist/src/core/infrastracture/databases/base.mongo.repository.d.ts +20 -0
- package/dist/src/core/infrastracture/databases/base.mongo.repository.js +275 -0
- package/dist/src/core/infrastracture/databases/base.mongo.repository.js.map +1 -0
- package/dist/src/core/infrastracture/databases/base.repository.d.ts +1 -1
- package/dist/src/modules/logger/pino/logger.module.js +1 -1
- package/dist/src/modules/logger/pino/logger.module.js.map +1 -1
- package/dist/src/modules/logger/pino/logger.service.js +1 -1
- package/dist/src/modules/logger/pino/logger.service.js.map +1 -1
- package/dist/tsconfig.json +38 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/eslint.config.mjs +49 -0
- package/index.ts +9 -0
- package/jest.config.ts +219 -0
- package/package.json +34 -21
- package/scripts/publish-feat.sh +67 -0
- package/src/core/application/__tests__/cached-base.service.spec.ts +367 -0
- package/src/core/application/__tests__/mock-types.ts +73 -0
- package/src/core/application/__tests__/mocks/paginated-query.mock.ts +10 -0
- package/src/core/application/__tests__/mocks/paginated-result.mock.ts +166 -0
- package/src/core/application/base.interface.ts +4 -5
- package/src/core/application/base.mongo.interface.ts +15 -0
- package/src/core/application/base.mongo.service.ts +170 -0
- package/src/core/application/base.service.ts +2 -2
- package/src/core/application/cached-base.service.ts +119 -0
- package/src/core/application/cached.service.ts +96 -0
- package/src/core/domain/interfaces/base.mongo.repository.interface.ts +14 -0
- package/src/core/domain/interfaces/base.repository.interface.ts +1 -0
- package/src/core/domain/interfaces/cache-configuration.interface.ts +10 -0
- package/src/core/infrastracture/databases/base.mongo.entity.interface.ts +12 -0
- package/src/core/infrastracture/databases/base.mongo.entity.ts +65 -0
- package/src/core/infrastracture/databases/base.mongo.repository.ts +371 -0
- package/src/core/infrastracture/databases/base.repository.ts +1 -1
- package/src/modules/logger/pino/logger.module.ts +1 -1
- package/src/modules/logger/pino/logger.service.ts +1 -1
- package/tsconfig.json +1 -0
- package/dist/src/modules/db-hooks-subscriber/db-hooks-subscriber.module.d.ts +0 -2
- package/dist/src/modules/db-hooks-subscriber/db-hooks-subscriber.module.js +0 -22
- package/dist/src/modules/db-hooks-subscriber/db-hooks-subscriber.module.js.map +0 -1
package/.jest/jestEnv.js
ADDED
package/.nvmrc
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
v22.1
|
|
1
|
+
v22.13.1
|
package/.prettierrc
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
+
"printWidth": 120,
|
|
2
3
|
"singleQuote": true,
|
|
3
4
|
"trailingComma": "all",
|
|
4
|
-
"
|
|
5
|
+
"arrowParens": "avoid",
|
|
6
|
+
"endOfLine": "auto",
|
|
7
|
+
"overrides": [
|
|
8
|
+
{
|
|
9
|
+
"files": "*.json",
|
|
10
|
+
"options": {
|
|
11
|
+
"singleQuote": false
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"files": ".*rc",
|
|
16
|
+
"options": {
|
|
17
|
+
"singleQuote": false,
|
|
18
|
+
"parser": "json"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
]
|
|
5
22
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,16 @@ export * from './src/modules/logger/pino/logger.module';
|
|
|
3
3
|
export * from './src/modules/logger/pino/logger.default';
|
|
4
4
|
export * from './src/core/application/base.interface';
|
|
5
5
|
export * from './src/core/application/base.service';
|
|
6
|
+
export * from './src/core/application/cached-base.service';
|
|
7
|
+
export * from './src/core/application/base.mongo.interface';
|
|
8
|
+
export * from './src/core/application/base.mongo.service';
|
|
9
|
+
export * from './src/core/application/cached-base.service';
|
|
6
10
|
export * from './src/core/domain/interfaces/base.repository.interface';
|
|
11
|
+
export * from './src/core/domain/interfaces/cache-configuration.interface';
|
|
7
12
|
export * from './src/core/infrastracture/databases/base.entity';
|
|
8
13
|
export * from './src/core/infrastracture/databases/base.entity.interface';
|
|
9
14
|
export * from './src/core/infrastracture/databases/base.repository';
|
|
15
|
+
export * from './src/core/infrastracture/databases/base.mongo.entity';
|
|
16
|
+
export * from './src/core/infrastracture/databases/base.mongo.entity.interface';
|
|
17
|
+
export * from './src/core/infrastracture/databases/base.mongo.repository';
|
|
18
|
+
export * from './src/core/domain/interfaces/base.mongo.repository.interface';
|
package/dist/index.js
CHANGED
|
@@ -19,8 +19,17 @@ __exportStar(require("./src/modules/logger/pino/logger.module"), exports);
|
|
|
19
19
|
__exportStar(require("./src/modules/logger/pino/logger.default"), exports);
|
|
20
20
|
__exportStar(require("./src/core/application/base.interface"), exports);
|
|
21
21
|
__exportStar(require("./src/core/application/base.service"), exports);
|
|
22
|
+
__exportStar(require("./src/core/application/cached-base.service"), exports);
|
|
23
|
+
__exportStar(require("./src/core/application/base.mongo.interface"), exports);
|
|
24
|
+
__exportStar(require("./src/core/application/base.mongo.service"), exports);
|
|
25
|
+
__exportStar(require("./src/core/application/cached-base.service"), exports);
|
|
22
26
|
__exportStar(require("./src/core/domain/interfaces/base.repository.interface"), exports);
|
|
27
|
+
__exportStar(require("./src/core/domain/interfaces/cache-configuration.interface"), exports);
|
|
23
28
|
__exportStar(require("./src/core/infrastracture/databases/base.entity"), exports);
|
|
24
29
|
__exportStar(require("./src/core/infrastracture/databases/base.entity.interface"), exports);
|
|
25
30
|
__exportStar(require("./src/core/infrastracture/databases/base.repository"), exports);
|
|
31
|
+
__exportStar(require("./src/core/infrastracture/databases/base.mongo.entity"), exports);
|
|
32
|
+
__exportStar(require("./src/core/infrastracture/databases/base.mongo.entity.interface"), exports);
|
|
33
|
+
__exportStar(require("./src/core/infrastracture/databases/base.mongo.repository"), exports);
|
|
34
|
+
__exportStar(require("./src/core/domain/interfaces/base.mongo.repository.interface"), exports);
|
|
26
35
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2EAAyD;AACzD,0EAAwD;AACxD,2EAAyD;AACzD,wEAAsD;AACtD,sEAAoD;AACpD,yFAAuE;AACvE,kFAAgE;AAChE,4FAA0E;AAC1E,sFAAoE"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2EAAyD;AACzD,0EAAwD;AACxD,2EAAyD;AACzD,wEAAsD;AACtD,sEAAoD;AACpD,6EAA2D;AAC3D,8EAA4D;AAC5D,4EAA0D;AAC1D,6EAA2D;AAC3D,yFAAuE;AACvE,6FAA2E;AAC3E,kFAAgE;AAChE,4FAA0E;AAC1E,sFAAoE;AACpE,wFAAsE;AACtE,kGAAgF;AAChF,4FAA0E;AAC1E,+FAA6E"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const ts_jest_1 = require("ts-jest");
|
|
4
|
+
const tsconfig_json_1 = require("./tsconfig.json");
|
|
5
|
+
const BUILD_ID = process.env.BUILD_ID || '';
|
|
6
|
+
const UNIT_TEST_REPORT_NAME = `${BUILD_ID}_unit_report.html`;
|
|
7
|
+
const jestConfig = {
|
|
8
|
+
bail: 1,
|
|
9
|
+
collectCoverage: true,
|
|
10
|
+
coverageDirectory: 'coverage/unit',
|
|
11
|
+
coveragePathIgnorePatterns: ['/node_modules/', 'coverage', 'integration-tests'],
|
|
12
|
+
coverageThreshold: {
|
|
13
|
+
global: {
|
|
14
|
+
branches: 80,
|
|
15
|
+
functions: 80,
|
|
16
|
+
lines: 80,
|
|
17
|
+
statements: 80,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
moduleDirectories: ['node_modules', '<rootDir>'],
|
|
21
|
+
moduleFileExtensions: ['js', 'json', 'jsx', 'ts', 'tsx', 'node'],
|
|
22
|
+
moduleNameMapper: (0, ts_jest_1.pathsToModuleNameMapper)(tsconfig_json_1.compilerOptions.paths, { prefix: '<rootDir>/' }),
|
|
23
|
+
preset: 'ts-jest',
|
|
24
|
+
reporters: [
|
|
25
|
+
'default',
|
|
26
|
+
[
|
|
27
|
+
'jest-html-reporters',
|
|
28
|
+
{
|
|
29
|
+
publicPath: './test-reports/unit-jest-html',
|
|
30
|
+
filename: `${UNIT_TEST_REPORT_NAME}`,
|
|
31
|
+
expand: false,
|
|
32
|
+
openReport: false,
|
|
33
|
+
includeFailureMsg: true,
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
[
|
|
37
|
+
'jest-junit',
|
|
38
|
+
{
|
|
39
|
+
suiteName: 'jest tests',
|
|
40
|
+
outputDirectory: './test-reports/unit-junit',
|
|
41
|
+
outputName: `${BUILD_ID}_junit.xml`,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
],
|
|
45
|
+
setupFiles: ['<rootDir>/.jest/jestEnv.js'],
|
|
46
|
+
testMatch: ['**/__tests__/**/*.spec.ts', '**/?(*.)+(spec).ts'],
|
|
47
|
+
testPathIgnorePatterns: [
|
|
48
|
+
'/node_modules/',
|
|
49
|
+
'coverage',
|
|
50
|
+
'integration-tests',
|
|
51
|
+
'/src/integration-tests/variable/utils.ts',
|
|
52
|
+
],
|
|
53
|
+
transform: {
|
|
54
|
+
'^.+\\.ts?$': 'ts-jest',
|
|
55
|
+
},
|
|
56
|
+
verbose: true,
|
|
57
|
+
rootDir: '.',
|
|
58
|
+
roots: ['<rootDir>/src/'],
|
|
59
|
+
};
|
|
60
|
+
exports.default = jestConfig;
|
|
61
|
+
//# sourceMappingURL=jest.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jest.config.js","sourceRoot":"","sources":["../jest.config.ts"],"names":[],"mappings":";;AAEA,qCAAwE;AACxE,mDAAkD;AAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;AAC5C,MAAM,qBAAqB,GAAG,GAAG,QAAQ,mBAAmB,CAAC;AAE7D,MAAM,UAAU,GAAyB;IAKvC,IAAI,EAAE,CAAC;IASP,eAAe,EAAE,IAAI;IAMrB,iBAAiB,EAAE,eAAe;IAGlC,0BAA0B,EAAE,CAAC,gBAAgB,EAAE,UAAU,EAAE,mBAAmB,CAAC;IAc/E,iBAAiB,EAAE;QACjB,MAAM,EAAE;YACN,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE;YACb,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,EAAE;SACf;KACF;IA4BD,iBAAiB,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC;IAGhD,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC;IAGhE,gBAAgB,EAAE,IAAA,iCAAuB,EAAC,+BAAe,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAY1F,MAAM,EAAE,SAAS;IAMjB,SAAS,EAAE;QACT,SAAS;QACT;YACE,qBAAqB;YACrB;gBACE,UAAU,EAAE,+BAA+B;gBAC3C,QAAQ,EAAE,GAAG,qBAAqB,EAAE;gBACpC,MAAM,EAAE,KAAK;gBACb,UAAU,EAAE,KAAK;gBACjB,iBAAiB,EAAE,IAAI;aACxB;SACF;QACD;YACE,YAAY;YACZ;gBACE,SAAS,EAAE,YAAY;gBACvB,eAAe,EAAE,2BAA2B;gBAC5C,UAAU,EAAE,GAAG,QAAQ,YAAY;aACpC;SACF;KACF;IA0BD,UAAU,EAAE,CAAC,4BAA4B,CAAC;IAqB1C,SAAS,EAAE,CAAC,2BAA2B,EAAE,oBAAoB,CAAC;IAG9D,sBAAsB,EAAE;QACtB,gBAAgB;QAChB,UAAU;QACV,mBAAmB;QACnB,0CAA0C;KAC3C;IAiBD,SAAS,EAAE;QACT,YAAY,EAAE,SAAS;KACxB;IAWD,OAAO,EAAE,IAAI;IAOb,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,CAAC,gBAAgB,CAAC;CAC1B,CAAC;AACF,kBAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const testing_1 = require("@nestjs/testing");
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const cached_base_service_1 = require("../cached-base.service");
|
|
6
|
+
const mock_types_1 = require("./mock-types");
|
|
7
|
+
const paginated_result_mock_1 = require("./mocks/paginated-result.mock");
|
|
8
|
+
const paginated_query_mock_1 = require("./mocks/paginated-query.mock");
|
|
9
|
+
const mockLoggerService = {
|
|
10
|
+
debug: jest.fn(),
|
|
11
|
+
error: jest.fn(),
|
|
12
|
+
log: jest.fn(),
|
|
13
|
+
};
|
|
14
|
+
const mockCacheManager = {
|
|
15
|
+
get: jest.fn(),
|
|
16
|
+
set: jest.fn(),
|
|
17
|
+
mdel: jest.fn(),
|
|
18
|
+
stores: [
|
|
19
|
+
{
|
|
20
|
+
iterator: jest.fn(async function* (namespace) {
|
|
21
|
+
yield ['cachedbase:findOne:12345', '{"id":1, "name":"cached"}'];
|
|
22
|
+
yield ['cachedbase:findAll:all', '{"data":[]}'];
|
|
23
|
+
yield ['another-service:findAll:all', '{"data":[]}'];
|
|
24
|
+
}),
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
};
|
|
28
|
+
const mockService = {
|
|
29
|
+
findOne: jest.fn(),
|
|
30
|
+
findAll: jest.fn(),
|
|
31
|
+
getMany: jest.fn(),
|
|
32
|
+
create: jest.fn(),
|
|
33
|
+
update: jest.fn(),
|
|
34
|
+
remove: jest.fn(),
|
|
35
|
+
count: jest.fn(),
|
|
36
|
+
};
|
|
37
|
+
describe('CachedBaseService', () => {
|
|
38
|
+
let cachedService;
|
|
39
|
+
let service;
|
|
40
|
+
let cacheManager;
|
|
41
|
+
const testId = 1;
|
|
42
|
+
const testMessage = { id: testId, name: 'Test Entity' };
|
|
43
|
+
const testCreateDTO = { name: 'Test Entity' };
|
|
44
|
+
const testUpdateDTO = { id: testId, name: 'Updated Entity' };
|
|
45
|
+
const cachedData = JSON.stringify(testMessage);
|
|
46
|
+
const generateHash = (params) => (0, crypto_1.createHash)('md5').update(JSON.stringify(params)).digest('hex');
|
|
47
|
+
const cacheConfigOnChange = { invalidationStrategy: mock_types_1.InvalidationStrategy.OnChange };
|
|
48
|
+
const cacheConfigTTL = { invalidationStrategy: mock_types_1.InvalidationStrategy.TTL };
|
|
49
|
+
const setupModule = async (config) => {
|
|
50
|
+
const module = await testing_1.Test.createTestingModule({
|
|
51
|
+
providers: [
|
|
52
|
+
{
|
|
53
|
+
provide: cached_base_service_1.CachedBaseService,
|
|
54
|
+
useFactory: () => new cached_base_service_1.CachedBaseService(mockLoggerService, mockService, mockCacheManager, config),
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
}).compile();
|
|
58
|
+
cachedService = module.get(cached_base_service_1.CachedBaseService);
|
|
59
|
+
service = mockService;
|
|
60
|
+
cacheManager = mockCacheManager;
|
|
61
|
+
jest.clearAllMocks();
|
|
62
|
+
};
|
|
63
|
+
describe('Read operations (findOne, findAll, getMany, count)', () => {
|
|
64
|
+
beforeEach(async () => {
|
|
65
|
+
await setupModule(cacheConfigTTL);
|
|
66
|
+
});
|
|
67
|
+
it('should return cached data on cache hit (findOne)', async () => {
|
|
68
|
+
cacheManager.get.mockResolvedValue(cachedData);
|
|
69
|
+
const result = await cachedService.findOne(testId);
|
|
70
|
+
expect(cacheManager.get).toHaveBeenCalledWith(`cachedbase:findOne:${generateHash({ id: testId })}`);
|
|
71
|
+
expect(service.findOne).not.toHaveBeenCalled();
|
|
72
|
+
expect(cacheManager.set).not.toHaveBeenCalled();
|
|
73
|
+
expect(result).toEqual(testMessage);
|
|
74
|
+
});
|
|
75
|
+
it('should fetch data from service and cache it on cache miss (findOne)', async () => {
|
|
76
|
+
cacheManager.get.mockResolvedValue(undefined);
|
|
77
|
+
service.findOne.mockResolvedValue(testMessage);
|
|
78
|
+
const result = await cachedService.findOne(testId);
|
|
79
|
+
expect(cacheManager.get).toHaveBeenCalledTimes(1);
|
|
80
|
+
expect(service.findOne).toHaveBeenCalledWith(testId);
|
|
81
|
+
expect(cacheManager.set).toHaveBeenCalledWith(`cachedbase:findOne:${generateHash({ id: testId })}`, cachedData);
|
|
82
|
+
expect(result).toEqual(testMessage);
|
|
83
|
+
});
|
|
84
|
+
it('should return cached data on cache hit (getMany)', async () => {
|
|
85
|
+
cacheManager.get.mockResolvedValue(cachedData);
|
|
86
|
+
const result = await cachedService.getMany(paginated_query_mock_1.paginatedQueryMock);
|
|
87
|
+
expect(cacheManager.get).toHaveBeenCalledWith(`cachedbase:getMany:${generateHash(paginated_query_mock_1.paginatedQueryMock)}`);
|
|
88
|
+
expect(service.getMany).not.toHaveBeenCalled();
|
|
89
|
+
expect(cacheManager.set).not.toHaveBeenCalled();
|
|
90
|
+
expect(result).toEqual(testMessage);
|
|
91
|
+
});
|
|
92
|
+
it('should fetch data from service and cache it on cache miss (getMany)', async () => {
|
|
93
|
+
cacheManager.get.mockResolvedValue(undefined);
|
|
94
|
+
service.getMany.mockResolvedValue(paginated_result_mock_1.paginatedResultMock);
|
|
95
|
+
const result = await cachedService.getMany(paginated_query_mock_1.paginatedQueryMock);
|
|
96
|
+
expect(cacheManager.get).toHaveBeenCalledTimes(1);
|
|
97
|
+
expect(service.getMany).toHaveBeenCalledWith(paginated_query_mock_1.paginatedQueryMock);
|
|
98
|
+
expect(cacheManager.set).toHaveBeenCalledWith(`cachedbase:getMany:${generateHash(paginated_query_mock_1.paginatedQueryMock)}`, JSON.stringify(paginated_result_mock_1.paginatedResultMock));
|
|
99
|
+
expect(result).toEqual(paginated_result_mock_1.paginatedResultMock);
|
|
100
|
+
});
|
|
101
|
+
it('should return cached data on cache hit (findAll)', async () => {
|
|
102
|
+
cacheManager.get.mockResolvedValue(JSON.stringify({ data: paginated_result_mock_1.dataResultMock }));
|
|
103
|
+
const result = await cachedService.findAll();
|
|
104
|
+
expect(cacheManager.get).toHaveBeenCalledWith(`cachedbase:findAll:all`);
|
|
105
|
+
expect(service.findAll).not.toHaveBeenCalled();
|
|
106
|
+
expect(cacheManager.set).not.toHaveBeenCalled();
|
|
107
|
+
expect(result).toEqual({ data: paginated_result_mock_1.dataResultMock });
|
|
108
|
+
});
|
|
109
|
+
it('should fetch data from service and cache it on cache miss (findAll)', async () => {
|
|
110
|
+
cacheManager.get.mockResolvedValue(undefined);
|
|
111
|
+
service.findAll.mockResolvedValue({ data: paginated_result_mock_1.dataResultMock });
|
|
112
|
+
const result = await cachedService.findAll();
|
|
113
|
+
expect(cacheManager.get).toHaveBeenCalledTimes(1);
|
|
114
|
+
expect(service.findAll).toHaveBeenCalledWith();
|
|
115
|
+
expect(cacheManager.set).toHaveBeenCalledWith(`cachedbase:findAll:all`, JSON.stringify({ data: paginated_result_mock_1.dataResultMock }));
|
|
116
|
+
expect(result).toEqual({ data: paginated_result_mock_1.dataResultMock });
|
|
117
|
+
});
|
|
118
|
+
it('should fetch data from service when an error occurred retrieving data from cache', async () => {
|
|
119
|
+
cacheManager.get.mockRejectedValue(new Error('Cache not reachable'));
|
|
120
|
+
service.findAll.mockResolvedValue({ data: paginated_result_mock_1.dataResultMock });
|
|
121
|
+
const result = await cachedService.findAll();
|
|
122
|
+
expect(cacheManager.get).toHaveBeenCalledTimes(1);
|
|
123
|
+
expect(service.findAll).toHaveBeenCalledWith();
|
|
124
|
+
expect(cacheManager.set).not.toHaveBeenCalled();
|
|
125
|
+
expect(result).toEqual({ data: paginated_result_mock_1.dataResultMock });
|
|
126
|
+
});
|
|
127
|
+
it('should handle getMany correctly (pagination and query hashing)', async () => {
|
|
128
|
+
const stringifiedResult = JSON.stringify(paginated_result_mock_1.paginatedResultMock);
|
|
129
|
+
cacheManager.get.mockResolvedValue(undefined);
|
|
130
|
+
service.getMany.mockResolvedValue(paginated_result_mock_1.paginatedResultMock);
|
|
131
|
+
await cachedService.getMany(paginated_query_mock_1.paginatedQueryMock);
|
|
132
|
+
const expectedKey = `cachedbase:getMany:${generateHash(paginated_query_mock_1.paginatedQueryMock)}`;
|
|
133
|
+
expect(service.getMany).toHaveBeenCalledWith(paginated_query_mock_1.paginatedQueryMock);
|
|
134
|
+
expect(cacheManager.set).toHaveBeenCalledWith(expectedKey, stringifiedResult);
|
|
135
|
+
});
|
|
136
|
+
it('should return cached data on cache hit (count)', async () => {
|
|
137
|
+
cacheManager.get.mockResolvedValue(JSON.stringify({ count: 42 }));
|
|
138
|
+
const result = await cachedService.count();
|
|
139
|
+
expect(cacheManager.get).toHaveBeenCalledWith(`cachedbase:count:all`);
|
|
140
|
+
expect(service.count).not.toHaveBeenCalled();
|
|
141
|
+
expect(cacheManager.set).not.toHaveBeenCalled();
|
|
142
|
+
expect(result).toEqual({ count: 42 });
|
|
143
|
+
});
|
|
144
|
+
it('should fetch data from service and cache it on cache miss (count)', async () => {
|
|
145
|
+
cacheManager.get.mockResolvedValue(undefined);
|
|
146
|
+
service.count.mockResolvedValue({ count: 42 });
|
|
147
|
+
const result = await cachedService.count();
|
|
148
|
+
expect(cacheManager.get).toHaveBeenCalledWith(`cachedbase:count:all`);
|
|
149
|
+
expect(service.count).toHaveBeenCalledTimes(1);
|
|
150
|
+
expect(cacheManager.set).toHaveBeenCalledWith(`cachedbase:count:all`, JSON.stringify({ count: 42 }));
|
|
151
|
+
expect(result).toEqual({ count: 42 });
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
describe('Write operations (create, update, remove)', () => {
|
|
155
|
+
it('should invalidate cache after create when strategy is OnChange', async () => {
|
|
156
|
+
await setupModule(cacheConfigOnChange);
|
|
157
|
+
service.create.mockResolvedValue(testMessage);
|
|
158
|
+
const result = await cachedService.create(testCreateDTO);
|
|
159
|
+
expect(service.create).toHaveBeenCalledWith(testCreateDTO);
|
|
160
|
+
expect(cacheManager.mdel).toHaveBeenCalledWith([
|
|
161
|
+
'cachedbase:findOne:12345',
|
|
162
|
+
'cachedbase:findAll:all',
|
|
163
|
+
]);
|
|
164
|
+
expect(result).toEqual(testMessage);
|
|
165
|
+
});
|
|
166
|
+
it('should invalidate cache after update when strategy is OnChange', async () => {
|
|
167
|
+
await setupModule(cacheConfigOnChange);
|
|
168
|
+
service.update.mockResolvedValue(testUpdateDTO);
|
|
169
|
+
const result = await cachedService.update(testUpdateDTO);
|
|
170
|
+
expect(service.update).toHaveBeenCalledWith(testUpdateDTO);
|
|
171
|
+
expect(cacheManager.mdel).toHaveBeenCalledWith([
|
|
172
|
+
'cachedbase:findOne:12345',
|
|
173
|
+
'cachedbase:findAll:all',
|
|
174
|
+
]);
|
|
175
|
+
expect(result).toEqual(testUpdateDTO);
|
|
176
|
+
});
|
|
177
|
+
it('should invalidate cache after remove when strategy is OnChange', async () => {
|
|
178
|
+
await setupModule(cacheConfigOnChange);
|
|
179
|
+
service.remove.mockResolvedValue();
|
|
180
|
+
await cachedService.remove(testId);
|
|
181
|
+
expect(service.remove).toHaveBeenCalledWith(testId);
|
|
182
|
+
expect(cacheManager.mdel).toHaveBeenCalledWith([
|
|
183
|
+
'cachedbase:findOne:12345',
|
|
184
|
+
'cachedbase:findAll:all',
|
|
185
|
+
]);
|
|
186
|
+
});
|
|
187
|
+
it('should not invalidate cache after create when strategy is TTL', async () => {
|
|
188
|
+
await setupModule(cacheConfigTTL);
|
|
189
|
+
service.create.mockResolvedValue(testMessage);
|
|
190
|
+
const result = await cachedService.create(testCreateDTO);
|
|
191
|
+
expect(service.create).toHaveBeenCalledWith(testCreateDTO);
|
|
192
|
+
expect(cacheManager.mdel).not.toHaveBeenCalled();
|
|
193
|
+
expect(result).toEqual(testMessage);
|
|
194
|
+
});
|
|
195
|
+
it('should not invalidate cache after update when strategy is TTL', async () => {
|
|
196
|
+
await setupModule(cacheConfigTTL);
|
|
197
|
+
service.update.mockResolvedValue(testUpdateDTO);
|
|
198
|
+
const result = await cachedService.update(testUpdateDTO);
|
|
199
|
+
expect(service.update).toHaveBeenCalledWith(testUpdateDTO);
|
|
200
|
+
expect(cacheManager.mdel).not.toHaveBeenCalled();
|
|
201
|
+
expect(result).toEqual(testUpdateDTO);
|
|
202
|
+
});
|
|
203
|
+
it('should not invalidate cache after remove when strategy is TTL', async () => {
|
|
204
|
+
await setupModule(cacheConfigTTL);
|
|
205
|
+
service.remove.mockResolvedValue();
|
|
206
|
+
await cachedService.remove(testId);
|
|
207
|
+
expect(service.remove).toHaveBeenCalledWith(testId);
|
|
208
|
+
expect(cacheManager.mdel).not.toHaveBeenCalled();
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
it('should return data in case of error while invalidating cache when strategy is OnChange', async () => {
|
|
212
|
+
await setupModule(cacheConfigOnChange);
|
|
213
|
+
service.create.mockResolvedValue(testMessage);
|
|
214
|
+
cacheManager.mdel.mockRejectedValue(new Error('Cannot delete data from cache'));
|
|
215
|
+
const result = await cachedService.create(testCreateDTO);
|
|
216
|
+
expect(service.create).toHaveBeenCalledWith(testCreateDTO);
|
|
217
|
+
expect(cacheManager.mdel).toHaveBeenCalledWith([
|
|
218
|
+
'cachedbase:findOne:12345',
|
|
219
|
+
'cachedbase:findAll:all',
|
|
220
|
+
]);
|
|
221
|
+
expect(result).toEqual(testMessage);
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
//# sourceMappingURL=cached-base.service.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cached-base.service.spec.js","sourceRoot":"","sources":["../../../../../src/core/application/__tests__/cached-base.service.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Paginated } from 'nestjs-paginate';
|
|
2
|
+
export type MockPaginateQuery = PaginateQuery;
|
|
3
|
+
export type MockPaginated<T> = Paginated<T>;
|
|
4
|
+
export interface IBaseService<CreateMessage, UpdateMessage extends {
|
|
5
|
+
id: number | string;
|
|
6
|
+
}, Message> {
|
|
7
|
+
findOne(id: number | string): Promise<Message>;
|
|
8
|
+
findAll(): Promise<{
|
|
9
|
+
data: Message[];
|
|
10
|
+
}>;
|
|
11
|
+
getMany(query?: MockPaginateQuery): Promise<PaginatedServiceMessage | Promise<PaginatedServiceMessage>>;
|
|
12
|
+
create(createDTO: CreateMessage): Promise<Message>;
|
|
13
|
+
update(updateDTO: UpdateMessage): Promise<Message>;
|
|
14
|
+
remove(id: number | string): Promise<void>;
|
|
15
|
+
count(options?: any): Promise<{
|
|
16
|
+
count: number;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
export declare enum InvalidationStrategy {
|
|
20
|
+
OnChange = "OnChange",
|
|
21
|
+
TTL = "TTL"
|
|
22
|
+
}
|
|
23
|
+
export interface CacheConfiguration {
|
|
24
|
+
invalidationStrategy: InvalidationStrategy;
|
|
25
|
+
}
|
|
26
|
+
export interface TestMessage {
|
|
27
|
+
id: number;
|
|
28
|
+
name: string;
|
|
29
|
+
}
|
|
30
|
+
export interface TestCreateMessage {
|
|
31
|
+
name: string;
|
|
32
|
+
}
|
|
33
|
+
export interface TestUpdateMessage extends TestCreateMessage {
|
|
34
|
+
id: number;
|
|
35
|
+
}
|
|
36
|
+
export interface ServiceMessage {
|
|
37
|
+
id: number;
|
|
38
|
+
name?: string | undefined;
|
|
39
|
+
description?: string | undefined;
|
|
40
|
+
createdAt?: string | undefined;
|
|
41
|
+
updatedAt?: string | undefined;
|
|
42
|
+
}
|
|
43
|
+
export interface PaginatedServiceMessage {
|
|
44
|
+
data: ServiceMessage[];
|
|
45
|
+
meta: {
|
|
46
|
+
[key: string]: any;
|
|
47
|
+
} | undefined;
|
|
48
|
+
links: {
|
|
49
|
+
[key: string]: any;
|
|
50
|
+
} | undefined;
|
|
51
|
+
}
|
|
52
|
+
export interface PaginateQuery {
|
|
53
|
+
page?: number;
|
|
54
|
+
limit?: number;
|
|
55
|
+
sortBy?: [string, string][];
|
|
56
|
+
searchBy?: string[];
|
|
57
|
+
search?: string;
|
|
58
|
+
filter?: {
|
|
59
|
+
[column: string]: string | string[];
|
|
60
|
+
};
|
|
61
|
+
select?: string[];
|
|
62
|
+
cursor?: string;
|
|
63
|
+
cursorColumn?: string;
|
|
64
|
+
cursorDirection?: 'before' | 'after';
|
|
65
|
+
path: string;
|
|
66
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InvalidationStrategy = void 0;
|
|
4
|
+
var InvalidationStrategy;
|
|
5
|
+
(function (InvalidationStrategy) {
|
|
6
|
+
InvalidationStrategy["OnChange"] = "OnChange";
|
|
7
|
+
InvalidationStrategy["TTL"] = "TTL";
|
|
8
|
+
})(InvalidationStrategy || (exports.InvalidationStrategy = InvalidationStrategy = {}));
|
|
9
|
+
//# sourceMappingURL=mock-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-types.js","sourceRoot":"","sources":["../../../../../src/core/application/__tests__/mock-types.ts"],"names":[],"mappings":";;;AAoBA,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,6CAAqB,CAAA;IACrB,mCAAW,CAAA;AAEb,CAAC,EAJW,oBAAoB,oCAApB,oBAAoB,QAI/B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.paginatedQueryMock = void 0;
|
|
4
|
+
exports.paginatedQueryMock = {
|
|
5
|
+
limit: 20,
|
|
6
|
+
page: 1,
|
|
7
|
+
sortBy: [
|
|
8
|
+
['id', 'ASC'],
|
|
9
|
+
],
|
|
10
|
+
path: '',
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=paginated-query.mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginated-query.mock.js","sourceRoot":"","sources":["../../../../../../src/core/application/__tests__/mocks/paginated-query.mock.ts"],"names":[],"mappings":";;;AAEa,QAAA,kBAAkB,GAAkB;IAC/C,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,CAAC;IACP,MAAM,EAAE;QACN,CAAC,IAAI,EAAE,KAAK,CAAC;KACd;IACD,IAAI,EAAE,EAAE;CACT,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const dataResultMock: {
|
|
2
|
+
id: number;
|
|
3
|
+
createdAt: string;
|
|
4
|
+
updatedAt: string;
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
}[];
|
|
8
|
+
export declare const paginatedResultMock: {
|
|
9
|
+
meta: {
|
|
10
|
+
itemsPerPage: number;
|
|
11
|
+
totalItems: number;
|
|
12
|
+
currentPage: number;
|
|
13
|
+
totalPages: number;
|
|
14
|
+
sortBy: string[][];
|
|
15
|
+
searchBy: string;
|
|
16
|
+
search: string;
|
|
17
|
+
select: string;
|
|
18
|
+
};
|
|
19
|
+
links: {
|
|
20
|
+
current: string;
|
|
21
|
+
next: string;
|
|
22
|
+
last: string;
|
|
23
|
+
};
|
|
24
|
+
data: {
|
|
25
|
+
id: number;
|
|
26
|
+
createdAt: string;
|
|
27
|
+
updatedAt: string;
|
|
28
|
+
name: string;
|
|
29
|
+
description: string;
|
|
30
|
+
}[];
|
|
31
|
+
};
|