import { describe, it, expect } from 'vitest' import { matchesWarrantySearch } from './warrantySearch' // Reported: the warranty page could not be searched by machine number. // // The number was in the payload (_related_machine puts it there) and rendered // in the table as a chip, but the filter looked only at vendor, service level, // service tag and asset number. So the identifier the feature was built around // - a PC is warranted as a PC but FOUND by the machine it drives - was the one // thing the box could not find. function warranty(overrides = {}) { return { vendor: 'Dell', servicelevel: 'ProSupport', servicetag: 'ABC1234', assets: [{ assetnumber: 'PC-00912', name: 'Bay 3105 workstation', machine: { machinenumber: '3016', name: 'Makino a61nx' }, }], ...overrides, } } describe('matchesWarrantySearch', () => { it('matches on the machine number', () => { // The reported case. expect(matchesWarrantySearch(warranty(), '3016')).toBe(true) }) it('matches on the machine name', () => { expect(matchesWarrantySearch(warranty(), 'makino')).toBe(true) }) it('still matches the fields it always did', () => { expect(matchesWarrantySearch(warranty(), 'dell')).toBe(true) expect(matchesWarrantySearch(warranty(), 'prosupport')).toBe(true) expect(matchesWarrantySearch(warranty(), 'abc1234')).toBe(true) expect(matchesWarrantySearch(warranty(), 'pc-00912')).toBe(true) }) it('is case insensitive and ignores surrounding space', () => { expect(matchesWarrantySearch(warranty(), ' MAKINO ')).toBe(true) }) it('does not match an unrelated term', () => { expect(matchesWarrantySearch(warranty(), '9999')).toBe(false) }) it('keeps every row when the term is empty', () => { expect(matchesWarrantySearch(warranty(), '')).toBe(true) expect(matchesWarrantySearch(warranty(), ' ')).toBe(true) expect(matchesWarrantySearch(warranty(), undefined)).toBe(true) }) it('handles a warranty whose asset drives no machine', () => { // machine is null whenever the covered asset has no controls link - a // printer, or a PC nobody linked yet. It must not throw. const row = warranty({ assets: [{ assetnumber: 'PR-42', machine: null }] }) expect(matchesWarrantySearch(row, 'PR-42')).toBe(true) expect(matchesWarrantySearch(row, '3016')).toBe(false) }) it('handles a warranty with no linked assets at all', () => { const row = warranty({ assets: [] }) expect(matchesWarrantySearch(row, 'dell')).toBe(true) expect(matchesWarrantySearch(row, '3016')).toBe(false) }) it('tolerates missing fields rather than matching everything', () => { // String(undefined) is 'undefined', which would make a search for 'und' // match every row with an empty field. const row = { vendor: null, servicelevel: undefined, assets: null } expect(matchesWarrantySearch(row, 'und')).toBe(false) expect(matchesWarrantySearch(row, 'null')).toBe(false) }) })