26 lines
1.1 KiB
TypeScript
26 lines
1.1 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import test from 'node:test'
|
|
|
|
import {interfaceLanding,rememberAppearance,storedInterfaceType,storedTheme} from '../src/appearance.ts'
|
|
|
|
function memory(initial:Record<string,string>={}){
|
|
const values=new Map(Object.entries(initial))
|
|
return{getItem:(key:string)=>values.get(key)??null,setItem:(key:string,value:string)=>values.set(key,value),values}
|
|
}
|
|
|
|
test('each interface type owns a distinct landing structure',()=>{
|
|
assert.deepEqual(interfaceLanding('dashboard'),{view:'activity',tab:'chat'})
|
|
assert.deepEqual(interfaceLanding('atelier'),{view:'workspace',tab:'chat'})
|
|
assert.deepEqual(interfaceLanding('review'),{view:'workspace',tab:'changes'})
|
|
})
|
|
|
|
test('interface and theme persist independently with safe defaults',()=>{
|
|
const storage=memory()
|
|
rememberAppearance('review','light',storage)
|
|
assert.equal(storedInterfaceType(storage),'review')
|
|
assert.equal(storedTheme(storage),'light')
|
|
const invalid=memory({'codexpi-interface-type':'palette','codexpi-theme':'neon'})
|
|
assert.equal(storedInterfaceType(invalid),'dashboard')
|
|
assert.equal(storedTheme(invalid),'system')
|
|
})
|