1
0
mirror of https://github.com/xuthus83/pigallery2.git synced 2024-11-03 21:04:03 +08:00
pigallery2/test/common/unit/ContentWrapper.spec.ts
Patrik J. Braun b6b576ba2f Implementing ContentWrapper packing.
This enables to extract common string into a map and only reference their values.
This is expected to bring a further 43% savings on search results. Altogether leading to a 50% reduction.
 #437
2022-06-24 18:05:45 +02:00

90 lines
3.3 KiB
TypeScript

import {expect} from 'chai';
import {ContentWrapper} from '../../../src/common/entities/ConentWrapper';
import {TestHelper} from '../../TestHelper';
import {DirectoryPathDTO, ParentDirectoryDTO} from '../../../src/common/entities/DirectoryDTO';
import {SearchResultDTO} from '../../../src/common/entities/SearchResultDTO';
import {SearchQueryTypes, TextSearch} from '../../../src/common/entities/SearchQueryDTO';
import {Utils} from '../../../src/common/Utils';
import {MediaDTOUtils} from '../../../src/common/entities/MediaDTO';
import {VideoDTO} from '../../../src/common/entities/VideoDTO';
import {PhotoDTO} from '../../../src/common/entities/PhotoDTO';
describe('ContentWrapper', () => {
const cleanUpCW = (cw: ContentWrapper): ContentWrapper => {
if (typeof cw.notModified === 'undefined') {
delete cw.notModified;
}
const content = (cw.directory ? cw.directory : cw.searchResult);
for (let i = 0; i < content.media.length; ++i) {
const m = content.media[i];
if (MediaDTOUtils.isPhoto(m)) {
delete (m as VideoDTO).metadata.bitRate;
delete (m as VideoDTO).metadata.duration;
if (!(m as PhotoDTO).metadata.caption) {
delete (m as PhotoDTO).metadata.caption;
}
} else if (MediaDTOUtils.isVideo(m)) {
delete (m as PhotoDTO).metadata.rating;
delete (m as PhotoDTO).metadata.caption;
delete (m as PhotoDTO).metadata.cameraData;
delete (m as PhotoDTO).metadata.keywords;
delete (m as PhotoDTO).metadata.faces;
delete (m as PhotoDTO).metadata.positionData;
}
}
for (let i = 0; i < content.metaFile.length; ++i) {
delete content.metaFile[i].id;
}
return cw;
};
it('pack and unpack directory', () => {
const parent = TestHelper.getDirectoryEntry();
TestHelper.getPhotoEntry(parent);
TestHelper.getPhotoEntry1(parent);
TestHelper.getPhotoEntry2(parent);
TestHelper.getVideoEntry(parent);
TestHelper.getGPXEntry(parent);
const parentOrig = TestHelper.getDirectoryEntry();
TestHelper.getPhotoEntry(parentOrig);
TestHelper.getPhotoEntry1(parentOrig);
TestHelper.getPhotoEntry2(parentOrig);
TestHelper.getVideoEntry(parentOrig);
TestHelper.getGPXEntry(parentOrig);
const cwOrig = new ContentWrapper(parentOrig as ParentDirectoryDTO, null);
const cw = new ContentWrapper(parent as ParentDirectoryDTO, null);
expect(ContentWrapper.unpack(ContentWrapper.pack(cw))).to.deep.equals(cleanUpCW(cwOrig));
});
it('pack and unpack search result', () => {
const parent: DirectoryPathDTO = {
name: 'parent',
path: ''
};
const subDir: DirectoryPathDTO = {
name: 'subDir',
path: 'parent/'
};
const sr: SearchResultDTO = {
directories: [subDir as any],
media: [TestHelper.getPhotoEntry(parent),
TestHelper.getPhotoEntry1(parent),
TestHelper.getPhotoEntry2(subDir),
TestHelper.getVideoEntry(parent)
],
metaFile: [
TestHelper.getGPXEntry(parent)],
resultOverflow: false,
searchQuery: {type: SearchQueryTypes.any_text, text: ''} as TextSearch
};
const cw = new ContentWrapper(null, sr);
expect(ContentWrapper.unpack(ContentWrapper.pack(Utils.clone(cw)))).to.deep.equals(cleanUpCW(cw));
});
});