import { describe, it, expect } from 'vitest'; import { RemoteData, map2, map } from './remote-data'; import { loading, failure, success } from '../testing/remote-data'; const loadingRd: RemoteData = loading(); const failureRd: RemoteData = failure('x'); const ok = (n: number): RemoteData => success(n); describe('RemoteData combinators', () => { it('map only touches Success', () => { const times10 = (n: number) => n * 10; expect(map(ok(2), times10)).toEqual({ tag: 'Success', value: 20 }); expect(map(loadingRd, times10)).toEqual(loadingRd); }); it('map2 precedence: Failure > Loading > Success', () => { const add = (a: number, b: number) => a + b; expect(map2(failureRd, ok(1), add)).toEqual(failureRd); // a failed expect(map2(ok(1), failureRd, add)).toEqual(failureRd); // b failed expect(map2(loadingRd, ok(1), add)).toEqual({ tag: 'Loading' }); expect(map2(ok(2), ok(3), add)).toEqual({ tag: 'Success', value: 5 }); }); });