import { it, describe, inject, beforeEach, beforeEachProviders, async, expect } from '@angular/core/testing'; import {PouchDBService} from '../../dist/app/database/pouchdb.service'; import {RecordStoreService} from '../../dist/app/records/record-store.service'; import {v4} from 'node-uuid/node'; import { RecordCollection, IRecordField, IRecord } from '../../dist/app/records/record-collection'; const mockRecordFields = [ { name: 'Test Field', label: 'Test Label', type: 'Test Type', visible: true } ]; const mockRecords = [ { _id: 'TestRecordId', fields: mockRecordFields } ]; function createRecordCollection(): RecordCollection { return new RecordCollection({ _id: v4(), name: 'Record Collection', label: 'My Collection', type: 'Test Type', fields: mockRecordFields, records: mockRecords }); } describe('Record Store', () => { let recordStore: RecordStoreService; beforeEachProviders(() => { return [ PouchDBService, RecordStoreService ]; }); beforeEach(async( inject( [RecordStoreService], (rs: RecordStoreService) => { recordStore = rs; } ) )); it('should store and retrieve a record collection', done => { const mockCollection = createRecordCollection(); recordStore .put(mockCollection) .toPromise() .then((res: PouchUpdateResponse) => { return recordStore.get(mockCollection.id) .toPromise(); }) .then((doc: RecordCollection) => { expect(doc.id).toEqual(mockCollection.id); expect(doc.records).toEqual(mockRecords); done(); }) .catch(err => fail(err)); } ); it('should emit new records using observables', done => { const mockCollection = createRecordCollection(); recordStore.streams.put.subscribe(col => { expect(col.id).toEqual(mockCollection.id); done(); }); recordStore.put(mockCollection); } ); it('should delete records from the store on remove', done => { const mockCollection = createRecordCollection(); recordStore .put(mockCollection) .toPromise() .then((res: PouchUpdateResponse) => { return recordStore.get(mockCollection.id) .toPromise(); }) .then((doc: RecordCollection) => { expect(doc.id).toEqual(mockCollection.id); expect(doc.records).toEqual(mockRecords); return recordStore.remove(mockCollection) .toPromise(); }) .then((res: PouchUpdateResponse) => { expect(res.ok).toEqual(true); expect(res.id).toEqual(mockCollection.id); done(); }) .catch(err => fail(err)); } ); });