From dec974c091faa8268db2164acdd9dfc0a61b8c70 Mon Sep 17 00:00:00 2001 From: Phillip Zada Date: Tue, 19 Sep 2017 13:29:30 +1000 Subject: [PATCH] #378 Default selectId function for EntityAdapter --- modules/effects/testing/index.ts | 1 - .../effects/testing/src/toEqualObservable.ts | 116 ------------------ modules/entity/src/create_adapter.ts | 5 +- 3 files changed, 4 insertions(+), 118 deletions(-) delete mode 100644 modules/effects/testing/src/toEqualObservable.ts diff --git a/modules/effects/testing/index.ts b/modules/effects/testing/index.ts index e84802bfbd..b13fcc7d54 100644 --- a/modules/effects/testing/index.ts +++ b/modules/effects/testing/index.ts @@ -1,2 +1 @@ export * from './src/testing'; -export * from './src/toEqualObservable'; diff --git a/modules/effects/testing/src/toEqualObservable.ts b/modules/effects/testing/src/toEqualObservable.ts deleted file mode 100644 index 6a973f222d..0000000000 --- a/modules/effects/testing/src/toEqualObservable.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { getTestScheduler } from 'jasmine-marbles'; -import { Notification } from 'rxjs/Notification'; -import { Observable } from 'rxjs/Observable'; -import { Subscription } from 'rxjs/Subscription'; -import { TestMessage } from 'rxjs/testing/TestMessage'; -import { TestScheduler } from 'rxjs/testing/TestScheduler'; - -declare global { - namespace jasmine { - interface Matchers { - toEqualObservable: any; - } - } -} - -/* -* Based on source code found in rxjs library -* https://github.com/ReactiveX/rxjs/blob/master/src/testing/TestScheduler.ts -* -*/ -function materializeInnerObservable( - observable: Observable, - outerFrame: number -): TestMessage[] { - const messages: TestMessage[] = []; - const scheduler = getTestScheduler(); - - observable.subscribe( - value => { - messages.push({ - frame: scheduler.frame - outerFrame, - notification: Notification.createNext(value), - }); - }, - err => { - messages.push({ - frame: scheduler.frame - outerFrame, - notification: Notification.createError(err), - }); - }, - () => { - messages.push({ - frame: scheduler.frame - outerFrame, - notification: Notification.createComplete(), - }); - } - ); - return messages; -} - -jasmine.getEnv().beforeAll(() => - jasmine.addMatchers({ - /* - * Performs toEqual as an alternative to toBeObservable. - * Based on source code found in rxjs library - * https://github.com/ReactiveX/rxjs/blob/master/src/testing/TestScheduler.ts - * - * Provides a more detailed error response on why an observable - * doesn't match - * - * Usage => expect(effect$).toEqualObservable(coldObservable); - * - */ - toEqualObservable: () => ({ - compare: function(actual: any, { fixture }: any) { - const results: TestMessage[] = []; - let subscription: Subscription; - const scheduler = getTestScheduler(); - - if (!scheduler) { - throw new Error('TestScheduler must be initialised'); - } - - scheduler.schedule(() => { - subscription = actual.subscribe( - (x: any) => { - let value = x; - // Support Observable-of-Observables - if (x instanceof Observable) { - value = materializeInnerObservable(value, scheduler.frame); - } - results.push({ - frame: scheduler.frame, - notification: Notification.createNext(value), - }); - }, - (err: any) => { - results.push({ - frame: scheduler.frame, - notification: Notification.createError(err), - }); - }, - () => { - results.push({ - frame: scheduler.frame, - notification: Notification.createComplete(), - }); - } - ); - }); - scheduler.flush(); - - expect(results).toEqual( - TestScheduler.parseMarbles( - fixture.marbles, - fixture.values, - fixture.errorValue || fixture.error, - true - ) - ); - - return { pass: true }; - }, - }), - }) -); diff --git a/modules/entity/src/create_adapter.ts b/modules/entity/src/create_adapter.ts index 0526ccf692..7b1802b40f 100644 --- a/modules/entity/src/create_adapter.ts +++ b/modules/entity/src/create_adapter.ts @@ -10,10 +10,13 @@ import { createSelectorsFactory } from './state_selectors'; import { createSortedStateAdapter } from './sorted_state_adapter'; import { createUnsortedStateAdapter } from './unsorted_state_adapter'; -export function createEntityAdapter(options: { +export function createEntityAdapter(): EntityAdapter; +export function createEntityAdapter(options?: { selectId: IdSelector; sortComparer?: false | Comparer; }): EntityAdapter { + options = options || { selectId: (instance: any) => instance.id }; + const { selectId, sortComparer }: EntityDefinition = { sortComparer: false, ...options,