import { Injectable } from '@angular/core';
import {
  ActionsSubject,
  ReducerManager,
  StateObservable,
  Store,
} from '@ngrx/store';
import { BehaviorSubject } from 'rxjs';

@Injectable()
export class StoreMock<T> extends Store<T> {
  private stateSubject = new BehaviorSubject<T>({} as T);

  constructor(
    state$: StateObservable,
    actionsObserver: ActionsSubject,
    reducerManager: ReducerManager,
  ) {
    super(state$, actionsObserver, reducerManager);
    this.source = this.stateSubject.asObservable();
  }

  nextState(nextState: T) {
    this.stateSubject.next(nextState);
  }
}