Files

60 lines
1.9 KiB
JavaScript
Raw Permalink Normal View History

2026-04-26 09:32:52 -07:00
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);
});