commit
7b999a670c
243 files changed
+24818
No files matched your search
+47
@@ -0,0 +1,47 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import type { IIssueRepository } from '../../../domain/repositories/issue.repository.interface.js';
|
||||
import { GetIssueStatsUseCase } from './get-issue-stats.use-case.js';
|
||||
|
||||
describe('GetIssueStatsUseCase', () => {
|
||||
let repository: IIssueRepository;
|
||||
let useCase: GetIssueStatsUseCase;
|
||||
|
||||
beforeEach(() => {
|
||||
repository = {
|
||||
findById: vi.fn(),
|
||||
findByCKey: vi.fn(),
|
||||
findAll: vi.fn(),
|
||||
countByStatus: vi.fn(),
|
||||
create: vi.fn(),
|
||||
update: vi.fn(),
|
||||
delete: vi.fn(),
|
||||
};
|
||||
useCase = new GetIssueStatsUseCase(repository);
|
||||
});
|
||||
|
||||
it('returns counts for every known status, including those with zero issues', async () => {
|
||||
vi.mocked(repository.countByStatus).mockResolvedValue([
|
||||
{ status: 'OPEN', count: 5 },
|
||||
{ status: 'DONE', count: 2 },
|
||||
]);
|
||||
|
||||
const stats = await useCase.execute('user-1');
|
||||
|
||||
expect(stats.total).toBe(7);
|
||||
expect(stats.byStatus).toEqual([
|
||||
{ status: 'OPEN', label: 'Open', count: 5 },
|
||||
{ status: 'IN_PROGRESS', label: 'In progress', count: 0 },
|
||||
{ status: 'DONE', label: 'Done', count: 2 },
|
||||
{ status: 'CANCELLED', label: 'Cancelled', count: 0 },
|
||||
]);
|
||||
});
|
||||
|
||||
it('returns all-zero stats when there are no issues', async () => {
|
||||
vi.mocked(repository.countByStatus).mockResolvedValue([]);
|
||||
|
||||
const stats = await useCase.execute('user-1');
|
||||
|
||||
expect(stats.total).toBe(0);
|
||||
expect(stats.byStatus.every((entry) => entry.count === 0)).toBe(true);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user