143 lines
6.3 KiB
TypeScript
143 lines
6.3 KiB
TypeScript
import { mapAsset } from 'src/dtos/asset-response.dto';
|
|
import { SearchSuggestionType } from 'src/dtos/search.dto';
|
|
import { IAssetRepository } from 'src/interfaces/asset.interface';
|
|
import { IPersonRepository } from 'src/interfaces/person.interface';
|
|
import { ISearchRepository } from 'src/interfaces/search.interface';
|
|
import { SearchService } from 'src/services/search.service';
|
|
import { assetStub } from 'test/fixtures/asset.stub';
|
|
import { authStub } from 'test/fixtures/auth.stub';
|
|
import { personStub } from 'test/fixtures/person.stub';
|
|
import { newTestService } from 'test/utils';
|
|
import { Mocked, beforeEach, vitest } from 'vitest';
|
|
|
|
vitest.useFakeTimers();
|
|
|
|
describe(SearchService.name, () => {
|
|
let sut: SearchService;
|
|
|
|
let assetMock: Mocked<IAssetRepository>;
|
|
let personMock: Mocked<IPersonRepository>;
|
|
let searchMock: Mocked<ISearchRepository>;
|
|
|
|
beforeEach(() => {
|
|
({ sut, assetMock, personMock, searchMock } = newTestService(SearchService));
|
|
});
|
|
|
|
it('should work', () => {
|
|
expect(sut).toBeDefined();
|
|
});
|
|
|
|
describe('searchPerson', () => {
|
|
it('should pass options to search', async () => {
|
|
const { name } = personStub.withName;
|
|
|
|
await sut.searchPerson(authStub.user1, { name, withHidden: false });
|
|
|
|
expect(personMock.getByName).toHaveBeenCalledWith(authStub.user1.user.id, name, { withHidden: false });
|
|
|
|
await sut.searchPerson(authStub.user1, { name, withHidden: true });
|
|
|
|
expect(personMock.getByName).toHaveBeenCalledWith(authStub.user1.user.id, name, { withHidden: true });
|
|
});
|
|
});
|
|
|
|
describe('getExploreData', () => {
|
|
it('should get assets by city and tag', async () => {
|
|
assetMock.getAssetIdByCity.mockResolvedValue({
|
|
fieldName: 'exifInfo.city',
|
|
items: [{ value: 'test-city', data: assetStub.withLocation.id }],
|
|
});
|
|
assetMock.getByIdsWithAllRelations.mockResolvedValue([assetStub.withLocation]);
|
|
const expectedResponse = [
|
|
{ fieldName: 'exifInfo.city', items: [{ value: 'test-city', data: mapAsset(assetStub.withLocation) }] },
|
|
];
|
|
|
|
const result = await sut.getExploreData(authStub.user1);
|
|
|
|
expect(result).toEqual(expectedResponse);
|
|
});
|
|
});
|
|
|
|
describe('getSearchSuggestions', () => {
|
|
it('should return search suggestions for country', async () => {
|
|
searchMock.getCountries.mockResolvedValue(['USA']);
|
|
await expect(
|
|
sut.getSearchSuggestions(authStub.user1, { includeNull: false, type: SearchSuggestionType.COUNTRY }),
|
|
).resolves.toEqual(['USA']);
|
|
expect(searchMock.getCountries).toHaveBeenCalledWith([authStub.user1.user.id]);
|
|
});
|
|
|
|
it('should return search suggestions for country (including null)', async () => {
|
|
searchMock.getCountries.mockResolvedValue(['USA']);
|
|
await expect(
|
|
sut.getSearchSuggestions(authStub.user1, { includeNull: true, type: SearchSuggestionType.COUNTRY }),
|
|
).resolves.toEqual(['USA', null]);
|
|
expect(searchMock.getCountries).toHaveBeenCalledWith([authStub.user1.user.id]);
|
|
});
|
|
|
|
it('should return search suggestions for state', async () => {
|
|
searchMock.getStates.mockResolvedValue(['California']);
|
|
await expect(
|
|
sut.getSearchSuggestions(authStub.user1, { includeNull: false, type: SearchSuggestionType.STATE }),
|
|
).resolves.toEqual(['California']);
|
|
expect(searchMock.getStates).toHaveBeenCalledWith([authStub.user1.user.id], expect.anything());
|
|
});
|
|
|
|
it('should return search suggestions for state (including null)', async () => {
|
|
searchMock.getStates.mockResolvedValue(['California']);
|
|
await expect(
|
|
sut.getSearchSuggestions(authStub.user1, { includeNull: true, type: SearchSuggestionType.STATE }),
|
|
).resolves.toEqual(['California', null]);
|
|
expect(searchMock.getStates).toHaveBeenCalledWith([authStub.user1.user.id], expect.anything());
|
|
});
|
|
|
|
it('should return search suggestions for city', async () => {
|
|
searchMock.getCities.mockResolvedValue(['Denver']);
|
|
await expect(
|
|
sut.getSearchSuggestions(authStub.user1, { includeNull: false, type: SearchSuggestionType.CITY }),
|
|
).resolves.toEqual(['Denver']);
|
|
expect(searchMock.getCities).toHaveBeenCalledWith([authStub.user1.user.id], expect.anything());
|
|
});
|
|
|
|
it('should return search suggestions for city (including null)', async () => {
|
|
searchMock.getCities.mockResolvedValue(['Denver']);
|
|
await expect(
|
|
sut.getSearchSuggestions(authStub.user1, { includeNull: true, type: SearchSuggestionType.CITY }),
|
|
).resolves.toEqual(['Denver', null]);
|
|
expect(searchMock.getCities).toHaveBeenCalledWith([authStub.user1.user.id], expect.anything());
|
|
});
|
|
|
|
it('should return search suggestions for camera make', async () => {
|
|
searchMock.getCameraMakes.mockResolvedValue(['Nikon']);
|
|
await expect(
|
|
sut.getSearchSuggestions(authStub.user1, { includeNull: false, type: SearchSuggestionType.CAMERA_MAKE }),
|
|
).resolves.toEqual(['Nikon']);
|
|
expect(searchMock.getCameraMakes).toHaveBeenCalledWith([authStub.user1.user.id], expect.anything());
|
|
});
|
|
|
|
it('should return search suggestions for camera make (including null)', async () => {
|
|
searchMock.getCameraMakes.mockResolvedValue(['Nikon']);
|
|
await expect(
|
|
sut.getSearchSuggestions(authStub.user1, { includeNull: true, type: SearchSuggestionType.CAMERA_MAKE }),
|
|
).resolves.toEqual(['Nikon', null]);
|
|
expect(searchMock.getCameraMakes).toHaveBeenCalledWith([authStub.user1.user.id], expect.anything());
|
|
});
|
|
|
|
it('should return search suggestions for camera model', async () => {
|
|
searchMock.getCameraModels.mockResolvedValue(['Fujifilm X100VI']);
|
|
await expect(
|
|
sut.getSearchSuggestions(authStub.user1, { includeNull: false, type: SearchSuggestionType.CAMERA_MODEL }),
|
|
).resolves.toEqual(['Fujifilm X100VI']);
|
|
expect(searchMock.getCameraModels).toHaveBeenCalledWith([authStub.user1.user.id], expect.anything());
|
|
});
|
|
|
|
it('should return search suggestions for camera model (including null)', async () => {
|
|
searchMock.getCameraModels.mockResolvedValue(['Fujifilm X100VI']);
|
|
await expect(
|
|
sut.getSearchSuggestions(authStub.user1, { includeNull: true, type: SearchSuggestionType.CAMERA_MODEL }),
|
|
).resolves.toEqual(['Fujifilm X100VI', null]);
|
|
expect(searchMock.getCameraModels).toHaveBeenCalledWith([authStub.user1.user.id], expect.anything());
|
|
});
|
|
});
|
|
});
|