init
Gitea Actions Demo / Deploy (push) Failing after 18s

This commit is contained in:
vadim committed 2026-09-24 10:34:27 +03:00
commit 7b999a670c
243 files changed
+24818

No files matched your search

@@ -0,0 +1,94 @@
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { Issue } from '../../domain/entities/issue.entity.js';
import { IssueUserExpanderService } from './issue-user-expander.service.js';
import type { GetUsersUseCase } from '../../../user/application/use-cases/get-users/get-users.use-case.js';
import type { UserDto } from '../../../user/application/dto/user.dto.js';
const FIXED_DATE = new Date('2026-01-01T00:00:00.000Z');
const buildUser = (id: string): UserDto => ({
id,
name: id,
email: `${id}@example.com`,
emailVerified: true,
image: null,
createdAt: FIXED_DATE,
updatedAt: FIXED_DATE,
});
const buildIssue = (overrides: Partial<{ assignee: string | null; reporter: string }> = {}) =>
Issue.reconstitute({
id: 1,
key: 'ISSUE-1',
title: 'Fix login bug',
content: null,
status: 'OPEN',
priority: 0,
assignee: 'assignee' in overrides ? (overrides.assignee ?? null) : 'user-2',
reporter: overrides.reporter ?? 'user-1',
projectId: 'project-1',
createdAt: new Date(),
updatedAt: new Date(),
});
describe('IssueUserExpanderService', () => {
let getUsersUseCase: GetUsersUseCase;
let service: IssueUserExpanderService;
beforeEach(() => {
getUsersUseCase = { execute: vi.fn() } as unknown as GetUsersUseCase;
service = new IssueUserExpanderService(getUsersUseCase);
});
it('resolves assignee and reporter to full users', async () => {
vi.mocked(getUsersUseCase.execute).mockResolvedValue([buildUser('user-1'), buildUser('user-2')]);
const dto = await service.expand(buildIssue());
expect(getUsersUseCase.execute).toHaveBeenCalledWith(expect.objectContaining({ ids: ['user-1', 'user-2'] }));
expect(dto.reporterId).toBe('user-1');
expect(dto.assigneeId).toBe('user-2');
expect(dto.reporter).toEqual(buildUser('user-1'));
expect(dto.assignee).toEqual(buildUser('user-2'));
});
it('resolves assignee to null when the issue has no assignee', async () => {
vi.mocked(getUsersUseCase.execute).mockResolvedValue([buildUser('user-1')]);
const dto = await service.expand(buildIssue({ assignee: null }));
expect(getUsersUseCase.execute).toHaveBeenCalledWith(expect.objectContaining({ ids: ['user-1'] }));
expect(dto.assignee).toBeNull();
});
it('requests each user id only once when reporter and assignee are the same person', async () => {
vi.mocked(getUsersUseCase.execute).mockResolvedValue([buildUser('user-1')]);
await service.expand(buildIssue({ assignee: 'user-1', reporter: 'user-1' }));
expect(getUsersUseCase.execute).toHaveBeenCalledWith(expect.objectContaining({ ids: ['user-1'] }));
});
describe('expandAll', () => {
it('resolves assignee/reporter for every issue in a single batched lookup', async () => {
vi.mocked(getUsersUseCase.execute).mockResolvedValue([buildUser('user-1'), buildUser('user-2')]);
const [first, second] = await service.expandAll([
buildIssue({ assignee: 'user-2', reporter: 'user-1' }),
buildIssue({ assignee: null, reporter: 'user-1' }),
]);
expect(getUsersUseCase.execute).toHaveBeenCalledTimes(1);
expect(getUsersUseCase.execute).toHaveBeenCalledWith(expect.objectContaining({ ids: ['user-1', 'user-2'] }));
expect(first!.assignee).toEqual(buildUser('user-2'));
expect(second!.assignee).toBeNull();
});
it('returns an empty array without calling GetUsersUseCase when there are no issues', async () => {
const result = await service.expandAll([]);
expect(result).toEqual([]);
expect(getUsersUseCase.execute).not.toHaveBeenCalled();
});
});
});