1 | import { Injectable, InjectionToken, Inject, Injector } from '@angular/core';
|
2 | import { BehaviorSubject } from 'rxjs';
|
3 | import { Store, createSelector, ActionsSubject, ReducerManager, INITIAL_STATE, setNgrxMockEnvironment, StateObservable } from '@ngrx/store';
|
4 | import { TestBed } from '@angular/core/testing';
|
5 |
|
6 | /**
|
7 | * @fileoverview added by tsickle
|
8 | * Generated from: mock_state.ts
|
9 | * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
10 | */
|
11 | /**
|
12 | * @template T
|
13 | */
|
14 | class MockState extends BehaviorSubject {
|
15 | constructor() {
|
16 | super((/** @type {?} */ ({})));
|
17 | }
|
18 | }
|
19 | MockState.decorators = [
|
20 | { type: Injectable }
|
21 | ];
|
22 | /** @nocollapse */
|
23 | MockState.ctorParameters = () => [];
|
24 |
|
25 | /**
|
26 | * @fileoverview added by tsickle
|
27 | * Generated from: tokens.ts
|
28 | * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
29 | */
|
30 | /** @type {?} */
|
31 | const MOCK_SELECTORS = new InjectionToken('@ngrx/store Mock Selectors');
|
32 |
|
33 | /**
|
34 | * @fileoverview added by tsickle
|
35 | * Generated from: mock_store.ts
|
36 | * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
37 | */
|
38 | if (typeof afterEach === 'function') {
|
39 | afterEach((/**
|
40 | * @return {?}
|
41 | */
|
42 | () => {
|
43 | try {
|
44 | /** @type {?} */
|
45 | const mockStore = TestBed.inject(MockStore);
|
46 | if (mockStore) {
|
47 | mockStore.resetSelectors();
|
48 | }
|
49 | }
|
50 | catch (_a) { }
|
51 | }));
|
52 | }
|
53 | /**
|
54 | * @template T
|
55 | */
|
56 | class MockStore extends Store {
|
57 | /**
|
58 | * @param {?} state$
|
59 | * @param {?} actionsObserver
|
60 | * @param {?} reducerManager
|
61 | * @param {?} initialState
|
62 | * @param {?=} mockSelectors
|
63 | */
|
64 | constructor(state$, actionsObserver, reducerManager, initialState, mockSelectors = []) {
|
65 | super(state$, actionsObserver, reducerManager);
|
66 | this.state$ = state$;
|
67 | this.initialState = initialState;
|
68 | this.selectors = new Map();
|
69 | this.resetSelectors();
|
70 | this.setState(this.initialState);
|
71 | this.scannedActions$ = actionsObserver.asObservable();
|
72 | for (const mockSelector of mockSelectors) {
|
73 | this.overrideSelector(mockSelector.selector, mockSelector.value);
|
74 | }
|
75 | }
|
76 | /**
|
77 | * @param {?} nextState
|
78 | * @return {?}
|
79 | */
|
80 | setState(nextState) {
|
81 | this.state$.next(nextState);
|
82 | this.lastState = nextState;
|
83 | }
|
84 | /**
|
85 | * @template Selector, Value, Result
|
86 | * @param {?} selector
|
87 | * @param {?} value
|
88 | * @return {?}
|
89 | */
|
90 | overrideSelector(selector, value) {
|
91 | this.selectors.set(selector, value);
|
92 | /** @type {?} */
|
93 | const resultSelector = typeof selector === 'string'
|
94 | ? createSelector((/**
|
95 | * @return {?}
|
96 | */
|
97 | () => { }), (/**
|
98 | * @return {?}
|
99 | */
|
100 | () => value))
|
101 | : selector;
|
102 | resultSelector.setResult(value);
|
103 | return (/** @type {?} */ (resultSelector));
|
104 | }
|
105 | /**
|
106 | * @return {?}
|
107 | */
|
108 | resetSelectors() {
|
109 | for (const selector of this.selectors.keys()) {
|
110 | if (typeof selector !== 'string') {
|
111 | selector.release();
|
112 | selector.clearResult();
|
113 | }
|
114 | }
|
115 | this.selectors.clear();
|
116 | }
|
117 | /**
|
118 | * @param {?} selector
|
119 | * @param {?=} prop
|
120 | * @return {?}
|
121 | */
|
122 | select(selector, prop) {
|
123 | if (typeof selector === 'string' && this.selectors.has(selector)) {
|
124 | return new BehaviorSubject(this.selectors.get(selector)).asObservable();
|
125 | }
|
126 | return super.select(selector, prop);
|
127 | }
|
128 | /**
|
129 | * @return {?}
|
130 | */
|
131 | addReducer() {
|
132 | /* noop */
|
133 | }
|
134 | /**
|
135 | * @return {?}
|
136 | */
|
137 | removeReducer() {
|
138 | /* noop */
|
139 | }
|
140 | /**
|
141 | * Refreshes the existing state.
|
142 | * @return {?}
|
143 | */
|
144 | refreshState() {
|
145 | if (this.lastState)
|
146 | this.setState(Object.assign({}, this.lastState));
|
147 | }
|
148 | }
|
149 | MockStore.decorators = [
|
150 | { type: Injectable }
|
151 | ];
|
152 | /** @nocollapse */
|
153 | MockStore.ctorParameters = () => [
|
154 | { type: MockState },
|
155 | { type: ActionsSubject },
|
156 | { type: ReducerManager },
|
157 | { type: undefined, decorators: [{ type: Inject, args: [INITIAL_STATE,] }] },
|
158 | { type: Array, decorators: [{ type: Inject, args: [MOCK_SELECTORS,] }] }
|
159 | ];
|
160 | if (false) {
|
161 | /**
|
162 | * @type {?}
|
163 | * @private
|
164 | */
|
165 | MockStore.prototype.selectors;
|
166 | /** @type {?} */
|
167 | MockStore.prototype.scannedActions$;
|
168 | /**
|
169 | * @type {?}
|
170 | * @private
|
171 | */
|
172 | MockStore.prototype.lastState;
|
173 | /**
|
174 | * @type {?}
|
175 | * @private
|
176 | */
|
177 | MockStore.prototype.state$;
|
178 | /**
|
179 | * @type {?}
|
180 | * @private
|
181 | */
|
182 | MockStore.prototype.initialState;
|
183 | }
|
184 |
|
185 | /**
|
186 | * @fileoverview added by tsickle
|
187 | * Generated from: mock_reducer_manager.ts
|
188 | * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
189 | */
|
190 | class MockReducerManager extends BehaviorSubject {
|
191 | constructor() {
|
192 | super((/**
|
193 | * @return {?}
|
194 | */
|
195 | () => undefined));
|
196 | }
|
197 | /**
|
198 | * @param {?} feature
|
199 | * @return {?}
|
200 | */
|
201 | addFeature(feature) {
|
202 | /* noop */
|
203 | }
|
204 | /**
|
205 | * @param {?} feature
|
206 | * @return {?}
|
207 | */
|
208 | addFeatures(feature) {
|
209 | /* noop */
|
210 | }
|
211 | /**
|
212 | * @param {?} feature
|
213 | * @return {?}
|
214 | */
|
215 | removeFeature(feature) {
|
216 | /* noop */
|
217 | }
|
218 | /**
|
219 | * @param {?} features
|
220 | * @return {?}
|
221 | */
|
222 | removeFeatures(features) {
|
223 | /* noop */
|
224 | }
|
225 | /**
|
226 | * @param {?} key
|
227 | * @param {?} reducer
|
228 | * @return {?}
|
229 | */
|
230 | addReducer(key, reducer) {
|
231 | /* noop */
|
232 | }
|
233 | /**
|
234 | * @param {?} reducers
|
235 | * @return {?}
|
236 | */
|
237 | addReducers(reducers) {
|
238 | /* noop */
|
239 | }
|
240 | /**
|
241 | * @param {?} featureKey
|
242 | * @return {?}
|
243 | */
|
244 | removeReducer(featureKey) {
|
245 | /* noop */
|
246 | }
|
247 | /**
|
248 | * @param {?} featureKeys
|
249 | * @return {?}
|
250 | */
|
251 | removeReducers(featureKeys) {
|
252 | /* noop */
|
253 | }
|
254 | }
|
255 | MockReducerManager.decorators = [
|
256 | { type: Injectable }
|
257 | ];
|
258 | /** @nocollapse */
|
259 | MockReducerManager.ctorParameters = () => [];
|
260 |
|
261 | /**
|
262 | * @fileoverview added by tsickle
|
263 | * Generated from: testing.ts
|
264 | * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
265 | */
|
266 | /**
|
267 | * @record
|
268 | * @template T
|
269 | */
|
270 | function MockStoreConfig() { }
|
271 | if (false) {
|
272 | /** @type {?|undefined} */
|
273 | MockStoreConfig.prototype.initialState;
|
274 | /** @type {?|undefined} */
|
275 | MockStoreConfig.prototype.selectors;
|
276 | }
|
277 | /**
|
278 | * \@description
|
279 | * Creates mock store providers.
|
280 | *
|
281 | * \@usageNotes
|
282 | *
|
283 | * **With `TestBed.configureTestingModule`**
|
284 | *
|
285 | * ```typescript
|
286 | * describe('Books Component', () => {
|
287 | * let store: MockStore;
|
288 | *
|
289 | * beforeEach(() => {
|
290 | * TestBed.configureTestingModule({
|
291 | * providers: [
|
292 | * provideMockStore({
|
293 | * initialState: { books: { entities: [] } },
|
294 | * selectors: [
|
295 | * { selector: selectAllBooks, value: ['Book 1', 'Book 2'] },
|
296 | * { selector: selectVisibleBooks, value: ['Book 1'] },
|
297 | * ],
|
298 | * }),
|
299 | * ],
|
300 | * });
|
301 | *
|
302 | * store = TestBed.inject(MockStore);
|
303 | * });
|
304 | * });
|
305 | * ```
|
306 | *
|
307 | * **With `Injector.create`**
|
308 | *
|
309 | * ```typescript
|
310 | * describe('Counter Component', () => {
|
311 | * let injector: Injector;
|
312 | * let store: MockStore;
|
313 | *
|
314 | * beforeEach(() => {
|
315 | * injector = Injector.create({
|
316 | * providers: [
|
317 | * provideMockStore({ initialState: { counter: 0 } }),
|
318 | * ],
|
319 | * });
|
320 | * store = injector.get(MockStore);
|
321 | * });
|
322 | * });
|
323 | * ```
|
324 | * @template T
|
325 | * @param {?=} config `MockStoreConfig<T>` to provide the values for `INITIAL_STATE` and `MOCK_SELECTORS` tokens.
|
326 | * By default, `initialState` and `selectors` are not defined.
|
327 | * @return {?} Mock store providers that can be used with both `TestBed.configureTestingModule` and `Injector.create`.
|
328 | *
|
329 | */
|
330 | function provideMockStore(config = {}) {
|
331 | setNgrxMockEnvironment(true);
|
332 | return [
|
333 | {
|
334 | provide: ActionsSubject,
|
335 | useFactory: (/**
|
336 | * @return {?}
|
337 | */
|
338 | () => new ActionsSubject()),
|
339 | deps: [],
|
340 | },
|
341 | { provide: MockState, useFactory: (/**
|
342 | * @return {?}
|
343 | */
|
344 | () => new MockState()), deps: [] },
|
345 | {
|
346 | provide: MockReducerManager,
|
347 | useFactory: (/**
|
348 | * @return {?}
|
349 | */
|
350 | () => new MockReducerManager()),
|
351 | deps: [],
|
352 | },
|
353 | { provide: INITIAL_STATE, useValue: config.initialState || {} },
|
354 | { provide: MOCK_SELECTORS, useValue: config.selectors },
|
355 | { provide: StateObservable, useExisting: MockState },
|
356 | { provide: ReducerManager, useExisting: MockReducerManager },
|
357 | {
|
358 | provide: MockStore,
|
359 | useFactory: mockStoreFactory,
|
360 | deps: [
|
361 | MockState,
|
362 | ActionsSubject,
|
363 | ReducerManager,
|
364 | INITIAL_STATE,
|
365 | MOCK_SELECTORS,
|
366 | ],
|
367 | },
|
368 | { provide: Store, useExisting: MockStore },
|
369 | ];
|
370 | }
|
371 | /**
|
372 | * @template T
|
373 | * @param {?} mockState
|
374 | * @param {?} actionsSubject
|
375 | * @param {?} reducerManager
|
376 | * @param {?} initialState
|
377 | * @param {?} mockSelectors
|
378 | * @return {?}
|
379 | */
|
380 | function mockStoreFactory(mockState, actionsSubject, reducerManager, initialState, mockSelectors) {
|
381 | return new MockStore(mockState, actionsSubject, reducerManager, initialState, mockSelectors);
|
382 | }
|
383 | /**
|
384 | * \@description
|
385 | * Creates mock store with all necessary dependencies outside of the `TestBed`.
|
386 | *
|
387 | * \@usageNotes
|
388 | *
|
389 | * ```typescript
|
390 | * describe('Books Effects', () => {
|
391 | * let store: MockStore;
|
392 | *
|
393 | * beforeEach(() => {
|
394 | * store = getMockStore({
|
395 | * initialState: { books: { entities: ['Book 1', 'Book 2', 'Book 3'] } },
|
396 | * selectors: [
|
397 | * { selector: selectAllBooks, value: ['Book 1', 'Book 2'] },
|
398 | * { selector: selectVisibleBooks, value: ['Book 1'] },
|
399 | * ],
|
400 | * });
|
401 | * });
|
402 | * });
|
403 | * ```
|
404 | * @template T
|
405 | * @param {?=} config `MockStoreConfig<T>` to provide the values for `INITIAL_STATE` and `MOCK_SELECTORS` tokens.
|
406 | * By default, `initialState` and `selectors` are not defined.
|
407 | * @return {?} `MockStore<T>`
|
408 | *
|
409 | */
|
410 | function getMockStore(config = {}) {
|
411 | /** @type {?} */
|
412 | const injector = Injector.create({ providers: provideMockStore(config) });
|
413 | return injector.get(MockStore);
|
414 | }
|
415 |
|
416 | /**
|
417 | * @fileoverview added by tsickle
|
418 | * Generated from: public_api.ts
|
419 | * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
420 | */
|
421 |
|
422 | /**
|
423 | * @fileoverview added by tsickle
|
424 | * Generated from: ngrx-store-testing.ts
|
425 | * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
426 | */
|
427 |
|
428 | export { MockReducerManager, MockState, MockStore, getMockStore, provideMockStore, MOCK_SELECTORS as ɵa };
|
429 | //# sourceMappingURL=ngrx-store-testing.js.map
|