import { describe, it, expect } from 'vitest' import { assetRoute } from './assetRoute' describe('assetRoute', () => { // The bug this file exists to prevent: the triage band linked to // /assets/, and there is no /assets/:id route and no catch-all, // so every chip was a dead link on five detail pages. it('routes by asset type, never to /assets', () => { expect(assetRoute({ assettypename: 'machine', pluginid: 223, assetid: 313 })) .toBe('/machines/223') expect(assetRoute({ assettypename: 'computer', pluginid: 279, assetid: 304 })) .toBe('/pcs/279') expect(assetRoute({ assettypename: 'printer', pluginid: 1, assetid: 594 })) .toBe('/printers/1') }) it('uses pluginid, not assetid - they are different rows', () => { // /machines/:id keys on machineid. Passing assetid opens the wrong // machine, or none, and looks like a data problem rather than a link bug. const route = assetRoute({ assettypename: 'machine', pluginid: 223, assetid: 313 }) expect(route).toBe('/machines/223') expect(route).not.toContain('313') }) it('matches the type name whatever case the site seeded it in', () => { // csvimport.py seeds 'Computer' and 'Machine' capitalised; this site's // database holds them lowercase. A case-sensitive lookup produced dead // links at whichever site seeded the other way. expect(assetRoute({ assettypename: 'Computer', pluginid: 7 })).toBe('/pcs/7') expect(assetRoute({ assettypename: 'MACHINE', pluginid: 8 })).toBe('/machines/8') }) it('accepts the older assettype key as well as assettypename', () => { expect(assetRoute({ assettype: 'printer', pluginid: 4 })).toBe('/printers/4') }) it('falls back through typedata when pluginid is absent', () => { expect(assetRoute({ assettypename: 'network_device', typedata: { networkdeviceid: 12 } })) .toBe('/network/12') expect(assetRoute({ assettypename: 'machine', typedata: { machineid: 30 } })) .toBe('/machines/30') }) it('returns a harmless anchor for nothing', () => { expect(assetRoute(null)).toBe('#') expect(assetRoute(undefined)).toBe('#') }) it('handles both spellings of the multiword type names', () => { expect(assetRoute({ assettypename: 'network device', pluginid: 2 })).toBe('/network/2') expect(assetRoute({ assettypename: 'measuring_tool', pluginid: 3 })).toBe('/measuringtools/3') expect(assetRoute({ assettypename: 'measuring tool', pluginid: 3 })).toBe('/measuringtools/3') }) })