import {EntitiesManager as EM} from '../../src/index'; import configureEntitiesManager from '../utils/configureEntitiesManager'; import configureStore from '../utils/configureStore'; import deleteCollection from '../utils/deleteCollection'; const em = configureEntitiesManager({ item: { createdAt: EM.createdAt(), updatedAt: EM.updatedAt() } }); const store = configureStore({}, { entities: em.getEntitiesReducer() }); describe('basicUsages', () => { let targetItem = null; describe('adding an item', () => { let addItemResult = null; beforeAll( () => store.dispatch(em.entity('item').addItem({ value: 'foo', description: 'foo description', myOrders: { order1: { amount: 13 }, order2: { amount: 24 } } })) .then((result) => { addItemResult = result; }) .then(() => { console.log('dispatched queryList'); return store.dispatch(em.entity('item').queryList('queriedItems', [['value', '==', 'foo']], 'createdAt', 'asc'))(5, 'FROM_FIRST'); }) ); it('should be done with "DONE"', () => { expect(addItemResult).toEqual(jasmine.any(String)); // item.id }); it('should save item into the store', () => { console.log(store.getState()); targetItem = em.entity('item').getAllItemList()(store.getState())[0]; expect(targetItem).toEqual({ id: jasmine.any(String), createdAt: jasmine.any(Number), updatedAt: jasmine.any(Number), myOrders: { order1: { amount: 13 }, order2: { amount: 24 } }, value: 'foo', description: 'foo description' }); }); }); describe('update the item', () => { let updateItemResult = null; let fetchItemResult = null; beforeAll( () => store.dispatch(em.entity('item').updateItem(targetItem.id, { value: 'bar', 'myOrders.order1.amount': 130, 'myOrders.order3.amount': 240 })) .then((result) => { updateItemResult = result; }) ); it('should be done with "DONE"', () => { expect(updateItemResult).toEqual('DONE'); }); it('should update item in store', () => { targetItem = em.entity('item').getAllItemList()(store.getState())[0]; expect(targetItem).toEqual({ id: jasmine.any(String), createdAt: jasmine.any(Number), updatedAt: jasmine.any(Number), myOrders: { order1: { amount: 130 }, order2: { amount: 24 }, order3: { amount: 240 } }, value: 'bar', description: 'foo description' }); }); it( 'should update remote item in firestore', () => store.dispatch(em.entity('item').fetchItem(targetItem.id)) .then((result) => { fetchItemResult = result; }) .then(() => { expect(fetchItemResult).toEqual('DONE'); }) .then(() => { targetItem = em.entity('item').getAllItemList()(store.getState())[0]; expect(targetItem).toEqual({ id: jasmine.any(String), createdAt: jasmine.any(Number), updatedAt: jasmine.any(Number), myOrders: { order1: { amount: 130 }, order2: { amount: 24 }, order3: { amount: 240 } }, value: 'bar', description: 'foo description' }); }) ); }); afterAll(() => Promise.all([ deleteCollection('item'), ]).then((results) => { console.log('deleted results:', results); }), 1000000); });