// (C) Copyright 2015 Moodle Pty Ltd. // // 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. import { CUSTOM_ELEMENTS_SCHEMA, Type } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { NavController } from '@ionic/angular'; import { CoreSingletonClass } from '@app/classes/singletons-factory'; export interface ComponentTestMocks { // }; export interface PageTestMocks extends ComponentTestMocks { navController: NavController; } export function createMock(methods: string[] = [], properties: Record = {}): T { const mockObject = properties; for (const method of methods) { mockObject[method] = jest.fn(); } return mockObject as T; } export function mockSingleton( singletonClass: CoreSingletonClass, methods: string[] = [], properties: Record = {}, ): void { singletonClass.setInstance(createMock(methods, properties)); } export async function prepareComponentTest(component: Type, providers: unknown[] = []): Promise { TestBed.configureTestingModule({ declarations: [component], schemas: [CUSTOM_ELEMENTS_SCHEMA], providers, }); await TestBed.compileComponents(); return {}; } export async function preparePageTest(component: Type, providers: unknown[] = []): Promise { const mocks = { navController: createMock(['navigateRoot']), }; const componentTestMocks = await prepareComponentTest(component, [ ...providers, { provide: NavController, useValue: mocks.navController }, ]); return { ...componentTestMocks, ...mocks, }; } export function createComponent(component: Type): ComponentFixture { return TestBed.createComponent(component); }