Files
SlabUploader/frontend/tests/unit/inventory.test.js
T
Ty b124450d0c M1-5: Measure + PNG + full capture UI (TDD)
- measure.js: sampleWidthsPx scanline sampler
- inventory.js: prepareInventoryMetadata
- +page.svelte: full 4-state capture flow (Add photo, Mask, Axis, Measure)
- Canvas overlay: checkerboard mask, bounding rect, axis line
- Inventory PNG: 3:4 portrait, slab centered 80% fill, alpha
- 77/77 unit tests green
2026-09-14 02:11:28 -07:00

36 lines
1.1 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import * as m from '../../src/lib/core/math.js';
import { prepareInventoryMetadata } from '../../src/lib/core/inventory.js';
describe('prepareInventoryMetadata', () => {
it('calculates correct metadata for a 21in x 12in slab at 1.75in thick', () => {
const Lpx = 3360, L = 21, scale = 160, thickness = 1.75;
const widthPx = 1920; // 12in
const maskPx = Lpx * widthPx; // 6,451,200
const result = prepareInventoryMetadata(
maskPx,
scale,
L,
thickness,
[1600, 1920, 2080, 1600]
);
// sqft = (6,451,200 / 160^2) / 144 = 1.75
expect(result.sqft).toBe(1.75);
// bdft = 1.75 * 1.75 = 3.0625 -> 3.06
expect(result.bdft).toBe(3.06);
expect(result.lengthIn).toBe(21);
expect(result.thicknessIn).toBe(1.75);
expect(result.minWidth).toBe(10);
expect(result.maxWidth).toBe(13);
expect(result.avgWidth).toBe(11.25);
});
it('handles zero area', () => {
const result = prepareInventoryMetadata(0, 160, 21, 1.75, []);
expect(result.sqft).toBe(0);
expect(result.bdft).toBe(0);
});
});