Skip to main content

max / balanced_breakfast

2.5 KB · 74 lines History Blame Raw
1 const { describe, test } = require('node:test');
2 const assert = require('node:assert');
3 const { BB } = require('./setup');
4
5 describe('BB.state', () => {
6 test('subscribe registers callback and fires on set', () => {
7 let called = false;
8 BB.state.subscribe('_t1', () => { called = true; });
9 BB.state.set('_t1', 'hello');
10 assert.ok(called, 'Subscriber should fire');
11 });
12
13 test('set passes old and new values to subscriber', () => {
14 BB.state.set('_t2', 'first');
15 let capturedOld;
16 BB.state.subscribe('_t2', (n, o) => { capturedOld = o; });
17 BB.state.set('_t2', 'second');
18 assert.strictEqual(capturedOld, 'first');
19 });
20
21 test('set does not trigger unrelated subscribers', () => {
22 let called = false;
23 BB.state.subscribe('_t3_a', () => { called = true; });
24 BB.state.set('_t3_b', 'val');
25 assert.ok(!called, 'Unrelated subscriber should not fire');
26 });
27
28 test('unsubscribe removes callback', () => {
29 let count = 0;
30 const unsub = BB.state.subscribe('_t4', () => { count++; });
31 BB.state.set('_t4', 'a');
32 assert.strictEqual(count, 1);
33 unsub();
34 BB.state.set('_t4', 'b');
35 assert.strictEqual(count, 1);
36 });
37
38 test('set with same value still triggers', () => {
39 BB.state.set('_t5', 'same');
40 let count = 0;
41 BB.state.subscribe('_t5', () => { count++; });
42 BB.state.set('_t5', 'same');
43 assert.strictEqual(count, 1);
44 });
45
46 test('multiple subscribers on same key all fire', () => {
47 let a = false, b = false;
48 BB.state.subscribe('_t6', () => { a = true; });
49 BB.state.subscribe('_t6', () => { b = true; });
50 BB.state.set('_t6', 'v');
51 assert.ok(a && b, 'Both should fire');
52 });
53
54 test('direct property assignment triggers via Proxy', () => {
55 let called = false;
56 BB.state.subscribe('_t7', () => { called = true; });
57 BB.state._t7 = 'proxy';
58 assert.ok(called, 'Proxy set should trigger');
59 assert.strictEqual(BB.state._t7, 'proxy');
60 });
61
62 test('get returns current value', () => {
63 BB.state.set('_t8', 42);
64 assert.strictEqual(BB.state.get('_t8'), 42);
65 });
66
67 test('initial state has expected default keys', () => {
68 assert.ok(Array.isArray(BB.state.sources));
69 assert.strictEqual(BB.state.currentOrder, 'chronological');
70 assert.strictEqual(BB.state.hasMore, false);
71 assert.strictEqual(BB.state.selectedItemId, null);
72 });
73 });
74