Files
Morten Olsen 7adf03c83f cleanup
2023-03-28 08:10:46 +02:00

71 lines
2.5 KiB
TypeScript

import { Observable } from './observable';
import { getCollectionItems } from './utils';
describe('observable', () => {
it('should be able to create an observable', async () => {
const observable = new Observable(() => Promise.resolve(1));
expect(observable).toBeDefined();
const data = await observable.data;
expect(data).toBe(1);
});
it('should be able to combine observables', async () => {
const observable1 = new Observable(() => Promise.resolve(1));
const observable2 = new Observable(() => Promise.resolve(2));
const combined = Observable.combine({ observable1, observable2 });
const data = await combined.data;
expect(data.observable1).toBe(1);
expect(data.observable2).toBe(2);
});
it('should be able to update observable', async () => {
const observable = new Observable(() => Promise.resolve(1));
const data = await observable.data;
expect(data).toBe(1);
observable.set(() => Promise.resolve(2));
const data2 = await observable.data;
expect(data2).toBe(2);
});
it('should be able to extract collection items', async () => {
const observable = new Observable(() =>
Promise.resolve([
new Observable(() => Promise.resolve(1)),
new Observable(() => Promise.resolve(2)),
new Observable(() => Promise.resolve(3)),
]),
);
const flatten = observable.pipe(getCollectionItems);
const data = await flatten.data;
expect(data).toEqual([1, 2, 3]);
});
it('should update observable when subscribed', async () => {
const observable = new Observable(() => Promise.resolve(1));
const spy = jest.fn();
observable.subscribe(spy);
expect(spy).not.toHaveBeenCalled();
observable.set(() => Promise.resolve(2));
expect(spy).toHaveBeenCalled();
expect(spy).toHaveBeenCalledTimes(1);
});
it('should update combined observable when subscribed', async () => {
const observable1 = new Observable(() => Promise.resolve(1));
const observable2 = new Observable(() => Promise.resolve(2));
const combined = Observable.combine({ observable1, observable2 });
const spy = jest.fn();
const data1 = await combined.data;
expect(data1.observable1).toBe(1);
expect(data1.observable2).toBe(2);
combined.subscribe(spy);
expect(spy).not.toHaveBeenCalled();
observable2.set(() => Promise.resolve(3));
expect(spy).toHaveBeenCalled();
expect(spy).toHaveBeenCalledTimes(1);
const data2 = await combined.data;
expect(data2.observable1).toBe(1);
expect(data2.observable2).toBe(3);
});
});