Uplift to Angular 9
[portal/nonrtric-controlpanel.git] / webapp-frontend / src / app / app.component.spec.ts
index 24a2d6f..bb65313 100644 (file)
  * ========================LICENSE_END===================================
  */
 import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
-import { TestBed, async } from '@angular/core/testing';
+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', () => {
+  let fixture: ComponentFixture<AppComponent>;
+  let app: AppComponent;
+  let cookieServiceSpy: any;
+  let uiService: UiService;
+
   beforeEach(async(() => {
-    const cookieSpy = jasmine.createSpyObj('CookieService', [ 'get' ]);
+    cookieServiceSpy = jasmine.createSpyObj('CookieService', [ 'get', 'put' ]);
     TestBed.configureTestingModule({
       imports: [
         RouterTestingModule
@@ -38,15 +43,79 @@ describe('AppComponent', () => {
         AppComponent
       ],
       providers: [
-        { provide: CookieService, useValue: cookieSpy },
+        { provide: CookieService, useValue: cookieServiceSpy },
         UiService
       ]
     }).compileComponents();
   }));
 
+  beforeEach(() => {
+    fixture = TestBed.createComponent(AppComponent);
+    app = fixture.componentInstance;
+    uiService = TestBed.inject(UiService);
+    fixture.detectChanges();
+  });
+
   it('should create the app', () => {
-    const fixture = TestBed.createComponent(AppComponent);
-    const app = fixture.debugElement.componentInstance;
     expect(app).toBeTruthy();
   });
+
+  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();
+    });
+
+    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');
+    });
+  });
 });