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