Files
3dp-manager/server/test/domains/domains.controller.spec.ts
T
2026-03-29 03:52:43 +03:00

237 lines
7.1 KiB
TypeScript

/* eslint-disable @typescript-eslint/unbound-method */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unsafe-argument */
/* eslint-disable @typescript-eslint/await-thenable */
import { Test, TestingModule } from '@nestjs/testing';
import { DomainsController } from 'src/domains/domains.controller';
import { DomainsService } from 'src/domains/domains.service';
import { DomainScannerService } from 'src/domains/domain-scanner.service';
describe('DomainsController', () => {
let controller: DomainsController;
let domainsService: DomainsService;
let domainScannerService: DomainScannerService;
const mockDomainsService = {
create: jest.fn(),
createMany: jest.fn(),
findAll: jest.fn(),
findAllUnpaginated: jest.fn(),
findOne: jest.fn(),
remove: jest.fn(),
removeAll: jest.fn(),
};
const mockDomainScannerService = {
getCapabilities: jest.fn(),
getScanStatus: jest.fn(),
getLastScanResult: jest.fn(),
startScan: jest.fn(),
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [DomainsController],
providers: [
{
provide: DomainsService,
useValue: mockDomainsService,
},
{
provide: DomainScannerService,
useValue: mockDomainScannerService,
},
],
}).compile();
controller = module.get<DomainsController>(DomainsController);
domainsService = module.get<DomainsService>(DomainsService);
domainScannerService =
module.get<DomainScannerService>(DomainScannerService);
});
afterEach(() => {
jest.clearAllMocks();
});
describe('create', () => {
it('должен создать домен', async () => {
const body = { name: 'example.com' };
const mockDomain = { id: 1, name: 'example.com' };
mockDomainsService.create.mockResolvedValue(mockDomain);
const result = await controller.create(body);
expect(result).toEqual(mockDomain);
expect(domainsService.create).toHaveBeenCalledWith(body);
});
});
describe('uploadMany', () => {
it('должен загрузить несколько доменов', async () => {
const body = { domains: ['ya.ru', 'vk.com'] };
const mockResult = { count: 2 };
mockDomainsService.createMany.mockResolvedValue(mockResult);
const result = await controller.uploadMany(body);
expect(result).toEqual(mockResult);
expect(domainsService.createMany).toHaveBeenCalledWith(body.domains);
});
});
describe('scanCapabilities', () => {
it('должен вернуть возможности сканера', async () => {
const mockCapabilities = {
scannerAvailable: true,
scannerPath: '/usr/bin/scanner',
timeoutAvailable: true,
timeoutPath: '/usr/bin/timeout',
};
mockDomainScannerService.getCapabilities.mockReturnValue(
mockCapabilities,
);
const result = await controller.scanCapabilities();
expect(result).toEqual(mockCapabilities);
expect(domainScannerService.getCapabilities).toHaveBeenCalledTimes(1);
});
});
describe('scanStatus', () => {
it('должен вернуть статус сканирования', async () => {
const mockStatus = {
running: false,
runId: null,
lastRunId: 'scan-123',
};
mockDomainScannerService.getScanStatus.mockReturnValue(mockStatus);
const result = await controller.scanStatus();
expect(result).toEqual(mockStatus);
expect(domainScannerService.getScanStatus).toHaveBeenCalledTimes(1);
});
});
describe('lastScanResult', () => {
it('должен вернуть последний результат сканирования', async () => {
const mockResult = {
runId: 'scan-123',
foundCount: 10,
domains: ['ya.ru', 'vk.com'],
};
mockDomainScannerService.getLastScanResult.mockReturnValue(mockResult);
const result = await controller.lastScanResult();
expect(result).toEqual(mockResult);
expect(domainScannerService.getLastScanResult).toHaveBeenCalledTimes(1);
});
});
describe('startScan', () => {
it('должен запустить сканирование', async () => {
const body = {
addr: '192.168.1.1',
scanSeconds: 60,
thread: 100,
timeout: 30,
};
const mockResult = { success: true, runId: 'scan-456' };
mockDomainScannerService.startScan.mockReturnValue(mockResult);
const result = await controller.startScan(body);
expect(result).toEqual(mockResult);
expect(domainScannerService.startScan).toHaveBeenCalledWith(body);
});
});
describe('findAllWithoutPagination', () => {
it('должен вернуть все домены без пагинации', async () => {
const mockDomains = [
{ id: 1, name: 'ya.ru' },
{ id: 2, name: 'vk.com' },
];
mockDomainsService.findAllUnpaginated.mockResolvedValue(mockDomains);
const result = await controller.findAllWithoutPagination();
expect(result).toEqual(mockDomains);
expect(domainsService.findAllUnpaginated).toHaveBeenCalledTimes(1);
});
});
describe('findAll', () => {
it('должен вернуть домены с пагинацией', async () => {
const mockResult = {
data: [{ id: 1, name: 'ya.ru' }],
total: 100,
};
mockDomainsService.findAll.mockResolvedValue(mockResult);
const result = await controller.findAll(1, 10);
expect(result).toEqual(mockResult);
expect(domainsService.findAll).toHaveBeenCalledWith(1, 10);
});
it('должен использовать значения по умолчанию для пагинации', async () => {
mockDomainsService.findAll.mockResolvedValue({ data: [], total: 0 });
await controller.findAll(undefined as any, undefined as any);
expect(domainsService.findAll).toHaveBeenCalledWith(1, 10);
});
});
describe('findOne', () => {
it('должен вернуть домен по ID', async () => {
const mockDomain = { id: 1, name: 'ya.ru' };
mockDomainsService.findOne.mockResolvedValue(mockDomain);
const result = await controller.findOne('1');
expect(result).toEqual(mockDomain);
expect(domainsService.findOne).toHaveBeenCalledWith(1);
});
});
describe('removeAll', () => {
it('должен удалить все домены', async () => {
const mockResult = { success: true };
mockDomainsService.removeAll.mockResolvedValue(mockResult);
const result = await controller.removeAll();
expect(result).toEqual(mockResult);
expect(domainsService.removeAll).toHaveBeenCalledTimes(1);
});
});
describe('remove', () => {
it('должен удалить домен по ID', async () => {
mockDomainsService.remove.mockResolvedValue(undefined);
await controller.remove('1');
expect(domainsService.remove).toHaveBeenCalledWith(1);
});
});
});