Some checks failed
CD Preprod / Security gate (push) Successful in 29s
CD Preprod / Backend — Lint (push) Successful in 1m5s
CD Preprod / Frontend — Lint & Type-check (push) Successful in 1m14s
CD Preprod / Backend — Unit Tests (push) Successful in 1m8s
CD Preprod / Frontend — Unit Tests (push) Successful in 43s
CD Preprod / Backend — Integration Tests (push) Successful in 46s
CD Preprod / Build Backend (push) Successful in 16m40s
CD Preprod / Build Log Exporter (push) Successful in 1m8s
CD Preprod / Build Frontend (push) Successful in 39m48s
CD Preprod / Image security (${{ matrix.service }}, ${{ matrix.arch }}) (amd64, frontend) (push) Failing after 24s
CD Preprod / Image security (${{ matrix.service }}, ${{ matrix.arch }}) (amd64, backend) (push) Failing after 24s
CD Preprod / Image security (${{ matrix.service }}, ${{ matrix.arch }}) (amd64, log-exporter) (push) Failing after 22s
CD Preprod / Image security (${{ matrix.service }}, ${{ matrix.arch }}) (arm64, backend) (push) Failing after 24s
CD Preprod / Image security (${{ matrix.service }}, ${{ matrix.arch }}) (arm64, frontend) (push) Failing after 24s
CD Preprod / Image security (${{ matrix.service }}, ${{ matrix.arch }}) (arm64, log-exporter) (push) Failing after 21s
CD Preprod / Deploy to Preprod (push) Has been skipped
CD Preprod / Notify Success (push) Has been skipped
CD Preprod / Notify Failure (push) Has been skipped
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { randomUUID } from 'crypto';
|
|
import { ConfigService } from '@nestjs/config';
|
|
import { RedisCacheAdapter } from '../../src/infrastructure/cache/redis-cache.adapter';
|
|
|
|
describe('Redis cache integration', () => {
|
|
let cache: RedisCacheAdapter;
|
|
const prefix = `integration:${randomUUID()}:`;
|
|
const keys = ['value', 'expires'].map(key => `${prefix}${key}`);
|
|
|
|
beforeAll(async () => {
|
|
cache = new RedisCacheAdapter(
|
|
new ConfigService({
|
|
REDIS_HOST: process.env.REDIS_HOST,
|
|
REDIS_PORT: Number(process.env.REDIS_PORT),
|
|
REDIS_PASSWORD: process.env.REDIS_PASSWORD || undefined,
|
|
REDIS_DB: Number(process.env.REDIS_DB),
|
|
})
|
|
);
|
|
await cache.onModuleInit();
|
|
});
|
|
|
|
afterAll(async () => {
|
|
try {
|
|
// Delete only this suite's keys; never flush a shared database.
|
|
await cache.deleteMany(keys);
|
|
} finally {
|
|
await cache.onModuleDestroy();
|
|
}
|
|
});
|
|
|
|
it('round-trips cached application data and invalidates it', async () => {
|
|
const value = { amount: 125.5, currency: 'EUR', ports: ['FRLEH', 'USNYC'] };
|
|
await cache.set(keys[0], value, 60);
|
|
expect(await cache.get(keys[0])).toEqual(value);
|
|
await cache.delete(keys[0]);
|
|
expect(await cache.get(keys[0])).toBeNull();
|
|
});
|
|
|
|
it('expires cached data using the server TTL', async () => {
|
|
await cache.set(keys[1], { valid: true }, 1);
|
|
expect(await cache.exists(keys[1])).toBe(true);
|
|
await new Promise(resolve => setTimeout(resolve, 1200));
|
|
expect(await cache.exists(keys[1])).toBe(false);
|
|
});
|
|
});
|