UNPKG

cycle-local-storage

Version:
83 lines (68 loc) 2.47 kB
import {Rx} from '@cycle/core'; import {localStorageDriver} from '../src'; import test from 'tape'; const createData = () => { return Object.freeze({ key1: 'value1', key2: 'value2', key3: 'value3', key4: 'value4' }); } const createArray = () => { return [ {key1: 'value1'}, {key2: 'value2'}, {key3: 'value3'}, {key4: 'value4'} ]; }; test('localStorageDriver', t => { const possibleValues = new Map([ ['an empty Observable', Rx.Observable.just()], ['an observable with empty object', Rx.Observable.just({})], ['an observable object with multiple keys/values', Rx.Observable.just(createData())], ['an empty observable array', Rx.Observable.just([])], ['an observable array of object', Rx.Observable.just(createArray())], ]); possibleValues.forEach((value, key) => t.ok( localStorageDriver(value), `should accept ${key} as input` )); const impossibleValues = new Map([ ['an observable string', Rx.Observable.just('hello') ], ['an observable number', Rx.Observable.just(1)], ['an observable interval', Rx.Observable.interval(1000)], ['an observable array of arrays', Rx.Observable.just([ ['key1', 'value1'], ['key2', 'value2'] ]) ], ]); impossibleValues.forEach((value, key) => t.throws(localStorageDriver(value), Error, `should NOT accept ${key} as input`)); t.ok(localStorageDriver(Rx.Observable.just(createData())) instanceof Rx.Observable, 'should return a Rx.Observable'); localStorageDriver(Rx.Observable.just(createData())) .get('key1') .subscribe(value => { t.equal(value, 'value1', 'giving .get() a single key should return a single value'); }); localStorageDriver(Rx.Observable.just(createData())) .get(['key1', 'key2', 'key3', 'key4']) .subscribe(value => { t.ok(Array.isArray(value), `giving .get() an array of keys should return an array of values`); }); let data$ = new Rx.BehaviorSubject(createData()); let storage$ = localStorageDriver(data$); storage$ .get('key5') .take(0) .defaultIfEmpty('Sorry') .subscribe(value => { t.equal(value, 'Sorry', 'should be able to use defualtIfEmpty()') }) storage$ .get('key5') .defaultIfEmpty('Sorry') .take(2) .subscribe(value => { t.equal(value, 'value5', 'should receive updates to values set') }); data$.onNext({"key4": "newValue4"}); data$.onNext({"key5": "value5"}); setTimeout(() => t.end(), 1000); });