feat(Pairing): add createPairing id factory

This commit is contained in:
Ilia Mashkov
2026-06-24 13:21:30 +03:00
parent f680fe01ea
commit 91bb046339
2 changed files with 37 additions and 0 deletions
@@ -0,0 +1,22 @@
import {
describe,
expect,
it,
} from 'vitest';
import { createPairing } from './createPairing';
describe('createPairing', () => {
it('builds a pairing from two font ids', () => {
const p = createPairing('Inter', 'Lora');
expect(p.headerFontId).toBe('Inter');
expect(p.bodyFontId).toBe('Lora');
});
it('generates a unique id each call (duplicates stay distinct)', () => {
const a = createPairing('Inter', 'Lora');
const b = createPairing('Inter', 'Lora');
expect(a.id).not.toBe(b.id);
});
it('accepts an explicit id for rehydration', () => {
expect(createPairing('Inter', 'Lora', 'fixed-id').id).toBe('fixed-id');
});
});
@@ -0,0 +1,15 @@
import type { Pairing } from '../types';
/**
* Creates a Pairing with a fresh surrogate id (or a supplied one when
* rehydrating from storage). The id is identity, never content — two pairings
* with the same fonts are still distinct cards.
*
* @param headerFontId - Font entity id for the header role.
* @param bodyFontId - Font entity id for the body role.
* @param id - Explicit id for rehydration; defaults to a fresh UUID.
* @returns The new Pairing.
*/
export function createPairing(headerFontId: string, bodyFontId: string, id: string = crypto.randomUUID()): Pairing {
return { id, headerFontId, bodyFontId };
}