import {TestBed} from '@angular/core/testing'; import {SurrenderService} from './surrender.service'; import {GameActionsService} from './game-actions.service'; describe('SurrenderService', () => { let surrenderService: SurrenderService; let gameActions: GameActionsService; beforeEach(() => { TestBed.configureTestingModule({ providers: [GameActionsService] }); surrenderService = TestBed.get(SurrenderService); gameActions = TestBed.get(GameActionsService); spyOn(surrenderService.allowSurrender, 'next'); }); it('should be created', () => { expect(surrenderService).toBeTruthy(); }); it('there is a default set to errorsToAllowSurrender', () => { expect(surrenderService['errorsToAllowSurrender']).toBeDefined(); }); it('Current challenge errors is zero after show next challenge ', () => { currentChallengeErrorZeroAndAllowFalseAfter(gameActions.showNextChallenge); }); it('Current challenge errors is zero after show next challenge ', () => { currentChallengeErrorZeroAndAllowFalseAfter(gameActions.restartGame); }); it('After surrender allow surrender must be false', () => { gameActions.surrender.emit(); allowSurrenderMustBeenCalled(false); }); it('After correct answer allow surrender must be false', () => { gameActions.checkedAnswer.emit(true); allowSurrenderMustBeenCalled(false); }); it('After wrong answer allow surrender must called on Error', () => { spyOn(surrenderService as any, 'onError'); gameActions.checkedAnswer.emit(false); expect(surrenderService['onError']).toHaveBeenCalledTimes(1); }); it('onError add 1 to current challenges error', () => { gameActions.showNextChallenge.emit(); surrenderService['onError'](); expect(surrenderService['currentChallengesErrors']).toBe(1); }); it('if currentChallengesErrors is equal to errorsToAllowSurrender allow surrender must send true', () => { callAllowAfterError(surrenderService['errorsToAllowSurrender']); }); it('if currentChallengesErrors is greater than errorsToAllowSurrender allow surrender must send true', () => { callAllowAfterError(surrenderService['errorsToAllowSurrender'] + 1); }); function callAllowAfterError(count: number) { gameActions.showNextChallenge.emit(); expect(surrenderService['currentChallengesErrors']).toBe(0); for (let i = 0; i < count; i++) { surrenderService['onError'](); } allowSurrenderMustBeenCalled(true); } function allowSurrenderMustBeenCalled(b: boolean) { expect(surrenderService.allowSurrender.next).toHaveBeenCalledWith(b); } function currentChallengeErrorZeroAndAllowFalseAfter(event) { surrenderService['currentChallengesErrors'] = 2; event.emit(); expect(surrenderService['currentChallengesErrors']).toBe(0); allowSurrenderMustBeenCalled(false); } });