1 | import { Inject, Injectable } from '@angular/core';
|
2 | import { TestBed } from '@angular/core/testing';
|
3 | import { BehaviorSubject } from 'rxjs';
|
4 | import { ActionsSubject, INITIAL_STATE, ReducerManager, Store, createSelector, } from '@ngrx/store';
|
5 | import { MockState } from './mock_state';
|
6 | import { MOCK_SELECTORS } from './tokens';
|
7 | if (typeof afterEach === 'function') {
|
8 | afterEach(() => {
|
9 | try {
|
10 | const mockStore = TestBed.inject(MockStore);
|
11 | if (mockStore) {
|
12 | mockStore.resetSelectors();
|
13 | }
|
14 | // eslint-disable-next-line no-empty
|
15 | }
|
16 | catch (_a) { }
|
17 | });
|
18 | }
|
19 | export class MockStore extends Store {
|
20 | constructor(state$, actionsObserver, reducerManager, initialState, mockSelectors = []) {
|
21 | super(state$, actionsObserver, reducerManager);
|
22 | this.state$ = state$;
|
23 | this.initialState = initialState;
|
24 | this.selectors = new Map();
|
25 | this.resetSelectors();
|
26 | this.setState(this.initialState);
|
27 | this.scannedActions$ = actionsObserver.asObservable();
|
28 | for (const mockSelector of mockSelectors) {
|
29 | this.overrideSelector(mockSelector.selector, mockSelector.value);
|
30 | }
|
31 | }
|
32 | setState(nextState) {
|
33 | this.state$.next(nextState);
|
34 | this.lastState = nextState;
|
35 | }
|
36 | overrideSelector(selector, value) {
|
37 | this.selectors.set(selector, value);
|
38 | const resultSelector = typeof selector === 'string'
|
39 | ? createSelector(() => { }, () => value)
|
40 | : selector;
|
41 | resultSelector.setResult(value);
|
42 | return resultSelector;
|
43 | }
|
44 | resetSelectors() {
|
45 | for (const selector of this.selectors.keys()) {
|
46 | if (typeof selector !== 'string') {
|
47 | selector.release();
|
48 | selector.clearResult();
|
49 | }
|
50 | }
|
51 | this.selectors.clear();
|
52 | }
|
53 | select(selector, prop) {
|
54 | if (typeof selector === 'string' && this.selectors.has(selector)) {
|
55 | return new BehaviorSubject(this.selectors.get(selector)).asObservable();
|
56 | }
|
57 | return super.select(selector, prop);
|
58 | }
|
59 | addReducer() {
|
60 | /* noop */
|
61 | }
|
62 | removeReducer() {
|
63 | /* noop */
|
64 | }
|
65 | /**
|
66 | * Refreshes the existing state.
|
67 | */
|
68 | refreshState() {
|
69 | if (this.lastState)
|
70 | this.setState(Object.assign({}, this.lastState));
|
71 | }
|
72 | }
|
73 | MockStore.decorators = [
|
74 | { type: Injectable }
|
75 | ];
|
76 | /** @nocollapse */
|
77 | MockStore.ctorParameters = () => [
|
78 | { type: MockState },
|
79 | { type: ActionsSubject },
|
80 | { type: ReducerManager },
|
81 | { type: undefined, decorators: [{ type: Inject, args: [INITIAL_STATE,] }] },
|
82 | { type: Array, decorators: [{ type: Inject, args: [MOCK_SELECTORS,] }] }
|
83 | ];
|
84 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvc3RvcmUvdGVzdGluZy9zcmMvbW9ja19zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxFQUFjLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBRUwsY0FBYyxFQUNkLGFBQWEsRUFDYixjQUFjLEVBQ2QsS0FBSyxFQUNMLGNBQWMsR0FHZixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFMUMsSUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUU7SUFDbkMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUk7WUFDRixNQUFNLFNBQVMsR0FBMEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuRSxJQUFJLFNBQVMsRUFBRTtnQkFDYixTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDNUI7WUFDRCxvQ0FBb0M7U0FDckM7UUFBQyxXQUFNLEdBQUU7SUFDWixDQUFDLENBQUMsQ0FBQztDQUNKO0FBYUQsTUFBTSxPQUFPLFNBQXNCLFNBQVEsS0FBUTtJQU1qRCxZQUNVLE1BQW9CLEVBQzVCLGVBQStCLEVBQy9CLGNBQThCLEVBQ0MsWUFBZSxFQUN0QixnQkFBZ0MsRUFBRTtRQUUxRCxLQUFLLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQU52QyxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBR0csaUJBQVksR0FBWixZQUFZLENBQUc7UUFUL0IsY0FBUyxHQUFHLElBQUksR0FBRyxFQUErQixDQUFDO1FBYWxFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0RCxLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRTtZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQVk7UUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztJQUVELGdCQUFnQixDQVNkLFFBQTJCLEVBQzNCLEtBQVk7UUFFWixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFcEMsTUFBTSxjQUFjLEdBQ2xCLE9BQU8sUUFBUSxLQUFLLFFBQVE7WUFDMUIsQ0FBQyxDQUFDLGNBQWMsQ0FDWixHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQ1IsR0FBVyxFQUFFLENBQUMsS0FBSyxDQUNwQjtZQUNILENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFZixjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhDLE9BQU8sY0FBdUQsQ0FBQztJQUNqRSxDQUFDO0lBRUQsY0FBYztRQUNaLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM1QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtnQkFDaEMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQixRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDeEI7U0FDRjtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFhLEVBQUUsSUFBVTtRQUM5QixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoRSxPQUFPLElBQUksZUFBZSxDQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FDN0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNsQjtRQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFVBQVU7UUFDUixVQUFVO0lBQ1osQ0FBQztJQUVELGFBQWE7UUFDWCxVQUFVO0lBQ1osQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxJQUFJLENBQUMsUUFBUSxtQkFBTSxJQUFJLENBQUMsU0FBUyxFQUFHLENBQUM7SUFDM0QsQ0FBQzs7O1lBekZGLFVBQVU7Ozs7WUExQkYsU0FBUztZQVJoQixjQUFjO1lBRWQsY0FBYzs0Q0EyQ1gsTUFBTSxTQUFDLGFBQWE7d0NBQ3BCLE1BQU0sU0FBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZXN0QmVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgQWN0aW9uLFxuICBBY3Rpb25zU3ViamVjdCxcbiAgSU5JVElBTF9TVEFURSxcbiAgUmVkdWNlck1hbmFnZXIsXG4gIFN0b3JlLFxuICBjcmVhdGVTZWxlY3RvcixcbiAgTWVtb2l6ZWRTZWxlY3RvcldpdGhQcm9wcyxcbiAgTWVtb2l6ZWRTZWxlY3Rvcixcbn0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgTW9ja1N0YXRlIH0gZnJvbSAnLi9tb2NrX3N0YXRlJztcbmltcG9ydCB7IE1vY2tTZWxlY3RvciB9IGZyb20gJy4vbW9ja19zZWxlY3Rvcic7XG5pbXBvcnQgeyBNT0NLX1NFTEVDVE9SUyB9IGZyb20gJy4vdG9rZW5zJztcblxuaWYgKHR5cGVvZiBhZnRlckVhY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9ja1N0b3JlOiBNb2NrU3RvcmUgfCB1bmRlZmluZWQgPSBUZXN0QmVkLmluamVjdChNb2NrU3RvcmUpO1xuICAgICAgaWYgKG1vY2tTdG9yZSkge1xuICAgICAgICBtb2NrU3RvcmUucmVzZXRTZWxlY3RvcnMoKTtcbiAgICAgIH1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH0gY2F0Y2gge31cbiAgfSk7XG59XG5cbnR5cGUgT25seU1lbW9pemVkPFQsIFJlc3VsdD4gPSBUIGV4dGVuZHMgc3RyaW5nIHwgTWVtb2l6ZWRTZWxlY3RvcjxhbnksIGFueT5cbiAgPyBNZW1vaXplZFNlbGVjdG9yPGFueSwgUmVzdWx0PlxuICA6IFQgZXh0ZW5kcyBNZW1vaXplZFNlbGVjdG9yV2l0aFByb3BzPGFueSwgYW55LCBhbnk+XG4gID8gTWVtb2l6ZWRTZWxlY3RvcldpdGhQcm9wczxhbnksIGFueSwgUmVzdWx0PlxuICA6IG5ldmVyO1xuXG50eXBlIE1lbW9pemVkPFJlc3VsdD4gPVxuICB8IE1lbW9pemVkU2VsZWN0b3I8YW55LCBSZXN1bHQ+XG4gIHwgTWVtb2l6ZWRTZWxlY3RvcldpdGhQcm9wczxhbnksIGFueSwgUmVzdWx0PjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vY2tTdG9yZTxUID0gb2JqZWN0PiBleHRlbmRzIFN0b3JlPFQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RvcnMgPSBuZXcgTWFwPE1lbW9pemVkPGFueT4gfCBzdHJpbmcsIGFueT4oKTtcblxuICByZWFkb25seSBzY2FubmVkQWN0aW9ucyQ6IE9ic2VydmFibGU8QWN0aW9uPjtcbiAgcHJpdmF0ZSBsYXN0U3RhdGU/OiBUO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RhdGUkOiBNb2NrU3RhdGU8VD4sXG4gICAgYWN0aW9uc09ic2VydmVyOiBBY3Rpb25zU3ViamVjdCxcbiAgICByZWR1Y2VyTWFuYWdlcjogUmVkdWNlck1hbmFnZXIsXG4gICAgQEluamVjdChJTklUSUFMX1NUQVRFKSBwcml2YXRlIGluaXRpYWxTdGF0ZTogVCxcbiAgICBASW5qZWN0KE1PQ0tfU0VMRUNUT1JTKSBtb2NrU2VsZWN0b3JzOiBNb2NrU2VsZWN0b3JbXSA9IFtdXG4gICkge1xuICAgIHN1cGVyKHN0YXRlJCwgYWN0aW9uc09ic2VydmVyLCByZWR1Y2VyTWFuYWdlcik7XG4gICAgdGhpcy5yZXNldFNlbGVjdG9ycygpO1xuICAgIHRoaXMuc2V0U3RhdGUodGhpcy5pbml0aWFsU3RhdGUpO1xuICAgIHRoaXMuc2Nhbm5lZEFjdGlvbnMkID0gYWN0aW9uc09ic2VydmVyLmFzT2JzZXJ2YWJsZSgpO1xuICAgIGZvciAoY29uc3QgbW9ja1NlbGVjdG9yIG9mIG1vY2tTZWxlY3RvcnMpIHtcbiAgICAgIHRoaXMub3ZlcnJpZGVTZWxlY3Rvcihtb2NrU2VsZWN0b3Iuc2VsZWN0b3IsIG1vY2tTZWxlY3Rvci52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0U3RhdGUobmV4dFN0YXRlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSQubmV4dChuZXh0U3RhdGUpO1xuICAgIHRoaXMubGFzdFN0YXRlID0gbmV4dFN0YXRlO1xuICB9XG5cbiAgb3ZlcnJpZGVTZWxlY3RvcjxcbiAgICBTZWxlY3RvciBleHRlbmRzIE1lbW9pemVkPFJlc3VsdD4sXG4gICAgVmFsdWUgZXh0ZW5kcyBSZXN1bHQsXG4gICAgUmVzdWx0ID0gU2VsZWN0b3IgZXh0ZW5kcyBNZW1vaXplZFNlbGVjdG9yPGFueSwgaW5mZXIgVD5cbiAgICAgID8gVFxuICAgICAgOiBTZWxlY3RvciBleHRlbmRzIE1lbW9pemVkU2VsZWN0b3JXaXRoUHJvcHM8YW55LCBhbnksIGluZmVyIFU+XG4gICAgICA/IFVcbiAgICAgIDogVmFsdWVcbiAgPihcbiAgICBzZWxlY3RvcjogU2VsZWN0b3IgfCBzdHJpbmcsXG4gICAgdmFsdWU6IFZhbHVlXG4gICk6IE9ubHlNZW1vaXplZDx0eXBlb2Ygc2VsZWN0b3IsIFJlc3VsdD4ge1xuICAgIHRoaXMuc2VsZWN0b3JzLnNldChzZWxlY3RvciwgdmFsdWUpO1xuXG4gICAgY29uc3QgcmVzdWx0U2VsZWN0b3I6IE1lbW9pemVkPFJlc3VsdD4gPVxuICAgICAgdHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgICAgICAgKCkgPT4ge30sXG4gICAgICAgICAgICAoKTogUmVzdWx0ID0+IHZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICA6IHNlbGVjdG9yO1xuXG4gICAgcmVzdWx0U2VsZWN0b3Iuc2V0UmVzdWx0KHZhbHVlKTtcblxuICAgIHJldHVybiByZXN1bHRTZWxlY3RvciBhcyBPbmx5TWVtb2l6ZWQ8dHlwZW9mIHNlbGVjdG9yLCBSZXN1bHQ+O1xuICB9XG5cbiAgcmVzZXRTZWxlY3RvcnMoKSB7XG4gICAgZm9yIChjb25zdCBzZWxlY3RvciBvZiB0aGlzLnNlbGVjdG9ycy5rZXlzKCkpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNlbGVjdG9yLnJlbGVhc2UoKTtcbiAgICAgICAgc2VsZWN0b3IuY2xlYXJSZXN1bHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdG9ycy5jbGVhcigpO1xuICB9XG5cbiAgc2VsZWN0KHNlbGVjdG9yOiBhbnksIHByb3A/OiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJyAmJiB0aGlzLnNlbGVjdG9ycy5oYXMoc2VsZWN0b3IpKSB7XG4gICAgICByZXR1cm4gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KFxuICAgICAgICB0aGlzLnNlbGVjdG9ycy5nZXQoc2VsZWN0b3IpXG4gICAgICApLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5zZWxlY3Qoc2VsZWN0b3IsIHByb3ApO1xuICB9XG5cbiAgYWRkUmVkdWNlcigpIHtcbiAgICAvKiBub29wICovXG4gIH1cblxuICByZW1vdmVSZWR1Y2VyKCkge1xuICAgIC8qIG5vb3AgKi9cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdGhlIGV4aXN0aW5nIHN0YXRlLlxuICAgKi9cbiAgcmVmcmVzaFN0YXRlKCkge1xuICAgIGlmICh0aGlzLmxhc3RTdGF0ZSkgdGhpcy5zZXRTdGF0ZSh7IC4uLnRoaXMubGFzdFN0YXRlIH0pO1xuICB9XG59XG4iXX0= |
\ | No newline at end of file |