Merge remote-tracking branch 'origin/main' into more-eslint

This commit is contained in:
Yury Bondarenko
2023-12-12 18:32:22 +01:00
447 changed files with 15918 additions and 5088 deletions

View File

@@ -1,5 +1,7 @@
// eslint-disable-next-line max-classes-per-file
import {
ChangeDetectionStrategy,
Component,
Injector,
NO_ERRORS_SCHEMA,
} from '@angular/core';
@@ -11,32 +13,65 @@ import {
waitForAsync,
} from '@angular/core/testing';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import {
ActivatedRoute,
Router,
} from '@angular/router';
import { ActivatedRoute } from '@angular/router';
import { RouterTestingModule } from '@angular/router/testing';
import {
Store,
StoreModule,
} from '@ngrx/store';
import {
MockStore,
provideMockStore,
} from '@ngrx/store/testing';
import { TranslateModule } from '@ngx-translate/core';
import { of as observableOf } from 'rxjs';
import {
BehaviorSubject,
of as observableOf,
} from 'rxjs';
import {
AppState,
storeModuleConfig,
} from '../../app.reducer';
import { authReducer } from '../../core/auth/auth.reducer';
import { AuthorizationDataService } from '../../core/data/feature-authorization/authorization-data.service';
import { Item } from '../../core/shared/item.model';
import { getMockThemeService } from '../mocks/theme-service.mock';
import { createSuccessfulRemoteDataObject } from '../remote-data.utils';
import { MenuServiceStub } from '../testing/menu-service.stub';
import { ThemeService } from '../theme-support/theme.service';
import { MenuComponent } from './menu.component';
import { MenuService } from './menu.service';
import { MenuID } from './menu-id.model';
import { LinkMenuItemModel } from './menu-item/models/link.model';
import { MenuItemType } from './menu-item-type.model';
import { rendersSectionForMenu } from './menu-section.decorator';
import { MenuSection } from './menu-section.model';
const mockMenuID = 'mock-menuID' as MenuID;
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: '',
template: '',
})
@rendersSectionForMenu(mockMenuID, true)
class TestExpandableMenuComponent {
}
@Component({
// eslint-disable-next-line @angular-eslint/component-selector
selector: '',
template: '',
})
@rendersSectionForMenu(mockMenuID, false)
class TestMenuComponent {
}
describe('MenuComponent', () => {
let comp: MenuComponent;
let fixture: ComponentFixture<MenuComponent>;
let menuService: MenuService;
let router: any;
const mockMenuID = 'mock-menuID' as MenuID;
let store: MockStore;
const mockStatisticSection = { 'id': 'statistics_site', 'active': true, 'visible': true, 'index': 2, 'type': 'statistics', 'model': { 'type': 1, 'text': 'menu.section.statistics', 'link': 'statistics' } };
@@ -62,21 +97,55 @@ describe('MenuComponent', () => {
children: [],
};
const initialState = {
menus: {
[mockMenuID]: {
collapsed: true,
id: mockMenuID,
previewCollapsed: true,
sectionToSubsectionIndex: {
section1: [],
},
sections: {
section1: {
id: 'section1',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'test',
link: '/test',
} as LinkMenuItemModel,
},
},
visible: true,
},
},
};
beforeEach(waitForAsync(() => {
authorizationService = jasmine.createSpyObj('authorizationService', {
isAuthorized: observableOf(false),
});
TestBed.configureTestingModule({
imports: [TranslateModule.forRoot(), NoopAnimationsModule, RouterTestingModule],
void TestBed.configureTestingModule({
imports: [
TranslateModule.forRoot(),
NoopAnimationsModule,
RouterTestingModule,
StoreModule.forRoot(authReducer, storeModuleConfig),
],
declarations: [MenuComponent],
providers: [
Injector,
{ provide: ThemeService, useValue: getMockThemeService() },
{ provide: MenuService, useClass: MenuServiceStub },
MenuService,
provideMockStore({ initialState }),
{ provide: AuthorizationDataService, useValue: authorizationService },
{ provide: ActivatedRoute, useValue: routeStub },
TestExpandableMenuComponent,
TestMenuComponent,
],
schemas: [NO_ERRORS_SCHEMA],
}).overrideComponent(MenuComponent, {
@@ -88,13 +157,62 @@ describe('MenuComponent', () => {
fixture = TestBed.createComponent(MenuComponent);
comp = fixture.componentInstance; // SearchPageComponent test instance
comp.menuID = mockMenuID;
menuService = (comp as any).menuService;
router = TestBed.inject(Router);
menuService = TestBed.inject(MenuService);
store = TestBed.inject(Store) as MockStore<AppState>;
spyOn(comp as any, 'getSectionDataInjector').and.returnValue(MenuSection);
spyOn(comp as any, 'getSectionComponent').and.returnValue(observableOf({}));
fixture.detectChanges();
});
describe('ngOnInit', () => {
it('should trigger the section observable again when a new sub section has been added', () => {
spyOn(comp.sectionMap$, 'next').and.callThrough();
const hasSubSections = new BehaviorSubject(false);
spyOn(menuService, 'hasSubSections').and.returnValue(hasSubSections.asObservable());
spyOn(store, 'dispatch').and.callThrough();
store.setState({
menus: {
[mockMenuID]: {
collapsed: true,
id: mockMenuID,
previewCollapsed: true,
sectionToSubsectionIndex: {
section1: ['test'],
},
sections: {
section1: {
id: 'section1',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'test',
link: '/test',
} as LinkMenuItemModel,
},
test: {
id: 'test',
parentID: 'section1',
active: false,
visible: true,
model: {
type: MenuItemType.LINK,
text: 'test',
link: '/test',
} as LinkMenuItemModel,
},
},
visible: true,
},
},
});
expect(menuService.hasSubSections).toHaveBeenCalled();
hasSubSections.next(true);
expect(comp.sectionMap$.next).toHaveBeenCalled();
});
});
describe('toggle', () => {
beforeEach(() => {
spyOn(menuService, 'toggleMenu');