mirror of
https://github.com/immich-app/immich.git
synced 2026-04-18 00:21:55 -04:00
71 lines
2.0 KiB
TypeScript
71 lines
2.0 KiB
TypeScript
import type { Faces } from '$lib/stores/people.store';
|
|
import type { Size } from '$lib/utils/container-utils';
|
|
import { getBoundingBox } from '$lib/utils/people-utils';
|
|
|
|
const makeFace = (overrides: Partial<Faces> = {}): Faces => ({
|
|
id: 'face-1',
|
|
imageWidth: 4000,
|
|
imageHeight: 3000,
|
|
boundingBoxX1: 1000,
|
|
boundingBoxY1: 750,
|
|
boundingBoxX2: 2000,
|
|
boundingBoxY2: 1500,
|
|
...overrides,
|
|
});
|
|
|
|
describe('getBoundingBox', () => {
|
|
it('should scale face coordinates to display dimensions', () => {
|
|
const face = makeFace();
|
|
const imageSize: Size = { width: 800, height: 600 };
|
|
|
|
const boxes = getBoundingBox([face], imageSize);
|
|
|
|
expect(boxes).toHaveLength(1);
|
|
expect(boxes[0]).toEqual({
|
|
id: 'face-1',
|
|
top: 600 * (750 / 3000),
|
|
left: 800 * (1000 / 4000),
|
|
width: 800 * (2000 / 4000) - 800 * (1000 / 4000),
|
|
height: 600 * (1500 / 3000) - 600 * (750 / 3000),
|
|
});
|
|
});
|
|
|
|
it('should map full-image face to full display area', () => {
|
|
const face = makeFace({
|
|
imageWidth: 1000,
|
|
imageHeight: 1000,
|
|
boundingBoxX1: 0,
|
|
boundingBoxY1: 0,
|
|
boundingBoxX2: 1000,
|
|
boundingBoxY2: 1000,
|
|
});
|
|
const imageSize: Size = { width: 600, height: 600 };
|
|
|
|
const boxes = getBoundingBox([face], imageSize);
|
|
|
|
expect(boxes[0]).toEqual({
|
|
id: 'face-1',
|
|
top: 0,
|
|
left: 0,
|
|
width: 600,
|
|
height: 600,
|
|
});
|
|
});
|
|
|
|
it('should return empty array for empty faces', () => {
|
|
expect(getBoundingBox([], { width: 800, height: 600 })).toEqual([]);
|
|
});
|
|
|
|
it('should handle multiple faces', () => {
|
|
const faces = [
|
|
makeFace({ id: 'face-1', boundingBoxX1: 0, boundingBoxY1: 0, boundingBoxX2: 1000, boundingBoxY2: 1000 }),
|
|
makeFace({ id: 'face-2', boundingBoxX1: 2000, boundingBoxY1: 1500, boundingBoxX2: 3000, boundingBoxY2: 2500 }),
|
|
];
|
|
|
|
const boxes = getBoundingBox(faces, { width: 800, height: 600 });
|
|
|
|
expect(boxes).toHaveLength(2);
|
|
expect(boxes[0].left).toBeLessThan(boxes[1].left);
|
|
});
|
|
});
|