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' }); });