Files
Immich/server/src/controllers/download.controller.spec.ts
T

49 lines
1.8 KiB
TypeScript

import { Readable } from 'node:stream';
import request from 'supertest';
import { DownloadController } from 'src/controllers/download.controller.js';
import { DownloadService } from 'src/services/download.service.js';
import { factory } from 'test/small.factory.js';
import { ControllerContext, controllerSetup, mockBaseService } from 'test/utils.js';
describe(DownloadController.name, () => {
let ctx: ControllerContext;
const service = mockBaseService(DownloadService);
beforeAll(async () => {
ctx = await controllerSetup(DownloadController, [{ provide: DownloadService, useValue: service }]);
return () => ctx.close();
});
beforeEach(() => {
service.resetAllMocks();
ctx.reset();
});
describe('POST /download/archive', () => {
it('should accept comma-separated assetIds string', async () => {
const downloadArchiveSpy = vi.spyOn(service, 'downloadArchive');
service.downloadArchive.mockResolvedValue({ stream: Readable.from('') });
const ids = [factory.uuid(), factory.uuid()];
const { status } = await request(ctx.getHttpServer())
.post(`/download/archive`)
.type('form')
.send({ assetIds: ids.join(',') });
expect(status).toBe(200);
expect(downloadArchiveSpy).toHaveBeenCalledWith(undefined, { assetIds: ids });
});
it('should accept assetIds array', async () => {
const downloadArchiveSpy = vi.spyOn(service, 'downloadArchive');
service.downloadArchive.mockResolvedValue({ stream: Readable.from('') });
const ids = [factory.uuid(), factory.uuid()];
const { status } = await request(ctx.getHttpServer()).post(`/download/archive`).send({
assetIds: ids,
});
expect(status).toBe(200);
expect(downloadArchiveSpy).toHaveBeenCalledWith(undefined, { assetIds: ids });
});
});
});