import { describe, expect, it } from 'vitest'; import { canonicalBrand, cleanSetName, hintsFromHtml, hintsFromUrl, mergeHints, sourceLabel, } from '@/lib/link-import'; import { isAllowedWebUrl, isPublicAddress } from '@/lib/net-guard'; describe('Hersteller erkennen', () => { it('kennt die gaengigen Schreibweisen', () => { expect(canonicalBrand('LEGO®')).toBe('Lego'); expect(canonicalBrand('Blue Brixx')).toBe('BlueBrixx'); expect(canonicalBrand('BlueBrixx Pro')).toBe('BlueBrixx'); expect(canonicalBrand('Mega Construx')).toBe('Mega Bloks'); expect(canonicalBrand('COBI')).toBe('Cobi'); }); it('raet nicht bei Unbekanntem', () => { expect(canonicalBrand('Ravensburger')).toBeUndefined(); expect(canonicalBrand('')).toBeUndefined(); expect(canonicalBrand('legoland')).toBe('Lego'); }); }); describe('Daten aus dem Link', () => { it('liest Amazon-Links mit Produktnamen', () => { const url = new URL( 'https://www.amazon.de/LEGO-60398-Familienhaus-Elektroauto-Spielzeug/dp/B0BYZJXGZQ/ref=sr_1_1?keywords=lego', ); expect(sourceLabel(url)).toBe('Amazon'); expect(hintsFromUrl(url)).toEqual({ manufacturer: 'Lego', setNumber: '60398', name: 'Familienhaus Elektroauto', }); }); it('nimmt aus einem Amazon-Link ohne Namen nicht die ASIN', () => { const hints = hintsFromUrl(new URL('https://www.amazon.de/dp/B0BYZJXGZQ')); expect(hints.setNumber).toBeUndefined(); }); it('liest idealo und geizhals', () => { expect( hintsFromUrl( new URL( 'https://www.idealo.de/preisvergleich/OffersOfProduct/202595377_-familienhaus-mit-elektroauto-60398-lego.html', ), ), ).toEqual({ manufacturer: 'Lego', setNumber: '60398', name: 'Familienhaus mit Elektroauto' }); expect( hintsFromUrl(new URL('https://geizhals.de/bluebrixx-burg-blaustein-101400-a2101234.html')), ).toEqual({ manufacturer: 'BlueBrixx', setNumber: '101400', name: 'Burg Blaustein' }); }); it('erkennt Cobi-Nummern mit Bindestrich und Jahreszahlen nicht als Setnummer', () => { expect(hintsFromUrl(new URL('https://example.com/shop/cobi-2-30500-ford-mustang-gt')).setNumber).toBe( '2-30500', ); expect( hintsFromUrl(new URL('https://example.com/p/playmobil-adventskalender-2024-71472')).setNumber, ).toBe('71472'); }); it('liest Marke und Nummer aus Merlins-Bricks-Adressen', () => { expect(hintsFromUrl(new URL('https://www.merlinsbricks.com/sets/bb-108782/'))).toEqual({ manufacturer: 'BlueBrixx', setNumber: '108782', }); expect(hintsFromUrl(new URL('https://www.merlinsbricks.com/sets/cobi-2400'))).toEqual({ manufacturer: 'Cobi', setNumber: '2400', }); }); it('erkennt den Hersteller am Shop', () => { expect(hintsFromUrl(new URL('https://www.bluebrixx.com/de/star-trek/108123/raumstation')).manufacturer).toBe( 'BlueBrixx', ); }); }); describe('Daten aus der Seite', () => { const page = new URL('https://brickfact.com/de-de/sets/lego-city-familienhaus-60398'); it('nimmt schema.org-Produktdaten', () => { const html = `
`; expect(hintsFromHtml(html, page)).toEqual({ manufacturer: 'Lego', setNumber: '60398', name: 'LEGO® City Familienhaus mit Elektroauto 60398', ean: '5702017462363', imageUrl: 'https://brickfact.com/img/60398.webp', pieceCount: 462, year: 2023, }); }); it('faellt auf Open Graph zurueck und verwirft ungueltige EAN', () => { const html = ` `; const hints = hintsFromHtml(html, new URL('https://example.com/burg')); expect(hints.name).toBe('Burg Blaustein & Zubehör'); expect(hints.imageUrl).toBe('https://cdn.example.com/burg.jpg'); expect(hints.ean).toBeUndefined(); }); it('haelt Shop-Artikelnummern nicht fuer Setnummern', () => { const html = ''; expect(hintsFromHtml(html, page).setNumber).toBeUndefined(); }); it('liest Amazon-Seiten ohne schema.org', () => { const html = ` LEGO City Familienhaus mit Elektroauto, 60398 Besuche den LEGO-Store| Modellnummer | 60398 |
|---|---|
| Anzahl der Teile | 462 |