From cbac9ab1de5f3d469b8b4730fd7e91bd01107f90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=80lex=20Magaz=20Gra=C3=A7a?= Date: Wed, 18 Oct 2017 17:12:41 +0200 Subject: [PATCH] Add tests for ViewModeSwitchComponent --- .../view-mode-switch.component.spec.ts | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/app/shared/view-mode-switch/view-mode-switch.component.spec.ts diff --git a/src/app/shared/view-mode-switch/view-mode-switch.component.spec.ts b/src/app/shared/view-mode-switch/view-mode-switch.component.spec.ts new file mode 100644 index 0000000000..a8486d011d --- /dev/null +++ b/src/app/shared/view-mode-switch/view-mode-switch.component.spec.ts @@ -0,0 +1,77 @@ +import { DebugElement } from '@angular/core'; +import { TranslateModule, TranslateLoader } from '@ngx-translate/core'; +import { async, ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { MockTranslateLoader } from '../mocks/mock-translate-loader'; +import { RouterTestingModule } from '@angular/router/testing'; + +import { Component } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; + +import { SearchService } from '../../+search-page/search-service/search.service'; +import { ItemDataService } from './../../core/data/item-data.service'; +import { ViewModeSwitchComponent } from './view-mode-switch.component'; +import { ViewMode } from '../../+search-page/search-options.model'; + +@Component({ template: '' }) +class DummyComponent { } + +describe('ViewModeSwitchComponent', () => { + let comp: ViewModeSwitchComponent; + let fixture: ComponentFixture; + let searchService: SearchService; + let listButton: HTMLElement; + let gridButton: HTMLElement; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: MockTranslateLoader + } + }), + RouterTestingModule.withRoutes([ + { path: 'search', component: DummyComponent, pathMatch: 'full' }, + ]) + ], + declarations: [ + ViewModeSwitchComponent, + DummyComponent + ], + providers: [ + { provide: ItemDataService, useValue: {} }, + SearchService + ], + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ViewModeSwitchComponent); + comp = fixture.componentInstance; // ViewModeSwitchComponent test instance + fixture.detectChanges(); + const debugElements = fixture.debugElement.queryAll(By.css('a')); + listButton = debugElements[0].nativeElement; + gridButton = debugElements[1].nativeElement; + searchService = fixture.debugElement.injector.get(SearchService); + }); + + it('should set list button as active when on list mode', fakeAsync(() => { + searchService.setViewMode(ViewMode.List); + tick(); + fixture.detectChanges(); + expect(comp.currentMode).toBe(ViewMode.List); + expect(listButton.classList).toContain('active'); + expect(gridButton.classList).not.toContain('active'); + })); + + it('should set grid button as active when on grid mode', fakeAsync(() => { + searchService.setViewMode(ViewMode.Grid); + tick(); + fixture.detectChanges(); + expect(comp.currentMode).toBe(ViewMode.Grid); + expect(listButton.classList).not.toContain('active'); + expect(gridButton.classList).toContain('active'); + })); +});