const test = require('node:test'); const assert = require('node:assert/strict'); const { initialState, mergeState } = require('../state'); test('initialState has the expected shape', () => { assert.deepEqual(initialState, { title: '', artist: '', album: '', albumArt: '', isPlaying: false, progress: 0, duration: 0, }); }); test('mergeState applies a single field update', () => { const next = mergeState(initialState, { title: 'Foo' }); assert.equal(next.title, 'Foo'); }); test('mergeState preserves fields not present in the update', () => { const current = { ...initialState, title: 'Old', artist: 'Bar' }; const next = mergeState(current, { title: 'New' }); assert.equal(next.artist, 'Bar'); }); test('mergeState treats undefined fields as no-change', () => { const current = { ...initialState, isPlaying: true }; const next = mergeState(current, { isPlaying: undefined }); assert.equal(next.isPlaying, true); }); test('mergeState applies false as a real value (not a no-change)', () => { const current = { ...initialState, isPlaying: true }; const next = mergeState(current, { isPlaying: false }); assert.equal(next.isPlaying, false); }); test('mergeState does not mutate inputs', () => { const current = { ...initialState }; const update = { title: 'X' }; const before = { ...current }; mergeState(current, update); assert.deepEqual(current, before); assert.deepEqual(update, { title: 'X' }); }); test('mergeState treats null fields as no-change', () => { const current = { ...initialState, title: 'Previous' }; const next = mergeState(current, { title: null }); assert.equal(next.title, 'Previous'); }); test('mergeState applies 0 as a real value (not a no-change)', () => { const current = { ...initialState, progress: 42 }; const next = mergeState(current, { progress: 0 }); assert.equal(next.progress, 0); });