test: re-create mocks for drizzle, fs-extra and redis using vi.mock

This commit is contained in:
Nicolas Meienberger 2023-06-23 08:04:08 +02:00 committed by Nicolas Meienberger
parent c85374c0e5
commit b9402dd333
4 changed files with 75 additions and 0 deletions

7
tests/mocks/drizzle.ts Normal file
View file

@ -0,0 +1,7 @@
import { vi } from 'vitest';
export const mockSelect = <T>(returnValue: T) => vi.fn(() => ({ from: vi.fn(() => ({ where: vi.fn(() => returnValue) })) }));
export const mockInsert = <T>(returnValue: T) => vi.fn(() => ({ values: vi.fn(() => ({ returning: vi.fn(() => returnValue) })) }));
export const mockQuery = <T>(returnValue: T) => ({ userTable: { findFirst: vi.fn(() => returnValue) } });

33
tests/mocks/fs-extra.ts Normal file
View file

@ -0,0 +1,33 @@
import path from 'path';
let mockFiles = Object.create(null);
export const fsExtraMock = {
default: {
__createMockFiles: (newMockFiles: Record<string, string>) => {
mockFiles = Object.create(null);
// Create folder tree
Object.keys(newMockFiles).forEach((file) => {
const dir = path.dirname(file);
if (!mockFiles[dir]) {
mockFiles[dir] = [];
}
mockFiles[dir].push(path.basename(file));
mockFiles[file] = newMockFiles[file];
});
},
existsSync: (p: string) => mockFiles[p] !== undefined,
promises: {
unlink: async (p: string) => {
if (mockFiles[p] instanceof Array) {
mockFiles[p].forEach((file: string) => {
delete mockFiles[path.join(p, file)];
});
}
delete mockFiles[p];
},
},
},
};

32
tests/mocks/redis.ts Normal file
View file

@ -0,0 +1,32 @@
import { vi } from 'vitest';
export const redisMock = {
createClient: vi.fn(() => {
const values = new Map();
const expirations = new Map();
return {
isOpen: true,
connect: vi.fn(),
set: (key: string, value: string, exp: number) => {
values.set(key, value);
expirations.set(key, exp);
},
get: (key: string) => values.get(key),
quit: vi.fn(),
del: (key: string) => values.delete(key),
ttl: (key: string) => expirations.get(key),
on: vi.fn(),
keys: (key: string) => {
const keyprefix = key.substring(0, key.length - 1);
const keys = [];
// eslint-disable-next-line no-restricted-syntax
for (const [k] of values) {
if (k.startsWith(keyprefix)) {
keys.push(k);
}
}
return keys;
},
};
}),
};

View file

@ -18,6 +18,9 @@
"@/shared/*": [ "@/shared/*": [
"./src/shared/*" "./src/shared/*"
], ],
"@/tests/*": [
"./tests/*"
],
}, },
"lib": [ "lib": [
"dom", "dom",