import { getGlyphHash } from './glyph_hash'; import type { GlyphHash } from './glyph_hash'; type TestState = { glyphHash?: GlyphHash; }; describe('Glyph Hash utility', () => { test('it throws an exception if the string is too short', () => { expect(() => { getGlyphHash('short'); }).toThrow(); expect(() => { getGlyphHash('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'); }).toThrow(); expect(() => { getGlyphHash('abcdefghijklmnopqrstuvwxyzABCDEF'); }).not.toThrow(); }); test('it treats UUIDs with hyphens the same as those without', () => { const uuidWithHyphens = 'f7722355-2285-46c0-a55f-3483a826f3a6'; const uuidWithoutHyphens = 'f7722355228546c0a55f3483a826f3a6'; expect(getGlyphHash(uuidWithHyphens)).toEqual(getGlyphHash(uuidWithoutHyphens)); }); describe('it generates four sets of glyphs and colors', () => { const state: TestState = {}; beforeEach(() => { state.glyphHash = getGlyphHash('f7722355-2285-46c0-a55f-3483a826f3a6'); }); test('there should be four glyph fragments', () => { expect(state.glyphHash.length).toBe(4); }); test('each fragment should have a single character glyph', () => { for (const glyphHashFragment of state.glyphHash) { expect(typeof glyphHashFragment.glyph).toBe('string'); expect(glyphHashFragment.glyph.length).toBe(1); } }); test('each fragment should have a hexadecimal color', () => { for (const glyphHashFragment of state.glyphHash) { expect(typeof glyphHashFragment.color).toBe('string'); expect(glyphHashFragment.color.length).toBe(7); expect(glyphHashFragment.color).toEqual(expect.stringMatching(/#[0-9a-f]{6}/)); } }); }); });