import { CanvasUtilitiesService } from '../helpers/services/canvas-utilities/canvas-utilities.service'; import { BorderUnit, DimensionsInterface, EnclosingQuadrilateral, MaskImageMapInterface } from '../models/index'; export function testBorder() { return { width: (border: number) => ({ unit: (borderUnit: BorderUnit) => ({ assetSize: (assetSize: DimensionsInterface) => ({ maskSize: (maskSize: DimensionsInterface) => ({ dpi: (dpi: number) => ({ containerToMaskScale: (containerToMaskScale: number) => { const result = calculateEnclosingQuad( border, borderUnit, assetSize, maskSize, dpi, containerToMaskScale, ); return { expectBorderInPxToBe: (value: number) => expect(result.borderInPx).toEqual(value), }; }, }), }), }), }), }), }; } function calculateEnclosingQuad( border: number, borderUnit: BorderUnit, assetSize: DimensionsInterface, maskSize: DimensionsInterface, dpi: number, containerToMaskScale: number, ): EnclosingQuadrilateral { const baseSize = 1000; const maskImageMap = buildMaskImageMap(baseSize / containerToMaskScale, borderUnit, border, maskSize); const maskImageDimensions = { width: baseSize * containerToMaskScale, height: baseSize * containerToMaskScale }; const containerDimensions = { width: baseSize, height: baseSize }; return new CanvasUtilitiesService() .getScaledEnclosingQuad( containerDimensions, maskImageDimensions, maskImageMap, assetSize, dpi, ); } function buildMaskImageMap(baseSize: number, borderUnit: BorderUnit, borderWidth: number, maskSize: DimensionsInterface): MaskImageMapInterface { return { imageEditorImage: { borderWidth, borderUnit }, mask: { enclosing_quadrilateral: { size: { width: maskSize.width, height: maskSize.height, }, }, bleed_area: { heightAdjustedForNegativeBleed: baseSize, widthAdjustedForNegativeBleed: baseSize, points: [[ { x: 0, y: 0 }, { x: maskSize.width, y: 0 }, { x: maskSize.width, y: maskSize.height }, { x: 0, y: maskSize.height }, ]], }, }, } as MaskImageMapInterface; }