X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-frontend%2Fsrc%2Fapp%2Fapp.component.spec.ts;h=02b5fc667116186669ab661bdfdea0cb42bce629;hb=8ce8fccb49a3c082c9fde5f20335af8e85b41584;hp=7222b1e7e5070c1fbd699409edf65f923bae7453;hpb=84d9bf693900acf8624290919255fccd331c54e4;p=portal%2Fnonrtric-controlpanel.git diff --git a/webapp-frontend/src/app/app.component.spec.ts b/webapp-frontend/src/app/app.component.spec.ts index 7222b1e..02b5fc6 100644 --- a/webapp-frontend/src/app/app.component.spec.ts +++ b/webapp-frontend/src/app/app.component.spec.ts @@ -1,35 +1,122 @@ -import { TestBed, async } from '@angular/core/testing'; -import { APP_BASE_HREF } from '@angular/common'; -import { RouterModule, Routes } from '@angular/router'; +/*- + * ========================LICENSE_START================================= + * O-RAN-SC + * %% + * Copyright (C) 2019 AT&T Intellectual Property + * %% + * 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 + * + * http://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. + * ========================LICENSE_END=================================== + */ +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { TestBed, async, ComponentFixture } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { CookieService } from 'ngx-cookie'; import { AppComponent } from './app.component'; +import { UiService } from './services/ui/ui.service'; describe('AppComponent', () => { - const routes: Routes = [ - { path: '', redirectTo: '/policy', pathMatch: 'full'} - ]; + let fixture: ComponentFixture; + let app: AppComponent; + let cookieServiceSpy: any; + let uiService: UiService; + beforeEach(async(() => { + cookieServiceSpy = jasmine.createSpyObj('CookieService', [ 'get', 'put' ]); TestBed.configureTestingModule({ + imports: [ + RouterTestingModule + ], + schemas: [ + CUSTOM_ELEMENTS_SCHEMA + ], declarations: [ AppComponent ], - imports: [ - RouterModule.forRoot(routes) - ], providers: [ - { provide: APP_BASE_HREF, useValue: '/' } + { provide: CookieService, useValue: cookieServiceSpy }, + UiService ] }).compileComponents(); })); - it('should create the app', async(() => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.debugElement.componentInstance; + beforeEach(() => { + fixture = TestBed.createComponent(AppComponent); + app = fixture.componentInstance; + uiService = TestBed.inject(UiService); + fixture.detectChanges(); + }); + + it('should create the app', () => { expect(app).toBeTruthy(); - })); + }); - it(`should have as title 'controlpanelApp'`, async(() => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.debugElement.componentInstance; - expect(app.title).toEqual('controlpanelApp'); - })); -}); \ No newline at end of file + describe('#content', () => { + it('should contain oran logo', async(() => { + const ele = fixture.debugElement.nativeElement.querySelector('img'); + expect(ele.src).toContain('assets/oran-logo.png'); + })); + + it('should contain navigation menu', async(() => { + const ele = fixture.debugElement.nativeElement.querySelector('nrcp-sidenav-list'); + expect(ele).toBeTruthy(); + })); + + it('should contain dark mode selector', async(() => { + const ele = fixture.debugElement.nativeElement.querySelector('#darkModeSwitch'); + expect(ele).toBeTruthy(); + })); + + it('should contain heading', async(() => { + const ele = fixture.debugElement.nativeElement.querySelector('tspan'); + expect(ele.textContent.trim()).toBe('Non-RT RIC Control Panel'); + })); + + it('should contain router-outlet', async(() => { + const ele = fixture.debugElement.nativeElement.querySelector('router-outlet'); + expect(ele).toBeTruthy(); + })); + + it('should contain nrcp-footer', async(() => { + const ele = fixture.debugElement.nativeElement.querySelector('nrcp-footer'); + expect(ele).toBeTruthy(); + })); + }); + + describe('#darkMode', () => { + it('when dark mode value yes from cookie at start should set mode to dark', () => { + uiService.darkModeState.next(false); // Set internal state to light mode. + cookieServiceSpy.get.and.returnValue('yes'); // Cookie shall return dark mode used. + + app.ngOnInit(); + + expect(uiService.getDarkMode()).toBeTruthy(); + expect(app.darkMode).toBeTruthy(); + expect(cookieServiceSpy.get).toHaveBeenCalled(); + }); + + it('should toggle dark mode when selector is clicked', () => { + const darkModeSelector = fixture.debugElement.nativeElement.querySelector('#darkModeSwitch'); + + // Toggle to light mode + darkModeSelector.click(); + expect(uiService.getDarkMode()).toBeFalsy(); + expect(cookieServiceSpy.put).toHaveBeenCalledWith('darkMode', 'no'); + + + // Toggle to dark mode + darkModeSelector.click(); + expect(uiService.getDarkMode()).toBeTruthy(); + expect(cookieServiceSpy.put).toHaveBeenCalledWith('darkMode', 'yes'); + }); + }); +});