| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /**
- * Tests for `resolveArchiveSlicerAmsMapping` (#2700).
- *
- * This is the gate between an archive's saved slicer AMS pick and the print
- * modal offering it. The saved tray IDs are *global tray IDs*, which only mean
- * something against the AMS layout of the one printer they were resolved
- * against — tray 5 on printer A can hold a completely different spool than
- * tray 5 on printer B. Everything here exists to make sure the mapping is only
- * ever offered for its own printer.
- */
- import { describe, it, expect } from 'vitest';
- import { resolveArchiveSlicerAmsMapping } from '../../components/PrintModal/archiveAmsMapping';
- const SAVED = { slicer_ams_mapping: { mapping: [4, -1, 12, -1], printer_id: 7 } };
- describe('resolveArchiveSlicerAmsMapping', () => {
- it('returns the mapping when the selected printer is the one it was saved for', () => {
- expect(resolveArchiveSlicerAmsMapping(SAVED, 7)).toEqual([4, -1, 12, -1]);
- });
- it('refuses the mapping on a different printer', () => {
- // The whole point of storing printer_id. Tray 4 on printer 9 is not the
- // spool the slicer picked on printer 7.
- expect(resolveArchiveSlicerAmsMapping(SAVED, 9)).toBeUndefined();
- });
- it('refuses the mapping when no printer is selected yet', () => {
- // Guards the `undefined === undefined` reading as a match: with no printer
- // chosen there is nothing to compare against, so nothing may be offered.
- expect(resolveArchiveSlicerAmsMapping(SAVED, null)).toBeUndefined();
- expect(resolveArchiveSlicerAmsMapping(SAVED, undefined)).toBeUndefined();
- });
- it('returns undefined for archives with no extra_data at all', () => {
- expect(resolveArchiveSlicerAmsMapping(null, 7)).toBeUndefined();
- expect(resolveArchiveSlicerAmsMapping(undefined, 7)).toBeUndefined();
- expect(resolveArchiveSlicerAmsMapping({}, 7)).toBeUndefined();
- });
- it('ignores unrelated extra_data keys', () => {
- // The common case: archives carry plenty of metadata but no saved mapping.
- expect(resolveArchiveSlicerAmsMapping({ printable_objects: { '1': 'part' } }, 7)).toBeUndefined();
- });
- it('rejects a stored value that is missing its printer_id', () => {
- // A mapping saved without knowing which printer it came from can't be
- // safely reused on any printer, including the one it actually came from —
- // there'd be no way to tell.
- expect(resolveArchiveSlicerAmsMapping({ slicer_ams_mapping: { mapping: [4, 12] } }, 7)).toBeUndefined();
- });
- it('rejects malformed stored values instead of throwing', () => {
- // extra_data is free-form JSON off the wire; a bad shape must degrade to
- // "no saved mapping", never crash the modal.
- expect(resolveArchiveSlicerAmsMapping({ slicer_ams_mapping: 'nope' }, 7)).toBeUndefined();
- expect(resolveArchiveSlicerAmsMapping({ slicer_ams_mapping: null }, 7)).toBeUndefined();
- expect(
- resolveArchiveSlicerAmsMapping({ slicer_ams_mapping: { mapping: 'nope', printer_id: 7 } }, 7),
- ).toBeUndefined();
- expect(
- resolveArchiveSlicerAmsMapping({ slicer_ams_mapping: { mapping: [], printer_id: 7 } }, 7),
- ).toBeUndefined();
- });
- it('does not coerce printer ids', () => {
- // A string "7" from a hand-edited record is not printer 7.
- expect(
- resolveArchiveSlicerAmsMapping({ slicer_ams_mapping: { mapping: [4], printer_id: '7' } }, 7),
- ).toBeUndefined();
- });
- });
|