You've already forked pigallery2
mirror of
https://github.com/bpatrik/pigallery2.git
synced 2025-07-17 01:32:29 +02:00
fixing searching
This commit is contained in:
@ -4,13 +4,7 @@ import * as path from 'path';
|
||||
import {Config} from '../../../../../common/config/private/Config';
|
||||
import {DatabaseType} from '../../../../../common/config/private/IPrivateConfig';
|
||||
import {SQLConnection} from '../../../../../backend/model/sql/SQLConnection';
|
||||
import {
|
||||
CameraMetadataEntity,
|
||||
GPSMetadataEntity,
|
||||
PhotoEntity,
|
||||
PhotoMetadataEntity,
|
||||
PositionMetaDataEntity
|
||||
} from '../../../../../backend/model/sql/enitites/PhotoEntity';
|
||||
import {PhotoEntity} from '../../../../../backend/model/sql/enitites/PhotoEntity';
|
||||
import {SearchManager} from '../../../../../backend/model/sql/SearchManager';
|
||||
import {AutoCompleteItem, SearchTypes} from '../../../../../common/entities/AutoCompleteItem';
|
||||
import {SearchResultDTO} from '../../../../../common/entities/SearchResultDTO';
|
||||
@ -18,6 +12,9 @@ import {DirectoryEntity} from '../../../../../backend/model/sql/enitites/Directo
|
||||
import {Utils} from '../../../../../common/Utils';
|
||||
import {TestHelper} from './TestHelper';
|
||||
import {VideoEntity} from '../../../../../backend/model/sql/enitites/VideoEntity';
|
||||
import {PersonEntry} from '../../../../../backend/model/sql/enitites/PersonEntry';
|
||||
import {FaceRegionEntry} from '../../../../../backend/model/sql/enitites/FaceRegionEntry';
|
||||
import {PhotoDTO} from '../../../../../common/entities/PhotoDTO';
|
||||
|
||||
describe('SearchManager', () => {
|
||||
|
||||
@ -28,6 +25,9 @@ describe('SearchManager', () => {
|
||||
const dir = TestHelper.getDirectoryEntry();
|
||||
const p = TestHelper.getPhotoEntry1(dir);
|
||||
const p2 = TestHelper.getPhotoEntry2(dir);
|
||||
const p_faceLess = TestHelper.getPhotoEntry2(dir);
|
||||
delete p_faceLess.metadata.faces;
|
||||
p_faceLess.name = 'fl';
|
||||
const v = TestHelper.getVideoEntry1(dir);
|
||||
|
||||
const setUpSqlDB = async () => {
|
||||
@ -41,13 +41,26 @@ describe('SearchManager', () => {
|
||||
Config.Server.database.type = DatabaseType.sqlite;
|
||||
Config.Server.database.sqlite.storage = dbPath;
|
||||
|
||||
const savePhoto = async (photo: PhotoDTO) => {
|
||||
const savedPhoto = await pr.save(photo);
|
||||
if (!photo.metadata.faces) {
|
||||
return;
|
||||
}
|
||||
for (let i = 0; i < photo.metadata.faces.length; i++) {
|
||||
const face = photo.metadata.faces[i];
|
||||
const person = await conn.getRepository(PersonEntry).save({name: face.name});
|
||||
await conn.getRepository(FaceRegionEntry).save({box: face.box, person: person, media: savedPhoto});
|
||||
}
|
||||
};
|
||||
const conn = await SQLConnection.getConnection();
|
||||
|
||||
const pr = conn.getRepository(PhotoEntity);
|
||||
|
||||
await conn.getRepository(DirectoryEntity).save(p.directory);
|
||||
await pr.save(p);
|
||||
await pr.save(p2);
|
||||
await savePhoto(p);
|
||||
await savePhoto(p2);
|
||||
await savePhoto(p_faceLess);
|
||||
|
||||
await conn.getRepository(VideoEntity).save(v);
|
||||
|
||||
await SQLConnection.close();
|
||||
@ -76,6 +89,9 @@ describe('SearchManager', () => {
|
||||
const sm = new SearchManager();
|
||||
|
||||
const cmp = (a: AutoCompleteItem, b: AutoCompleteItem) => {
|
||||
if (a.text === b.text) {
|
||||
return a.type - b.type;
|
||||
}
|
||||
return a.text.localeCompare(b.text);
|
||||
};
|
||||
|
||||
@ -89,9 +105,14 @@ describe('SearchManager', () => {
|
||||
expect((await sm.autocomplete('arch'))).eql([new AutoCompleteItem('Research City', SearchTypes.position)]);
|
||||
expect((await sm.autocomplete('a')).sort(cmp)).eql([
|
||||
new AutoCompleteItem('Boba Fett', SearchTypes.keyword),
|
||||
new AutoCompleteItem('Boba Fett', SearchTypes.person),
|
||||
new AutoCompleteItem('star wars', SearchTypes.keyword),
|
||||
new AutoCompleteItem('Anakin', SearchTypes.keyword),
|
||||
new AutoCompleteItem('Anakin Skywalker', SearchTypes.person),
|
||||
new AutoCompleteItem('Luke Skywalker', SearchTypes.person),
|
||||
new AutoCompleteItem('Han Solo', SearchTypes.person),
|
||||
new AutoCompleteItem('death star', SearchTypes.keyword),
|
||||
new AutoCompleteItem('Padmé Amidala', SearchTypes.person),
|
||||
new AutoCompleteItem('Padmé Amidala', SearchTypes.keyword),
|
||||
new AutoCompleteItem('Natalie Portman', SearchTypes.keyword),
|
||||
new AutoCompleteItem('Han Solo\'s dice', SearchTypes.photo),
|
||||
@ -120,6 +141,15 @@ describe('SearchManager', () => {
|
||||
resultOverflow: false
|
||||
}));
|
||||
|
||||
expect(Utils.clone(await sm.search('Boba', null))).to.deep.equal(Utils.clone(<SearchResultDTO>{
|
||||
searchText: 'Boba',
|
||||
searchType: null,
|
||||
directories: [],
|
||||
media: [p],
|
||||
metaFile: [],
|
||||
resultOverflow: false
|
||||
}));
|
||||
|
||||
expect(Utils.clone(await sm.search('Tatooine', SearchTypes.position))).to.deep.equal(Utils.clone(<SearchResultDTO>{
|
||||
searchText: 'Tatooine',
|
||||
searchType: SearchTypes.position,
|
||||
@ -133,7 +163,7 @@ describe('SearchManager', () => {
|
||||
searchText: 'ortm',
|
||||
searchType: SearchTypes.keyword,
|
||||
directories: [],
|
||||
media: [p2],
|
||||
media: [p2, p_faceLess],
|
||||
metaFile: [],
|
||||
resultOverflow: false
|
||||
}));
|
||||
@ -142,7 +172,7 @@ describe('SearchManager', () => {
|
||||
searchText: 'ortm',
|
||||
searchType: SearchTypes.keyword,
|
||||
directories: [],
|
||||
media: [p2],
|
||||
media: [p2, p_faceLess],
|
||||
metaFile: [],
|
||||
resultOverflow: false
|
||||
}));
|
||||
@ -151,7 +181,7 @@ describe('SearchManager', () => {
|
||||
searchText: 'wa',
|
||||
searchType: SearchTypes.keyword,
|
||||
directories: [dir],
|
||||
media: [p, p2],
|
||||
media: [p, p2, p_faceLess],
|
||||
metaFile: [],
|
||||
resultOverflow: false
|
||||
}));
|
||||
@ -165,6 +195,15 @@ describe('SearchManager', () => {
|
||||
resultOverflow: false
|
||||
}));
|
||||
|
||||
expect(Utils.clone(await sm.search('sw', SearchTypes.video))).to.deep.equal(Utils.clone(<SearchResultDTO>{
|
||||
searchText: 'sw',
|
||||
searchType: SearchTypes.video,
|
||||
directories: [],
|
||||
media: [v],
|
||||
metaFile: [],
|
||||
resultOverflow: false
|
||||
}));
|
||||
|
||||
expect(Utils.clone(await sm.search('han', SearchTypes.keyword))).to.deep.equal(Utils.clone(<SearchResultDTO>{
|
||||
searchText: 'han',
|
||||
searchType: SearchTypes.keyword,
|
||||
@ -173,6 +212,15 @@ describe('SearchManager', () => {
|
||||
metaFile: [],
|
||||
resultOverflow: false
|
||||
}));
|
||||
|
||||
expect(Utils.clone(await sm.search('Boba', SearchTypes.person))).to.deep.equal(Utils.clone(<SearchResultDTO>{
|
||||
searchText: 'Boba',
|
||||
searchType: SearchTypes.person,
|
||||
directories: [],
|
||||
media: [p],
|
||||
metaFile: [],
|
||||
resultOverflow: false
|
||||
}));
|
||||
});
|
||||
|
||||
|
||||
@ -198,23 +246,16 @@ describe('SearchManager', () => {
|
||||
expect(Utils.clone(await sm.instantSearch('ortm'))).to.deep.equal(Utils.clone({
|
||||
searchText: 'ortm',
|
||||
directories: [],
|
||||
media: [p2],
|
||||
media: [p2, p_faceLess],
|
||||
metaFile: [],
|
||||
resultOverflow: false
|
||||
}));
|
||||
|
||||
expect(Utils.clone(await sm.instantSearch('ortm'))).to.deep.equal(Utils.clone({
|
||||
searchText: 'ortm',
|
||||
directories: [],
|
||||
media: [p2],
|
||||
metaFile: [],
|
||||
resultOverflow: false
|
||||
}));
|
||||
|
||||
expect(Utils.clone(await sm.instantSearch('wa'))).to.deep.equal(Utils.clone({
|
||||
searchText: 'wa',
|
||||
directories: [dir],
|
||||
media: [p, p2],
|
||||
media: [p, p2, p_faceLess],
|
||||
metaFile: [],
|
||||
resultOverflow: false
|
||||
}));
|
||||
@ -226,6 +267,13 @@ describe('SearchManager', () => {
|
||||
metaFile: [],
|
||||
resultOverflow: false
|
||||
}));
|
||||
expect(Utils.clone(await sm.instantSearch('Boba'))).to.deep.equal(Utils.clone({
|
||||
searchText: 'Boba',
|
||||
directories: [],
|
||||
media: [p],
|
||||
metaFile: [],
|
||||
resultOverflow: false
|
||||
}));
|
||||
});
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user