iris-messenger/tests/Fun.test.js
Martti Malmi ebb12962e5
Localforage (#136)
For State.local we use our very own Fun.ts instead of Gun.js. It's a light version of the Gun api with localForage only persistence. Localstorage is fastest — let's see if it suffices or if we need to change to indexeddb.
2022-07-07 22:10:47 +03:00

91 lines
2.9 KiB
JavaScript

import Fun from '../src/js/Fun';
describe('Fun', () => {
describe('Basic API', () => {
it('should have a constructor', () => {
const fun = new Fun();
expect(fun).toBeInstanceOf(Fun);
});
describe('once', () => {
it('should return the saved value', async () => {
const fun = new Fun();
fun.get('settings').get('language').put('klingon');
const value = await fun.get('settings').get('language').once();
expect(value).toBe('klingon');
});
});
describe('map', () => {
const test_data = {
language: 'klingon',
turboMode: true,
maxConnections: 10
};
it('should return all the saved child values', async () => {
const fun = new Fun();
Object.keys(test_data).forEach(key => {
fun.get('settings').get('local').get(key).put(test_data[key]);
});
const seenKeys = new Set();
await new Promise(resolve => {
fun.get('settings').get('local').map((value, key, none, event) => {
expect(value).toBe(test_data[key]);
expect(event.off).toBeDefined();
seenKeys.add(key);
if (seenKeys.size === Object.keys(test_data).length) {
resolve();
}
});
});
});
it('should subscribe to changes in child values', async () => {
const fun = new Fun();
const seenKeys = new Set();
setTimeout(() => {
Object.keys(test_data).forEach(key => {
fun.get('settings').get('local').get(key).put(test_data[key]);
});
}, 10);
await new Promise(resolve => {
fun.get('settings').get('local').map((value, key, none, event) => {
expect(value).toBe(test_data[key]);
expect(event.off).toBeDefined();
seenKeys.add(key);
if (seenKeys.size === Object.keys(test_data).length) {
resolve();
}
});
});
});
/*
it('should not chain .map() callback too far back', async () => {
const fun = new Fun();
const mockCallback = jest.fn();
fun.get('settings').map(mockCallback);
const localCalled = new Promise(resolve => {
fun.get('settings').get('local').map(resolve);
});
fun.get('settings').get('local').get('language').put('klingon');
await localCalled;
expect(mockCallback).toBeCalledTimes(1);
});
*/
it('should chain .map() callback', async () => {
const fun = new Fun();
fun.get('contacts').get('id123').put({name: 'John Doe', followerCount: 5});
await new Promise(resolve => {
fun.get('contacts').map((value, key) => {
expect(key).toBe('id123');
expect(value).toEqual({name: 'John Doe', followerCount: 5});
resolve();
});
});
});
});
});
});