mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-15 00:54:06 -08:00
54 lines
2 KiB
TypeScript
54 lines
2 KiB
TypeScript
|
import { WorkflowStatisticsRepository } from '@db/repositories/workflowStatistics.repository';
|
||
|
import { DataSource, EntityManager, InsertResult, QueryFailedError } from 'typeorm';
|
||
|
import { mockInstance } from '../../shared/mocking';
|
||
|
import { mock, mockClear } from 'jest-mock-extended';
|
||
|
import { StatisticsNames, WorkflowStatistics } from '@/databases/entities/WorkflowStatistics';
|
||
|
|
||
|
const entityManager = mockInstance(EntityManager);
|
||
|
const dataSource = mockInstance(DataSource, { manager: entityManager });
|
||
|
dataSource.getMetadata.mockReturnValue(mock());
|
||
|
Object.assign(entityManager, { connection: dataSource });
|
||
|
const workflowStatisticsRepository = new WorkflowStatisticsRepository(dataSource);
|
||
|
|
||
|
describe('insertWorkflowStatistics', () => {
|
||
|
beforeEach(() => {
|
||
|
mockClear(entityManager.insert);
|
||
|
});
|
||
|
it('Successfully inserts data when it is not yet present', async () => {
|
||
|
entityManager.findOne.mockResolvedValueOnce(null);
|
||
|
entityManager.insert.mockResolvedValueOnce(mockInstance(InsertResult));
|
||
|
|
||
|
const insertionResult = await workflowStatisticsRepository.insertWorkflowStatistics(
|
||
|
StatisticsNames.dataLoaded,
|
||
|
'workflowId',
|
||
|
);
|
||
|
|
||
|
expect(insertionResult).toBe('insert');
|
||
|
});
|
||
|
|
||
|
it('Does not insert when data is present', async () => {
|
||
|
entityManager.findOne.mockResolvedValueOnce(mockInstance(WorkflowStatistics));
|
||
|
const insertionResult = await workflowStatisticsRepository.insertWorkflowStatistics(
|
||
|
StatisticsNames.dataLoaded,
|
||
|
'workflowId',
|
||
|
);
|
||
|
|
||
|
expect(insertionResult).toBe('alreadyExists');
|
||
|
expect(entityManager.insert).not.toHaveBeenCalled();
|
||
|
});
|
||
|
|
||
|
it('throws an error when insertion fails', async () => {
|
||
|
entityManager.findOne.mockResolvedValueOnce(null);
|
||
|
entityManager.insert.mockImplementation(async () => {
|
||
|
throw new QueryFailedError('Query', [], 'driver error');
|
||
|
});
|
||
|
|
||
|
const insertionResult = await workflowStatisticsRepository.insertWorkflowStatistics(
|
||
|
StatisticsNames.dataLoaded,
|
||
|
'workflowId',
|
||
|
);
|
||
|
|
||
|
expect(insertionResult).toBe('failed');
|
||
|
});
|
||
|
});
|