Skip to content

Commit

Permalink
Moved config stuff to corresponding file and refined some tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dummdidumm committed Aug 8, 2018
1 parent d34b88a commit 29fd07e
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 54 deletions.
94 changes: 77 additions & 17 deletions modules/store-devtools/spec/config.spec.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,88 @@
import { ActionReducer, Action } from '@ngrx/store';
import { StoreDevtoolsConfig } from '../';
import {
createConfig,
StoreDevtoolsConfig,
noMonitor,
DEFAULT_NAME,
} from '../src/config';

describe('StoreDevtoolsOptions', () => {
it('can be initialized with name', () => {
const options = new StoreDevtoolsConfig();
options.name = 'my instance';
expect(options.name).toBe('my instance');
it('creates default options with empty object given', () => {
const config = createConfig({});
expect(config).toEqual({
maxAge: false,
monitor: noMonitor,
actionSanitizer: undefined,
stateSanitizer: undefined,
name: DEFAULT_NAME,
serialize: false,
logOnly: false,
features: false,
});
});

it('can be initialized with actionSanitizer', () => {
const options = new StoreDevtoolsConfig();
function sanitizer(action: Action, id: number): Action {
it('creates options that contain passed in options', () => {
function stateSanitizer(state: any, index: number): any {
return state;
}
function actionSanitizer(action: Action, id: number): Action {
return action;
}
options.actionSanitizer = sanitizer;
expect(options.actionSanitizer).toEqual(sanitizer);
const config = createConfig({
maxAge: 20,
actionSanitizer,
stateSanitizer,
name: 'ABC',
serialize: true,
features: {
test: true,
},
});
expect(config).toEqual({
maxAge: 20,
monitor: noMonitor,
actionSanitizer,
stateSanitizer,
name: 'ABC',
serialize: true,
logOnly: false,
features: {
test: true,
},
});
});

it('can be initialized with stateSanitizer', () => {
const options = new StoreDevtoolsConfig();
function stateSanitizer(state: any, index: number): any {
return state;
}
options.stateSanitizer = stateSanitizer;
expect(options.stateSanitizer).toEqual(stateSanitizer);
it('can be initialized with a function returning options', () => {
const config = createConfig(() => ({ maxAge: 15 }));
expect(config).toEqual({
maxAge: 15,
monitor: noMonitor,
actionSanitizer: undefined,
stateSanitizer: undefined,
name: DEFAULT_NAME,
serialize: false,
logOnly: false,
features: false,
});
});

it('logOnly will set features', () => {
const config = createConfig({
logOnly: true,
});
expect(config).toEqual({
maxAge: false,
monitor: noMonitor,
actionSanitizer: undefined,
stateSanitizer: undefined,
name: DEFAULT_NAME,
serialize: false,
logOnly: true,
features: {
pause: true,
export: true,
test: true,
},
});
});
});
2 changes: 1 addition & 1 deletion modules/store-devtools/spec/extension.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { Action } from '@ngrx/store';

import { LiftedState } from '../';
import { DevtoolsExtension, ReduxDevtoolsExtension } from '../src/extension';
import { createConfig, noMonitor } from '../src/instrument';
import { createConfig, noMonitor } from '../src/config';
import { unliftState } from '../src/utils';

function createOptions(
Expand Down
36 changes: 36 additions & 0 deletions modules/store-devtools/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,39 @@ export const INITIAL_OPTIONS = new InjectionToken<StoreDevtoolsConfig>(
export type StoreDevtoolsOptions =
| Partial<StoreDevtoolsConfig>
| (() => Partial<StoreDevtoolsConfig>);

export function noMonitor(): null {
return null;
}

export const DEFAULT_NAME = 'NgRx Store DevTools';

export function createConfig(
_options: StoreDevtoolsOptions
): StoreDevtoolsConfig {
const DEFAULT_OPTIONS: StoreDevtoolsConfig = {
maxAge: false,
monitor: noMonitor,
actionSanitizer: undefined,
stateSanitizer: undefined,
name: DEFAULT_NAME,
serialize: false,
logOnly: false,
features: false,
};

let options = typeof _options === 'function' ? _options() : _options;
const logOnly = options.logOnly
? { pause: true, export: true, test: true }
: false;
const features = options.features || logOnly;
const config = Object.assign({}, DEFAULT_OPTIONS, { features }, options);

if (config.maxAge && config.maxAge < 2) {
throw new Error(
`Devtools 'maxAge' cannot be less than 2, got ${config.maxAge}`
);
}

return config;
}
38 changes: 2 additions & 36 deletions modules/store-devtools/src/instrument.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import {
STORE_DEVTOOLS_CONFIG,
StoreDevtoolsConfig,
StoreDevtoolsOptions,
noMonitor,
createConfig,
} from './config';
import { DevtoolsDispatcher, StoreDevtools } from './devtools';
import {
Expand Down Expand Up @@ -45,42 +47,6 @@ export function createStateObservable(
return devtools.state;
}

export function noMonitor(): null {
return null;
}

export const DEFAULT_NAME = 'NgRx Store DevTools';

export function createConfig(
_options: StoreDevtoolsOptions
): StoreDevtoolsConfig {
const DEFAULT_OPTIONS: StoreDevtoolsConfig = {
maxAge: false,
monitor: noMonitor,
actionSanitizer: undefined,
stateSanitizer: undefined,
name: DEFAULT_NAME,
serialize: false,
logOnly: false,
features: false,
};

let options = typeof _options === 'function' ? _options() : _options;
const logOnly = options.logOnly
? { pause: true, export: true, test: true }
: false;
const features = options.features || logOnly;
const config = Object.assign({}, DEFAULT_OPTIONS, { features }, options);

if (config.maxAge && config.maxAge < 2) {
throw new Error(
`Devtools 'maxAge' cannot be less than 2, got ${config.maxAge}`
);
}

return config;
}

@NgModule({})
export class StoreDevtoolsModule {
static instrument(options: StoreDevtoolsOptions = {}): ModuleWithProviders {
Expand Down

0 comments on commit 29fd07e

Please sign in to comment.