import type { Faces } from '$lib/managers/asset-viewer-manager.svelte'; import type { Size } from '$lib/utils/container-utils'; import { getBoundingBox } from '$lib/utils/people-utils'; const makeFace = (overrides: Partial = {}): 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); }); });