diff --git a/src/app/+admin/admin-sidebar/admin-sidebar.component.spec.ts b/src/app/+admin/admin-sidebar/admin-sidebar.component.spec.ts index 581d3341da..e3e8d08753 100644 --- a/src/app/+admin/admin-sidebar/admin-sidebar.component.spec.ts +++ b/src/app/+admin/admin-sidebar/admin-sidebar.component.spec.ts @@ -13,6 +13,8 @@ import { AuthService } from '../../core/auth/auth.service'; import { of as observableOf } from 'rxjs'; import { By } from '@angular/platform-browser'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { RouterTestingModule } from '@angular/router/testing'; +import { ActivatedRoute } from '@angular/router'; describe('AdminSidebarComponent', () => { let comp: AdminSidebarComponent; @@ -21,13 +23,14 @@ describe('AdminSidebarComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), NoopAnimationsModule], + imports: [TranslateModule.forRoot(), NoopAnimationsModule, RouterTestingModule], declarations: [AdminSidebarComponent], providers: [ { provide: Injector, useValue: {} }, { provide: MenuService, useValue: menuService }, { provide: CSSVariableService, useClass: CSSVariableServiceStub }, { provide: AuthService, useClass: AuthServiceStub }, + { provide: ActivatedRoute, useValue: {} }, { provide: NgbModal, useValue: { open: () => {/*comment*/} diff --git a/src/app/navbar/navbar.component.spec.ts b/src/app/navbar/navbar.component.spec.ts index 206afda003..907ddc8b87 100644 --- a/src/app/navbar/navbar.component.spec.ts +++ b/src/app/navbar/navbar.component.spec.ts @@ -11,6 +11,8 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { Injector, NO_ERRORS_SCHEMA } from '@angular/core'; import { MenuService } from '../shared/menu/menu.service'; import { MenuServiceStub } from '../shared/testing/menu-service.stub'; +import { ActivatedRoute } from '@angular/router'; +import { RouterTestingModule } from '@angular/router/testing'; let comp: NavbarComponent; let fixture: ComponentFixture; @@ -24,12 +26,14 @@ describe('NavbarComponent', () => { imports: [ TranslateModule.forRoot(), NoopAnimationsModule, - ReactiveFormsModule], + ReactiveFormsModule, + RouterTestingModule], declarations: [NavbarComponent], providers: [ { provide: Injector, useValue: {} }, { provide: MenuService, useValue: menuService }, { provide: HostWindowService, useValue: new HostWindowServiceStub(800) }, + { provide: ActivatedRoute, useValue: {} } ], schemas: [NO_ERRORS_SCHEMA] }) diff --git a/src/app/shared/menu/menu.component.spec.ts b/src/app/shared/menu/menu.component.spec.ts index 625c96e795..c277725d20 100644 --- a/src/app/shared/menu/menu.component.spec.ts +++ b/src/app/shared/menu/menu.component.spec.ts @@ -7,19 +7,65 @@ import { MenuComponent } from './menu.component'; import { MenuServiceStub } from '../testing/menu-service.stub'; import { of as observableOf } from 'rxjs'; import { MenuSection } from './menu.reducer'; +import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; +import { RouterTestingModule } from '@angular/router/testing'; +import { MenuItemType } from './initial-menus-state'; +import { LinkMenuItemModel } from './menu-item/models/link.model'; -describe('MenuComponent', () => { +fdescribe('MenuComponent', () => { let comp: MenuComponent; let fixture: ComponentFixture; let menuService: MenuService; + let routeDataMenuSection: MenuSection; + let routeDataMenuChildSection: MenuSection; + let route: any; + let router: any; beforeEach(async(() => { + routeDataMenuSection = { + id: 'mockSection', + active: false, + visible: true, + model: { + type: MenuItemType.LINK, + text: 'menu.section.mockSection', + link: '' + } as LinkMenuItemModel + }; + routeDataMenuChildSection = { + id: 'mockChildSection', + parentID: 'mockSection', + active: false, + visible: true, + model: { + type: MenuItemType.LINK, + text: 'menu.section.mockChildSection', + link: '' + } as LinkMenuItemModel + }; + route = { + root: { + snapshot: { + data: { + menu: routeDataMenuSection + } + }, + firstChild: { + snapshot: { + data: { + menu: routeDataMenuChildSection + } + } + } + } + }; TestBed.configureTestingModule({ - imports: [TranslateModule.forRoot(), NoopAnimationsModule], + imports: [TranslateModule.forRoot(), NoopAnimationsModule, RouterTestingModule], declarations: [MenuComponent], providers: [ { provide: Injector, useValue: {} }, { provide: MenuService, useClass: MenuServiceStub }, + { provide: ActivatedRoute, useValue: route } ], schemas: [NO_ERRORS_SCHEMA] }).overrideComponent(MenuComponent, { @@ -31,11 +77,36 @@ describe('MenuComponent', () => { fixture = TestBed.createComponent(MenuComponent); comp = fixture.componentInstance; // SearchPageComponent test instance menuService = (comp as any).menuService; + router = TestBed.get(Router); spyOn(comp as any, 'getSectionDataInjector').and.returnValue(MenuSection); spyOn(comp as any, 'getSectionComponent').and.returnValue(observableOf({})); fixture.detectChanges(); }); + describe('ngOnInit', () => { + beforeEach(() => { + spyOn(comp, 'resolveMenuSections').and.returnValue([]); + }); + + it('should call resolveMenuSections on init', () => { + router.events = observableOf(new NavigationEnd(0, '', '')); + comp.ngOnInit(); + expect(comp.resolveMenuSections).toHaveBeenCalledWith(route.root); + }) + }); + + describe('resolveMenuSections', () => { + let result: MenuSection[]; + + beforeEach(() => { + result = comp.resolveMenuSections(route.root); + }); + + it('should return the current route\'s menu sections', () => { + expect(result).toEqual([routeDataMenuSection, routeDataMenuChildSection]) + }); + }); + describe('toggle', () => { beforeEach(() => { spyOn(menuService, 'toggleMenu'); diff --git a/src/app/shared/menu/menu.component.ts b/src/app/shared/menu/menu.component.ts index 4e29ea0ee0..f351329fed 100644 --- a/src/app/shared/menu/menu.component.ts +++ b/src/app/shared/menu/menu.component.ts @@ -1,15 +1,14 @@ import { ChangeDetectionStrategy, Component, Injector, OnInit } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; -import { MenuService } from '../../shared/menu/menu.service'; -import { MenuID } from '../../shared/menu/initial-menus-state'; -import { MenuSection } from '../../shared/menu/menu.reducer'; -import { distinctUntilChanged, filter, first, map, switchMap, tap } from 'rxjs/operators'; +import { MenuService } from './menu.service'; +import { MenuID } from './initial-menus-state'; +import { MenuSection } from './menu.reducer'; +import { distinctUntilChanged, filter, first, map, tap } from 'rxjs/operators'; import { GenericConstructor } from '../../core/shared/generic-constructor'; import { hasNoValue, hasValue } from '../empty.util'; import { MenuSectionComponent } from './menu-section/menu-section.component'; import { getComponentForMenu } from './menu-section.decorator'; import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; -import { of as observableOf } from 'rxjs/internal/observable/of'; /** * A basic implementation of a MenuComponent diff --git a/src/app/shared/testing/menu-service.stub.ts b/src/app/shared/testing/menu-service.stub.ts index de71e3483d..0246aa39d1 100644 --- a/src/app/shared/testing/menu-service.stub.ts +++ b/src/app/shared/testing/menu-service.stub.ts @@ -59,6 +59,9 @@ export class MenuServiceStub { removeSection(): void { /***/ }; + resetSections(): void { /***/ + }; + isMenuVisible(id: MenuID): Observable { return observableOf(true) };