import test from 'ava'; import { Store } from './store'; import { Keys, Entities } from './entities'; test('Store set and get item, expanded', (t) => { const store = new Store(); store.set(Keys.users, { id: 1, user: true, forms: [ { id: 2, form: true, persons: [{ id: 3, person: true }, { id: 4, person: true }], }, ], }); const result = store.get(Keys.users, 1, { expanded: true }); t.deepEqual(result, { id: 1, user: true, forms: [ { id: 2, form: true, persons: [{ id: 3, person: true }, { id: 4, person: true }], }, ], }); }); test('Store set, update and get item, expanded', (t) => { const store = new Store(); store.set(Keys.users, { id: 1, user: true, forms: [ { id: 2, form: true, persons: [{ id: 3, person: true }, { id: 4, person: true }], }, ], }); store.set(Keys.persons, { id: 3, person: false }); const result = store.get(Keys.users, 1, { expanded: true }); t.deepEqual(result, { id: 1, user: true, forms: [ { id: 2, form: true, persons: [{ id: 3, person: false }, { id: 4, person: true }], }, ], }); }); test('Store set and get item, flat', (t) => { const store = new Store(); store.set(Keys.users, { id: 1, user: true, forms: [ { id: 2, form: true, persons: [{ id: 3, person: true }, { id: 4, person: true }], }, ], }); const result = store.get(Keys.users, 1); t.deepEqual(result, { id: 1, user: true, forms: [2], }); }); test('Store set item and getAll, expanded', (t) => { const store = new Store(); store.set(Keys.users, { id: 1, user: true, forms: [ { id: 2, form: true, }, ], }); store.set(Keys.users, { id: 3, user: true, forms: [ { id: 4, form: true, }, ], }); const result = store.getAll(Keys.users, { expanded: true }); t.deepEqual(result, [ { id: 1, user: true, forms: [ { id: 2, form: true, }, ], }, { id: 3, user: true, forms: [ { id: 4, form: true, }, ], }, ]); }); test('Store set item and getAll, flat', (t) => { const store = new Store(); store.set(Keys.users, { id: 1, user: true, forms: [ { id: 2, form: true, }, ], }); store.set(Keys.users, { id: 3, user: true, forms: [ { id: 4, form: true, }, ], }); const result = store.getAll(Keys.users); t.deepEqual(result, [ { id: 1, user: true, forms: [2], }, { id: 3, user: true, forms: [4], }, ]); }); test('Store setBySchema and getAll, flat', (t) => { const store = new Store(); store.setBySchema( [Entities.users], [ { id: 3, user: true, forms: [ { id: 4, form: true, }, ], }, { id: 1, user: true, forms: [ { id: 2, form: true, }, ], }, ], ); const result = store.getAll(Keys.users); t.deepEqual(result, [ { id: 1, user: true, forms: [2], }, { id: 3, user: true, forms: [4], }, ]); }); test('Store setBySchema, del and getAll, flat', (t) => { const store = new Store(); store.setBySchema( [Entities.users], [ { id: 3, user: true, forms: [ { id: 4, form: true, }, ], }, { id: 5, user: true, forms: [ { id: 6, form: true, }, ], }, { id: 1, user: true, forms: [ { id: 2, form: true, }, ], }, ], ); store.del(Keys.users, 3); const result = store.getAll(Keys.users); t.deepEqual(result, [ { id: 1, user: true, forms: [2], }, { id: 5, user: true, forms: [6], }, ]); }); test('Store setBySchema, del relation and getAll, flat', (t) => { const store = new Store(); store.setBySchema( [Entities.users], [ { id: 3, user: true, forms: [ { id: 4, form: true, }, ], }, { id: 5, user: true, forms: [ { id: 6, form: true, }, ], }, { id: 1, user: true, forms: [ { id: 2, form: true, }, ], }, ], ); store.del(Keys.forms, 6); const result = store.getAll(Keys.users); t.deepEqual(result, [ { id: 1, user: true, forms: [2], }, { id: 3, user: true, forms: [4], }, { id: 5, user: true, forms: [], }, ]); }); test('Store setBySchema, del relation and getAll, expanded', (t) => { const store = new Store(); store.setBySchema( [Entities.users], [ { id: 3, user: true, forms: [ { id: 4, form: true, }, ], }, { id: 5, user: true, forms: [ { id: 6, form: true, }, ], }, { id: 1, user: true, forms: [ { id: 6, form: true, }, ], }, ], ); store.del(Keys.forms, 6); const result = store.getAll(Keys.users, { expanded: true }); t.deepEqual(result, [ { id: 1, user: true, forms: [], }, { id: 3, user: true, forms: [ { id: 4, form: true, }, ], }, { id: 5, user: true, forms: [], }, ]); }); test('Store set shallow shall replace', (t) => { const firstUser = { id: 1, email: 'a@bofink.com', password: 'password' }; const secondUser = { id: 1, email: 'b@bofink.com' }; const store = new Store(); store.set(Keys.users, firstUser, { deep: false }); store.set(Keys.users, secondUser, { deep: false }); const user = store.get(Keys.users, 1); t.deepEqual(user, secondUser); });