mirror of
https://github.com/irislib/iris-messenger.git
synced 2024-10-19 06:33:32 +00:00
Martti Malmi
ebb12962e5
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.
91 lines
2.9 KiB
JavaScript
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();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
}); |