Skip to content

Commit ed9b0f5

Browse files
committed
version 0.0.1
1 parent 1d4cf67 commit ed9b0f5

File tree

8 files changed

+369
-16
lines changed

8 files changed

+369
-16
lines changed

__mocks__/ioredis.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/* eslint-disable no-restricted-syntax */
2+
/* eslint-disable max-classes-per-file */
3+
import { FakeCacheProvider } from '@fvsystem/cache-template';
4+
import { RedisOptions } from 'ioredis';
5+
6+
class Redis {
7+
fakeCache: FakeCacheProvider;
8+
9+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
10+
constructor(options: RedisOptions) {
11+
this.fakeCache = new FakeCacheProvider();
12+
}
13+
14+
async set(
15+
key: string,
16+
value: string,
17+
ttlType?: string,
18+
ttl?: number
19+
): Promise<'OK'> {
20+
if (ttl) {
21+
await this.fakeCache.save({ key, data: value }, '', {
22+
ttlInSeconds: ttl,
23+
});
24+
return 'OK';
25+
}
26+
await this.fakeCache.save({ key, data: value }, '');
27+
return 'OK';
28+
}
29+
30+
async get(key: string): Promise<string | null> {
31+
const value = await this.fakeCache.recover<string>(key, '');
32+
return value || null;
33+
}
34+
35+
async del(key: string): Promise<void> {
36+
await this.fakeCache.invalidate(key, '');
37+
}
38+
}
39+
40+
export default Redis;
41+
42+
export { Redis, RedisOptions };

__tests__/RedisCacheProvider.ts

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { Data } from '@fvsystem/cache-template';
2+
import RedisCacheProvider from '../src/provider/RedisCacheProvider';
3+
4+
jest.mock('ioredis');
5+
6+
let redisCacheProvider: RedisCacheProvider;
7+
8+
describe('RedisCacheProvider', () => {
9+
beforeEach(() => {
10+
redisCacheProvider = new RedisCacheProvider({});
11+
jest.resetAllMocks();
12+
});
13+
14+
it('should be abble to add and recover value', async () => {
15+
const data: Data<number> = {
16+
key: 'test',
17+
data: 1,
18+
};
19+
20+
await redisCacheProvider.save(data, 'app:');
21+
22+
const dataRecovered = await redisCacheProvider.recover<number>(
23+
'test',
24+
'app:'
25+
);
26+
27+
expect(dataRecovered).toBe(1);
28+
});
29+
30+
it('should be remove value after some time', async () => {
31+
const data: Data<number> = {
32+
key: 'test',
33+
data: 1,
34+
};
35+
36+
jest.useFakeTimers();
37+
38+
await redisCacheProvider.save(data, 'app:', { ttlInSeconds: 3 });
39+
40+
const dataRecovered = await redisCacheProvider.recover<number>(
41+
'test',
42+
'app:'
43+
);
44+
45+
expect(dataRecovered).toBe(1);
46+
47+
jest.runAllTimers();
48+
49+
const newDataRecovered = await redisCacheProvider.recover<number>(
50+
'test',
51+
'app:'
52+
);
53+
54+
expect(newDataRecovered).toBe(null);
55+
});
56+
57+
it('should invalidate Key', async () => {
58+
const value: Data<number> = {
59+
key: 'test',
60+
data: 1,
61+
};
62+
63+
await redisCacheProvider.save(value, 'app:');
64+
65+
const dataRecovered = await redisCacheProvider.recover<number>(
66+
'test',
67+
'app:'
68+
);
69+
70+
expect(dataRecovered).toEqual(1);
71+
72+
await redisCacheProvider.invalidate('test', 'app:');
73+
74+
const newDataRecovered = await redisCacheProvider.recover<number>(
75+
'test',
76+
'app:'
77+
);
78+
79+
expect(newDataRecovered).toBe(null);
80+
});
81+
});

__tests__/soma.ts

Lines changed: 0 additions & 5 deletions
This file was deleted.

jest.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ module.exports = {
1313
},
1414
extensionsToTreatAsEsm: ['.ts'],
1515
collectCoverage: true,
16-
collectCoverageFrom: ['src/**/*.{ts,tsx}'],
16+
collectCoverageFrom: ['src/provider/**/*.{ts,tsx}'],
1717
coverageThreshold: {
1818
global: {
1919
branches: 100,

0 commit comments

Comments
 (0)