Skip to content

Commit c1a96b0

Browse files
committed
Updated
1 parent cc79a4f commit c1a96b0

6 files changed

Lines changed: 167 additions & 4 deletions

File tree

microservices/config-service/config-service/package.json

Lines changed: 0 additions & 1 deletion
This file was deleted.

microservices/config-service/config-service/src/app.module.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

microservices/config-service/config-service/src/main.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { getRepositoryToken } from '@nestjs/typeorm';
3+
import { ConfigService } from '@nestjs/config';
4+
import { CacheWarmingModule } from './cache-warming.module';
5+
import { CacheWarmingService } from './cache-warming.service';
6+
import { CacheWarmingScheduler } from './cache-warming.scheduler';
7+
import { RedisCacheService } from './redis-cache.service';
8+
import { CacheWarmingController } from './cache-warming.controller';
9+
import { CacheJob } from './entities/cache-job.entity';
10+
import { Metric } from './entities/metric.entity';
11+
import { PreloadData } from './entities/preload-data.entity';
12+
13+
describe('CacheWarmingModule', () => {
14+
let module: TestingModule;
15+
16+
const mockRepository = {
17+
find: jest.fn().mockResolvedValue([]),
18+
create: jest.fn().mockReturnValue({}),
19+
save: jest.fn().mockResolvedValue({}),
20+
};
21+
22+
const mockRedisCacheService = {
23+
get: jest.fn().mockResolvedValue(null),
24+
set: jest.fn().mockResolvedValue('OK'),
25+
del: jest.fn().mockResolvedValue(1),
26+
getStats: jest.fn().mockResolvedValue({ hits: 0, misses: 0, hitRate: 0 }),
27+
};
28+
29+
const mockConfigService = {
30+
get: jest.fn().mockReturnValue('test-value'),
31+
};
32+
33+
beforeEach(async () => {
34+
module = await Test.createTestingModule({
35+
imports: [],
36+
providers: [
37+
CacheWarmingModule,
38+
CacheWarmingService,
39+
CacheWarmingScheduler,
40+
RedisCacheService,
41+
CacheWarmingController,
42+
{
43+
provide: getRepositoryToken(CacheJob),
44+
useValue: mockRepository,
45+
},
46+
{
47+
provide: getRepositoryToken(Metric),
48+
useValue: mockRepository,
49+
},
50+
{
51+
provide: getRepositoryToken(PreloadData),
52+
useValue: mockRepository,
53+
},
54+
{
55+
provide: RedisCacheService,
56+
useValue: mockRedisCacheService,
57+
},
58+
{
59+
provide: ConfigService,
60+
useValue: mockConfigService,
61+
},
62+
],
63+
}).compile();
64+
});
65+
66+
it('should export all required providers', () => {
67+
// Verify that the module defines all necessary providers
68+
const moduleMetadata = Reflect.getMetadata('providers', CacheWarmingModule);
69+
expect(moduleMetadata).toContain(CacheWarmingService);
70+
expect(moduleMetadata).toContain(CacheWarmingScheduler);
71+
expect(moduleMetadata).toContain(RedisCacheService);
72+
});
73+
74+
it('should have all controllers defined', () => {
75+
const moduleMetadata = Reflect.getMetadata('controllers', CacheWarmingModule);
76+
expect(moduleMetadata).toContain(CacheWarmingController);
77+
});
78+
79+
it('should import TypeOrmModule with correct entities', () => {
80+
const moduleMetadata = Reflect.getMetadata('imports', CacheWarmingModule);
81+
const typeOrmModuleImport = moduleMetadata.find(imp => imp.imports && imp.imports[0]?.name === 'TypeOrmModule');
82+
expect(typeOrmModuleImport).toBeDefined();
83+
});
84+
85+
it('should export CacheWarmingService', () => {
86+
const moduleMetadata = Reflect.getMetadata('exports', CacheWarmingModule);
87+
expect(moduleMetadata).toContain(CacheWarmingService);
88+
});
89+
});
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { CacheWarmingService } from './cache-warming.service';
3+
import { getRepositoryToken } from '@nestjs/typeorm';
4+
import { ConfigService } from '@nestjs/config';
5+
import { PreloadData } from './entities/preload-data.entity';
6+
import { CacheJob } from './entities/cache-job.entity';
7+
import { Metric } from './entities/metric.entity';
8+
import { RedisCacheService } from './redis-cache.service';
9+
10+
describe('CacheWarmingService', () => {
11+
let service: CacheWarmingService;
12+
13+
const mockRepository = {
14+
find: jest.fn().mockResolvedValue([]),
15+
create: jest.fn().mockReturnValue({}),
16+
save: jest.fn().mockResolvedValue({}),
17+
};
18+
19+
const mockRedisCacheService = {
20+
get: jest.fn().mockResolvedValue(null),
21+
set: jest.fn().mockResolvedValue('OK'),
22+
del: jest.fn().mockResolvedValue(1),
23+
};
24+
25+
const mockConfigService = {
26+
get: jest.fn().mockReturnValue('test-value'),
27+
};
28+
29+
beforeEach(async () => {
30+
const module: TestingModule = await Test.createTestingModule({
31+
providers: [
32+
CacheWarmingService,
33+
{
34+
provide: getRepositoryToken(PreloadData),
35+
useValue: mockRepository,
36+
},
37+
{
38+
provide: getRepositoryToken(CacheJob),
39+
useValue: mockRepository,
40+
},
41+
{
42+
provide: getRepositoryToken(Metric),
43+
useValue: mockRepository,
44+
},
45+
{
46+
provide: RedisCacheService,
47+
useValue: mockRedisCacheService,
48+
},
49+
{
50+
provide: ConfigService,
51+
useValue: mockConfigService,
52+
},
53+
],
54+
}).compile();
55+
56+
service = module.get<CacheWarmingService>(CacheWarmingService);
57+
});
58+
59+
it('should be defined', () => {
60+
expect(service).toBeDefined();
61+
});
62+
63+
it('should calculate popularity score correctly', () => {
64+
const preloadData = {
65+
accessCount: 100,
66+
hitCount: 85,
67+
missCount: 15,
68+
priority: 50,
69+
lastAccessedAt: new Date(),
70+
warmWindow: 'ALWAYS',
71+
isActive: true,
72+
} as PreloadData;
73+
74+
const score = service['calculatePopularityScore'](preloadData);
75+
expect(score).toBeGreaterThan(0);
76+
});
77+
});

tsconfig.tsbuildinfo

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)