import {jest, describe, it, expect} from 'bun:test'; import {Subject} from '../../src/observables'; describe('A Subject', () => { it('exposes the Subject value', () => { const subject = new Subject('init-value'); expect(subject.value).toBe('init-value'); }); it('updates the Subject value when set', () => { const subject = new Subject('init-value'); subject.value = 'some thing'; expect(subject.value).toBe('some thing'); }); it('notifies subcribers when subscribing', () => { const subject = new Subject('init-value'); const listener = jest.fn() as (value: string) => void; subject.subscribe(listener); expect(listener).toHaveBeenCalledWith('init-value'); }); it('notifies subcribers when value changes', () => { const subject = new Subject('init-value'); const listener = jest.fn() as (value: string) => void; subject.subscribe(listener); subject.value = 'some thing'; expect(listener).toHaveBeenCalledWith('some thing'); }); it('notifies all subcribers when value changes', () => { const subject = new Subject('init-value'); const listener1 = jest.fn() as (value: string) => void; const listener2 = jest.fn() as (value: string) => void; const listener3 = jest.fn() as (value: string) => void; subject.subscribe(listener1); subject.subscribe(listener2); subject.subscribe(listener3); subject.value = 'some thing'; expect(listener1).toHaveBeenCalledWith('some thing'); expect(listener2).toHaveBeenCalledWith('some thing'); expect(listener3).toHaveBeenCalledWith('some thing'); }); });