/**
 *  Copyright 2020 Google LLC
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */ import { TestBed , async , inject , ComponentFixture } from '@angular/core/testing' ; import { HttpClientTestingModule } from '@angular/common/http/testing' ; import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' ; import { AppComponent } from './app.component' ; import { DialogHostComponent } from './dialog-host/dialog-host.component' ; import { HomeComponent } from './home/home.component' ; import { NavButtonsComponent } from './nav-buttons/nav-buttons.component' ; import { ChatComponent } from './chat/chat.component' ; import { InterviewPaneComponent } from './interview-pane/interview-pane.component' ; import { DialogCloseButtonComponent } from './dialog-close-button/dialog-close-button.component' ; import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing' ; import { WelcomeDialogComponent } from './welcome-dialog/welcome-dialog.component' ; import { HelpDialogComponent } from './help-dialog/help-dialog.component' ; import { HowDialogComponent } from './how-dialog/how-dialog.component' ; import { NotesDialogComponent } from './notes-dialog/notes-dialog.component' ; import { MapDialogComponent } from './map-dialog/map-dialog.component' ; import { SolveDialogComponent } from './solve-dialog/solve-dialog.component' ; import { WinDialogComponent } from './win-dialog/win-dialog.component' ; import { IncompleteSolutionDialogComponent } from './incomplete-solution-dialog/incomplete-solution-dialog.component' ; import { IncorrectSolutionDialogComponent } from './incorrect-solution-dialog/incorrect-solution-dialog.component' ; import { BotResponseService } from './bot-response.service' ; describe ( 'AppComponent' , ( ) => { let fixture ; beforeEach ( async ( ( ) => { TestBed . configureTestingModule ( { imports : [ HttpClientTestingModule , ] , declarations : [ AppComponent , DialogHostComponent , HomeComponent , NavButtonsComponent , ChatComponent , InterviewPaneComponent , DialogCloseButtonComponent , HelpDialogComponent , HowDialogComponent , NotesDialogComponent , MapDialogComponent , SolveDialogComponent , WinDialogComponent , IncompleteSolutionDialogComponent , IncorrectSolutionDialogComponent , WelcomeDialogComponent , ] , schemas : [ CUSTOM_ELEMENTS_SCHEMA , ] , } ) . overrideModule ( BrowserDynamicTestingModule , { set : { entryComponents : [ HelpDialogComponent , HowDialogComponent , NotesDialogComponent , MapDialogComponent , SolveDialogComponent , WinDialogComponent , IncompleteSolutionDialogComponent , IncorrectSolutionDialogComponent , WelcomeDialogComponent , ] , } , } ) . compileComponents ( ) ; } ) ) ; afterEach ( ( ) => { fixture . debugElement . nativeElement . remove ( ) ; fixture . destroy ( ) ; } ) ; it ( 'should create the app' , ( ) => { fixture = TestBed . createComponent ( AppComponent ) ; const app = fixture . debugElement . componentInstance ; expect ( app ) . toBeTruthy ( ) ; } ) ; it ( `should have as title 'The Mystery of the Three Bots'` , ( ) => { fixture = TestBed . createComponent ( AppComponent ) ; const app = fixture . debugElement . componentInstance ; expect ( app . title ) . toEqual ( 'The Mystery of the Three Bots' ) ; } ) ; it ( 'should load the models' , inject ( [ BotResponseService ] , ( responseService ) => { spyOn ( responseService , 'loadModels' ) . and . callThrough ( ) ; fixture = TestBed . createComponent ( AppComponent ) ; fixture . detectChanges ( ) ; expect ( responseService . loadModels ) . toHaveBeenCalled ( ) ; } ) ) ; it ( 'should initialize state' , inject ( [ BotResponseService ] , ( responseService ) => { spyOn ( responseService , 'setState' ) . and . callThrough ( ) ; fixture = TestBed . createComponent ( AppComponent ) ; fixture . detectChanges ( ) ; expect ( responseService . setState ) . toHaveBeenCalledWith ( { chef : 'initial' , } ) ; } ) ) ; } ) ;