SPB Git forge

spb/rareindex

Public
54commits 1branches 0releases
7.1 MBsize
maindefault branch
10 days agolast push
TypeScript 61.9% HTML 37.2% SQL 0.7%
1.6 KB · 36 lines typescript
Raw Blame History
1import { describe, expect, it } from 'vitest';2import { dhashFromGray, hamming, hostRule, imageKey, nearestWidth, requestHeadersFor } from './images-core';34describe('images-core', () => {5  it('computes a stable dHash and hamming distance', () => {6    const grad = Array.from({ length: 72 }, (_, i) => (i % 9) * 30); // left→right ramp: all bits 07    const h1 = dhashFromGray(grad);8    expect(h1).toBe('0000000000000000');9    const inv = Array.from({ length: 72 }, (_, i) => 255 - (i % 9) * 30);10    const h2 = dhashFromGray(inv);11    expect(h2).toBe('ffffffffffffffff');12    expect(hamming(h1, h2)).toBe(64);13    expect(hamming(h1, h1)).toBe(0);14  });1516  it('applies host rules', () => {17    expect(hostRule('cards.scryfall.io').maxConcurrent).toBe(4);18    const h = requestHeadersFor(new URL('https://storage.googleapis.com/images.pricecharting.com/x/240.jpg'));19    expect(h.referer).toBe('https://www.pricecharting.com/');20    expect(h['user-agent']).toMatch(/RareIndexImageCache/);21    expect(h['user-agent']).not.toBe('node');22    const c = requestHeadersFor(new URL('https://www.comicconnect.com/coverimages/x.jpg'));23    expect(c.referer).toBe('https://www.comicconnect.com/');24    expect(requestHeadersFor(new URL('https://images.ygoprodeck.com/images/cards/1.jpg')).referer).toBeUndefined();25  });2627  it('snaps widths and keys urls', () => {28    expect(nearestWidth(100)).toBe(192);29    expect(nearestWidth(384)).toBe(384);30    expect(nearestWidth(5000)).toBe(1200);31    expect(nearestWidth('abc')).toBe(384);32    expect(imageKey('https://a/b.jpg')).toHaveLength(40);33    expect(imageKey('https://a/b.jpg')).toBe(imageKey('https://a/b.jpg'));34  });35});36