db.mock.ts•2.26 kB
/**
* Database Mock for Tests
*/
import { jest } from '@jest/globals';
// Mock the Prisma client
jest.mock('../../utils/db', () => {
const articleMock = [
{
id: 1,
uuid: '123e4567-e89b-12d3-a456-426614174001',
title: 'Test Article 1',
description: 'Test description 1',
content: 'Test content 1',
url: 'http://example.com/1',
image_url: 'http://example.com/image1.jpg',
source: 'Test Source',
categories: ['general'],
published_at: new Date().toISOString(),
created_at: new Date().toISOString(),
updated_at: new Date().toISOString()
},
{
id: 2,
uuid: '123e4567-e89b-12d3-a456-426614174002',
title: 'Test Article 2',
description: 'Test description 2',
content: 'Test content 2',
url: 'http://example.com/2',
image_url: 'http://example.com/image2.jpg',
source: 'Test Source',
categories: ['technology'],
published_at: new Date().toISOString(),
created_at: new Date().toISOString(),
updated_at: new Date().toISOString()
}
];
return {
connectDb: jest.fn().mockResolvedValue(undefined),
disconnectDb: jest.fn().mockResolvedValue(undefined),
prisma: {
article: {
findMany: jest.fn().mockResolvedValue(articleMock),
findUnique: jest.fn().mockImplementation((args) => {
if (args?.where?.uuid === '123e4567-e89b-12d3-a456-426614174001') {
return Promise.resolve(articleMock[0]);
}
return Promise.resolve(null);
}),
count: jest.fn().mockResolvedValue(articleMock.length),
create: jest.fn().mockImplementation((data) => {
return Promise.resolve({
id: 3,
...data.data,
created_at: new Date().toISOString(),
updated_at: new Date().toISOString()
});
}),
update: jest.fn().mockImplementation((args) => {
return Promise.resolve({
...args.data,
id: args.where.id || 1,
updated_at: new Date().toISOString()
});
}),
delete: jest.fn().mockResolvedValue({ id: 1 })
}
}
};
});
// Also mock axios for external API calls
jest.mock('axios');