Files
ulitka/src/modules/issue/application/use-cases/get-issue-stats/get-issue-stats.use-case.spec.ts
T
vadim 7b999a670c
Gitea Actions Demo / Deploy (push) Failing after 18s
init
2026-09-24 10:34:27 +03:00

48 lines
1.5 KiB
TypeScript

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);
});
});