describe('temporary disabled', () => {
it('temporary disabled', () => {});
});
// import { Component, Injectable } from '@angular/core';
// import { fakeAsync, TestBed, tick } from '@angular/core/testing';
// import { Router } from '@angular/router';
// import { RouterTestingModule } from '@angular/router/testing';
// import { Actions, Effect, EffectsModule, ofType } from '@ngrx/effects';
// import { provideMockActions } from '@ngrx/effects/testing';
// import {
// StoreRouterConnectingModule,
// DefaultRouterStateSerializer,
// } from '@ngrx/router-store';
// import { Store, StoreModule } from '@ngrx/store';
// import { Observable, of, Subject, throwError } from 'rxjs';
// import { delay, withLatestFrom } from 'rxjs/operators';
//
// import {
// DataPersistence,
// pessimisticUpdate,
// optimisticUpdate,
// fetch,
// NxModule,
// } from '../index';
// import { readAll } from '../testing';
//
// // interfaces
// type Todo = {
// id: number;
// user: string;
// };
// type Todos = {
// selected: Todo;
// };
// type TodosState = {
// todos: Todos;
// user: string;
// };
//
// // actions
// type TodoLoaded = {
// type: 'TODO_LOADED';
// payload: Todo;
// };
// type UpdateTodo = {
// type: 'UPDATE_TODO';
// payload: { newTitle: string };
// };
// type Action = TodoLoaded;
//
// // reducers
// function todosReducer(state: Todos, action: Action): Todos {
// if (action.type === 'TODO_LOADED') {
// return { selected: action.payload };
// } else {
// return state;
// }
// }
//
// function userReducer(): string {
// return 'bob';
// }
//
// @Component({
// template: ` ROOT[] `,
// })
// class RootCmp {}
//
// @Component({
// template: `
// Todo [
//
ID {{ t.id }} User {{ t.user }}
// ]
// `,
// })
// class TodoComponent {
// todo = this.store.select('todos', 'selected');
// constructor(private store: Store) {}
// }
//
// xdescribe('DataPersistence', () => {
// describe('navigation', () => {
// beforeEach(() => {
// TestBed.configureTestingModule({
// declarations: [RootCmp, TodoComponent],
// imports: [
// StoreModule.forRoot(
// { todos: todosReducer, user: userReducer },
// {
// runtimeChecks: {
// strictStateImmutability: false,
// strictStateSerializability: false,
// },
// }
// ),
// StoreRouterConnectingModule.forRoot({
// serializer: DefaultRouterStateSerializer,
// }),
// RouterTestingModule.withRoutes([
// { path: 'todo/:id', component: TodoComponent },
// ]),
// NxModule.forRoot(),
// ],
// });
// });
//
// describe('successful navigation', () => {
// @Injectable()
// class TodoEffects {
// @Effect()
// loadTodo = this.s.navigation(TodoComponent, {
// run: (a, state) => {
// return {
// type: 'TODO_LOADED',
// payload: { id: a.params['id'], user: state.user },
// };
// },
// onError: () => null,
// });
//
// constructor(private s: DataPersistence) {}
// }
//
// beforeEach(() => {
// TestBed.configureTestingModule({
// imports: [EffectsModule.forRoot([TodoEffects])],
// });
// });
//
// it('should work', fakeAsync(() => {
// const root = TestBed.createComponent(RootCmp);
//
// const router: Router = TestBed.get(Router);
// router.navigateByUrl('/todo/123');
// tick(0);
// root.detectChanges(false);
//
// expect(root.elementRef.nativeElement.innerHTML).toContain('ID 123');
// expect(root.elementRef.nativeElement.innerHTML).toContain('User bob');
// }));
// });
//
// describe('`run` throwing an error', () => {
// @Injectable()
// class TodoEffects {
// @Effect()
// loadTodo = this.s.navigation(TodoComponent, {
// run: (a, state) => {
// if (a.params['id'] === '123') {
// throw new Error('boom');
// } else {
// return {
// type: 'TODO_LOADED',
// payload: { id: a.params['id'], user: state.user },
// };
// }
// },
// onError: (a, e) => ({ type: 'ERROR', payload: { error: e } }),
// });
// constructor(private s: DataPersistence) {}
// }
//
// beforeEach(() => {
// TestBed.configureTestingModule({
// imports: [EffectsModule.forRoot([TodoEffects])],
// });
// });
//
// it('should work', fakeAsync(() => {
// const root = TestBed.createComponent(RootCmp);
//
// const router: Router = TestBed.get(Router);
// let actions: any[] = [];
// TestBed.get(Actions).subscribe((a: any) => actions.push(a));
//
// router.navigateByUrl('/todo/123');
// tick(0);
// root.detectChanges(false);
// expect(root.elementRef.nativeElement.innerHTML).not.toContain('ID 123');
// expect(actions.map((a) => a.type)).toContain('ERROR');
// expect(
// actions.find((a) => a.type === 'ERROR').payload.error.message
// ).toEqual('boom');
//
// // can recover after an error
// router.navigateByUrl('/todo/456');
// tick(0);
// root.detectChanges(false);
// expect(root.elementRef.nativeElement.innerHTML).toContain('ID 456');
// }));
// });
//
// describe('`run` returning an error observable', () => {
// @Injectable()
// class TodoEffects {
// @Effect()
// loadTodo = this.s.navigation(TodoComponent, {
// run: (a, state) => {
// if (a.params['id'] === '123') {
// return throwError('boom');
// } else {
// return {
// type: 'TODO_LOADED',
// payload: { id: a.params['id'], user: state.user },
// };
// }
// },
// onError: (a, e) => ({ type: 'ERROR', payload: { error: e } }),
// });
// constructor(private s: DataPersistence) {}
// }
//
// beforeEach(() => {
// TestBed.configureTestingModule({
// imports: [EffectsModule.forRoot([TodoEffects])],
// });
// });
//
// it('should work', fakeAsync(() => {
// const root = TestBed.createComponent(RootCmp);
//
// const router: Router = TestBed.get(Router);
// let actions: any[] = [];
// TestBed.get(Actions).subscribe((a: any) => actions.push(a));
//
// router.navigateByUrl('/todo/123');
// tick(0);
// root.detectChanges(false);
// expect(root.elementRef.nativeElement.innerHTML).not.toContain('ID 123');
// expect(actions.map((a) => a.type)).toContain('ERROR');
// expect(actions.find((a) => a.type === 'ERROR').payload.error).toEqual(
// 'boom'
// );
//
// router.navigateByUrl('/todo/456');
// tick(0);
// root.detectChanges(false);
// expect(root.elementRef.nativeElement.innerHTML).toContain('ID 456');
// }));
// });
// });
//
// describe('fetch', () => {
// beforeEach(() => {
// TestBed.configureTestingModule({ providers: [DataPersistence] });
// });
//
// describe('no id', () => {
// type GetTodos = {
// type: 'GET_TODOS';
// };
//
// @Injectable()
// class TodoEffects {
// @Effect()
// loadTodos = this.s.fetch('GET_TODOS', {
// run: (a, state) => {
// // we need to introduce the delay to "enable" switchMap
// return of({
// type: 'TODOS',
// payload: { user: state.user, todos: 'some todos' },
// }).pipe(delay(1));
// },
//
// onError: () => null,
// });
//
// @Effect()
// loadTodosWithOperator = this.s.actions.pipe(
// ofType('GET_TODOS'),
// withLatestFrom(this.s.store),
// fetch({
// run: (action, state) => {
// return of({
// type: 'TODOS',
// payload: { user: state.user, todos: 'some todos' },
// }).pipe(delay(1));
// },
// })
// );
//
// constructor(private s: DataPersistence) {}
// }
//
// function userReducer() {
// return 'bob';
// }
//
// let actions: Observable;
//
// beforeEach(() => {
// actions = new Subject();
// TestBed.configureTestingModule({
// providers: [TodoEffects, provideMockActions(() => actions)],
// imports: [
// StoreModule.forRoot(
// { user: userReducer },
// {
// runtimeChecks: {
// strictStateImmutability: false,
// strictStateSerializability: false,
// },
// }
// ),
// ],
// });
// });
//
// it('should work', async (done) => {
// actions = of(
// { type: 'GET_TODOS', payload: {} },
// { type: 'GET_TODOS', payload: {} }
// );
//
// expect(await readAll(TestBed.get(TodoEffects).loadTodos)).toEqual([
// { type: 'TODOS', payload: { user: 'bob', todos: 'some todos' } },
// { type: 'TODOS', payload: { user: 'bob', todos: 'some todos' } },
// ]);
//
// done();
// });
//
// it('should work with an operator', async (done) => {
// actions = of(
// { type: 'GET_TODOS', payload: {} },
// { type: 'GET_TODOS', payload: {} }
// );
//
// expect(
// await readAll(TestBed.get(TodoEffects).loadTodosWithOperator)
// ).toEqual([
// { type: 'TODOS', payload: { user: 'bob', todos: 'some todos' } },
// { type: 'TODOS', payload: { user: 'bob', todos: 'some todos' } },
// ]);
//
// done();
// });
// });
//
// describe('id', () => {
// type GetTodo = {
// type: 'GET_TODO';
// payload: { id: string };
// };
//
// @Injectable()
// class TodoEffects {
// @Effect()
// loadTodo = this.s.fetch('GET_TODO', {
// id: (a) => a.payload.id,
// run: (a) => of({ type: 'TODO', payload: a.payload }).pipe(delay(1)),
// onError: () => null,
// });
//
// constructor(private s: DataPersistence) {}
// }
//
// function userReducer() {
// return 'bob';
// }
//
// let actions: Observable;
//
// beforeEach(() => {
// actions = new Subject();
// TestBed.configureTestingModule({
// providers: [TodoEffects, provideMockActions(() => actions)],
// imports: [
// StoreModule.forRoot(
// { user: userReducer },
// {
// runtimeChecks: {
// strictStateImmutability: false,
// strictStateSerializability: false,
// },
// }
// ),
// ],
// });
// });
//
// it('should work', async (done) => {
// actions = of(
// { type: 'GET_TODO', payload: { id: 1, value: '1' } },
// { type: 'GET_TODO', payload: { id: 2, value: '2a' } },
// { type: 'GET_TODO', payload: { id: 2, value: '2b' } }
// );
//
// expect(await readAll(TestBed.get(TodoEffects).loadTodo)).toEqual([
// { type: 'TODO', payload: { id: 1, value: '1' } },
// { type: 'TODO', payload: { id: 2, value: '2b' } },
// ]);
//
// done();
// });
// });
// });
//
// describe('pessimisticUpdate', () => {
// beforeEach(() => {
// TestBed.configureTestingModule({ providers: [DataPersistence] });
// });
//
// describe('successful', () => {
// @Injectable()
// class TodoEffects {
// @Effect()
// loadTodo = this.s.pessimisticUpdate('UPDATE_TODO', {
// run: (a, state) => ({
// type: 'TODO_UPDATED',
// payload: { user: state.user, newTitle: a.payload.newTitle },
// }),
// onError: () => null,
// });
//
// @Effect()
// loadTodoWithOperator = this.s.actions.pipe(
// ofType('UPDATE_TODO'),
// withLatestFrom(this.s.store),
// pessimisticUpdate({
// run: (a, state) => ({
// type: 'TODO_UPDATED',
// payload: { user: state.user, newTitle: a.payload.newTitle },
// }),
// onError: () => null,
// })
// );
//
// constructor(private s: DataPersistence) {}
// }
//
// function userReducer() {
// return 'bob';
// }
//
// let actions: Observable;
//
// beforeEach(() => {
// actions = new Subject();
// TestBed.configureTestingModule({
// providers: [TodoEffects, provideMockActions(() => actions)],
// imports: [
// StoreModule.forRoot(
// { user: userReducer },
// {
// runtimeChecks: {
// strictStateImmutability: false,
// strictStateSerializability: false,
// },
// }
// ),
// ],
// });
// });
//
// it('should work', async (done) => {
// actions = of({
// type: 'UPDATE_TODO',
// payload: { newTitle: 'newTitle' },
// });
//
// expect(await readAll(TestBed.get(TodoEffects).loadTodo)).toEqual([
// {
// type: 'TODO_UPDATED',
// payload: { user: 'bob', newTitle: 'newTitle' },
// },
// ]);
//
// done();
// });
//
// it('should work with an operator', async (done) => {
// actions = of({
// type: 'UPDATE_TODO',
// payload: { newTitle: 'newTitle' },
// });
//
// expect(
// await readAll(TestBed.get(TodoEffects).loadTodoWithOperator)
// ).toEqual([
// {
// type: 'TODO_UPDATED',
// payload: { user: 'bob', newTitle: 'newTitle' },
// },
// ]);
//
// done();
// });
// });
//
// describe('`run` throws an error', () => {
// @Injectable()
// class TodoEffects {
// @Effect()
// loadTodo = this.s.pessimisticUpdate('UPDATE_TODO', {
// run: () => {
// throw new Error('boom');
// },
//
// onError: (a, e: any) => ({
// type: 'ERROR',
// payload: { error: e },
// }),
// });
//
// constructor(private s: DataPersistence) {}
// }
//
// function userReducer() {
// return 'bob';
// }
//
// let actions: Observable;
//
// beforeEach(() => {
// actions = new Subject();
// TestBed.configureTestingModule({
// providers: [TodoEffects, provideMockActions(() => actions)],
// imports: [
// StoreModule.forRoot(
// { user: userReducer },
// {
// runtimeChecks: {
// strictStateImmutability: false,
// strictStateSerializability: false,
// },
// }
// ),
// ],
// });
// });
//
// it('should work', async (done) => {
// actions = of({
// type: 'UPDATE_TODO',
// payload: { newTitle: 'newTitle' },
// });
//
// const [a]: any = await readAll(TestBed.get(TodoEffects).loadTodo);
//
// expect(a.type).toEqual('ERROR');
// expect(a.payload.error.message).toEqual('boom');
//
// done();
// });
// });
//
// describe('`run` returns an observable that errors', () => {
// @Injectable()
// class TodoEffects {
// @Effect()
// loadTodo = this.s.pessimisticUpdate('UPDATE_TODO', {
// run: () => {
// return throwError('boom');
// },
//
// onError: (a, e: any) => ({
// type: 'ERROR',
// payload: { error: e },
// }),
// });
//
// constructor(private s: DataPersistence) {}
// }
//
// function userReducer() {
// return 'bob';
// }
//
// let actions: Observable;
//
// beforeEach(() => {
// actions = new Subject();
// TestBed.configureTestingModule({
// providers: [TodoEffects, provideMockActions(() => actions)],
// imports: [
// StoreModule.forRoot(
// { user: userReducer },
// {
// runtimeChecks: {
// strictStateImmutability: false,
// strictStateSerializability: false,
// },
// }
// ),
// ],
// });
// });
//
// it('should work', async (done) => {
// actions = of({
// type: 'UPDATE_TODO',
// payload: { newTitle: 'newTitle' },
// });
//
// const [a]: any = await readAll(TestBed.get(TodoEffects).loadTodo);
//
// expect(a.type).toEqual('ERROR');
// expect(a.payload.error).toEqual('boom');
//
// done();
// });
// });
// });
//
// describe('optimisticUpdate', () => {
// beforeEach(() => {
// TestBed.configureTestingModule({ providers: [DataPersistence] });
// });
//
// describe('`run` throws an error', () => {
// @Injectable()
// class TodoEffects {
// @Effect()
// loadTodo = this.s.optimisticUpdate('UPDATE_TODO', {
// run: () => {
// throw new Error('boom');
// },
//
// undoAction: (a) => ({
// type: 'UNDO_UPDATE_TODO',
// payload: a.payload,
// }),
// });
//
// @Effect()
// loadTodoWithOperator = this.s.actions.pipe(
// ofType('UPDATE_TODO'),
// withLatestFrom(this.s.store),
// optimisticUpdate({
// run: () => {
// throw new Error('boom');
// },
//
// undoAction: (a) => ({
// type: 'UNDO_UPDATE_TODO',
// payload: a.payload,
// }),
// })
// );
//
// constructor(private s: DataPersistence) {}
// }
//
// function userReducer() {
// return 'bob';
// }
//
// let actions: Observable;
//
// beforeEach(() => {
// actions = new Subject();
// TestBed.configureTestingModule({
// providers: [TodoEffects, provideMockActions(() => actions)],
// imports: [
// StoreModule.forRoot(
// { user: userReducer },
// {
// runtimeChecks: {
// strictStateImmutability: false,
// strictStateSerializability: false,
// },
// }
// ),
// ],
// });
// });
//
// it('should work', async (done) => {
// actions = of({
// type: 'UPDATE_TODO',
// payload: { newTitle: 'newTitle' },
// });
//
// const [a]: any = await readAll(TestBed.get(TodoEffects).loadTodo);
//
// expect(a.type).toEqual('UNDO_UPDATE_TODO');
// expect(a.payload.newTitle).toEqual('newTitle');
//
// done();
// });
//
// it('should work with an operator', async (done) => {
// actions = of({
// type: 'UPDATE_TODO',
// payload: { newTitle: 'newTitle' },
// });
//
// const [a]: any = await readAll(
// TestBed.get(TodoEffects).loadTodoWithOperator
// );
//
// expect(a.type).toEqual('UNDO_UPDATE_TODO');
// expect(a.payload.newTitle).toEqual('newTitle');
//
// done();
// });
// });
// });
// });