diff --git a/src/lib/utils/blank.test.ts b/src/lib/utils/blank.test.ts new file mode 100644 index 0000000..a765e95 --- /dev/null +++ b/src/lib/utils/blank.test.ts @@ -0,0 +1,59 @@ +import { describe, it, expect } from 'vitest'; +import { isBlankCharacter } from './blank'; +import type { Character } from '../types'; + +const template = { + id: 'preset:standard', + name: 'Standard', + description: '', + schemaVersion: 1, + records: [ + { + type: 'public', + expanded: true, + fields: [ + { label: 'Name', type: 'text' as const }, + { label: 'Species', type: 'species' as const }, + { label: 'Spoken Languages', type: 'languages' as const } + ] + } + ] +}; + +function makeChar(data: Record): Character { + return { id: 'test', template, data }; +} + +describe('isBlankCharacter', () => { + it('returns true for empty data', () => { + expect(isBlankCharacter(makeChar({}))).toBe(true); + }); + + it('returns true when all values are empty strings', () => { + expect(isBlankCharacter(makeChar({ name: '', species: '' }))).toBe(true); + }); + + it('returns false when any string has a value', () => { + expect(isBlankCharacter(makeChar({ name: 'Yury Zakharov' }))).toBe(false); + }); + + it('returns true for empty arrays', () => { + expect(isBlankCharacter(makeChar({ 'spoken-languages': [] }))).toBe(true); + }); + + it('returns true when languages is just the default', () => { + expect(isBlankCharacter(makeChar({ 'spoken-languages': ['Tau Ceti Basic'] }))).toBe(true); + }); + + it('returns false when languages has custom values', () => { + expect(isBlankCharacter(makeChar({ 'spoken-languages': ['Tau Ceti Basic', "Siik'maas"] }))).toBe(false); + }); + + it('returns true for zero numbers', () => { + expect(isBlankCharacter(makeChar({ height: 0, weight: 0 }))).toBe(true); + }); + + it('returns false for non-zero numbers', () => { + expect(isBlankCharacter(makeChar({ height: 180 }))).toBe(false); + }); +}); diff --git a/src/lib/utils/blank.ts b/src/lib/utils/blank.ts new file mode 100644 index 0000000..5cb6744 --- /dev/null +++ b/src/lib/utils/blank.ts @@ -0,0 +1,16 @@ +import type { Character } from '../types'; + +const DEFAULT_LANGUAGES = ['Tau Ceti Basic']; + +export function isBlankCharacter(char: Character): boolean { + for (const value of Object.values(char.data)) { + if (value === '' || value === undefined || value === null || value === 0) continue; + if (Array.isArray(value)) { + if (value.length === 0) continue; + if (value.length === 1 && DEFAULT_LANGUAGES.includes(value[0])) continue; + return false; + } + return false; + } + return true; +}