{"version":3,"file":"uofx-core-testing.mjs","sources":["../../testing/testbed/testbed.global.ts","../../testing/spy/auth-guard.service.spy.ts","../../testing/spy/basic.spy.ts","../../testing/spy/i18n-loader.service.spy.ts","../../testing/spy/i18n.service.spy.ts","../../testing/spy/router.spy.ts","../../testing/testbed/testbed.module.ts","../../testing/testbed/testbed.spy.ts","../../testing/testbed/testbed.ts","../../testing/index.ts","../../testing/uofx-core-testing.ts"],"sourcesContent":["import { TestModuleMetadata } from \"@angular/core/testing\";\r\n\r\n// @dynamic\r\nexport class UofxTestBedGlobal {\r\n  /** Attach providers list to test module */\r\n  static appendProviders(moduleDef: TestModuleMetadata, providers: Array<any>) {\r\n    moduleDef = this.initModule(moduleDef);\r\n    providers.forEach(\r\n      (item: any) => {\r\n        if (this.includeProvide(moduleDef, item.provide)) {\r\n          return;\r\n        }\r\n        moduleDef.providers.push(item);\r\n      }\r\n    );\r\n  }\r\n\r\n  /** 檢查 provider 是否已存在 */\r\n  private static includeProvide(moduleDef: TestModuleMetadata, provide: any): boolean {\r\n    const controller = moduleDef.providers.map(p => p.provide).includes(provide);\r\n    return controller ? true : false;\r\n  }\r\n\r\n  /** 尋找已存在 providers */\r\n  static findProviders(moduleDef: TestModuleMetadata, provides: Array<any>): Array<any> {\r\n    return moduleDef.providers.filter(p => provides.includes(p.provide));\r\n  }\r\n\r\n\r\n  /** Attach imports list to test module */\r\n  static appendImports(moduleDef, imports: Array<unknown>) {\r\n    moduleDef = this.initModule(moduleDef);\r\n    imports.forEach(\r\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n      (item: any) => {\r\n        if (this.includeImport(moduleDef, item.imports)) {\r\n          return;\r\n        }\r\n        moduleDef.imports.push(item);\r\n      }\r\n    );\r\n  }\r\n\r\n  /** Check if import module exsit. */\r\n  private static includeImport(moduleDef, imports) {\r\n    const module = moduleDef.imports.includes(imports);\r\n    return module ? true : false;\r\n  }\r\n\r\n\r\n\r\n  public static initModule(moduleDef: TestModuleMetadata) {\r\n    if (!moduleDef) moduleDef = {};\r\n    if (!moduleDef.schemas) moduleDef.schemas = [];\r\n    if (!moduleDef.imports) moduleDef.imports = [];\r\n    if (!moduleDef.providers) moduleDef.providers = [];\r\n\r\n    return moduleDef;\r\n  }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\nimport { TestModuleMetadata } from '@angular/core/testing';\r\nimport { UofxTestBedGlobal } from '../testbed/testbed.global';\r\nimport { UofxAuthGuardService } from '@uofx/core';\r\n\r\n// useValue 的方式注入 mock object 但屬性無法改變預設值的問題\r\n// https://stackoverflow.com/questions/52409133/angular5-testbed-usevalue-seems-not-injecting-same-object-instance\r\nexport const _uofxAuthGuardServiceSpy = {\r\n  loadCorpFuncs: jasmine.createSpy('UofxCore_UofxAuthGuardService_loadCorpFuncs'),\r\n  clearCorpFuncs: jasmine.createSpy('UofxCore_UofxAuthGuardService_clearCorpFuncs'),\r\n  get corpFuncs() { return []; },\r\n  set corpFuncs(value) { },\r\n  get isManager(): boolean { return null; },\r\n  get isCorpManager(): boolean { return null; }\r\n};\r\n\r\nexport const setUp_Uofx_AuthGuardServiceTestModule = (moduleDef: TestModuleMetadata) => {\r\n  const providers = [\r\n    { provide: UofxAuthGuardService, useFactory: () => _uofxAuthGuardServiceSpy },\r\n  ];\r\n\r\n  UofxTestBedGlobal.appendProviders(moduleDef, providers);\r\n};\r\n","import { HttpClientTestingModule } from '@angular/common/http/testing';\r\nimport { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\r\nimport { TestBed, TestModuleMetadata, waitForAsync } from '@angular/core/testing';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\nexport const setUpBasicTestModule = (moduleDef: TestModuleMetadata) => {\r\n  moduleDef.schemas.push(CUSTOM_ELEMENTS_SCHEMA);\r\n\r\n  moduleDef.imports.push(HttpClientTestingModule);\r\n  moduleDef.imports.push(BrowserAnimationsModule);\r\n  moduleDef.imports.push(FormsModule);\r\n  moduleDef.imports.push(ReactiveFormsModule);\r\n  moduleDef.imports.push(TranslateModule.forRoot());\r\n};\r\n\r\nexport const configureTestingModule = (moduleDef: TestModuleMetadata) => {\r\n  beforeEach(() => {\r\n    TestBed.configureTestingModule(moduleDef);\r\n  });\r\n};\r\n\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\n\r\nimport { TestModuleMetadata } from '@angular/core/testing';\r\nimport { I18nLoader } from '@uofx/core';\r\n\r\nimport { UofxTestBedGlobal } from '../testbed/testbed.global';\r\n\r\n// useValue 的方式注入 mock object 但屬性無法改變預設值的問題\r\n// https://stackoverflow.com/questions/52409133/angular5-testbed-usevalue-seems-not-injecting-same-object-instance\r\nexport const _i18nLoaderSpy = {\r\n  loadTranslationFromApi: jasmine.createSpy('UofxCore_I18nLoader_loadTranslationFromApi').and.returnValue(Promise.resolve(true)),\r\n  loadTranslationFromPlugin: jasmine.createSpy('UofxCore_I18nLoader_loadTranslationFromPlugin').and.returnValue(Promise.resolve(true)),\r\n  reloadTranslations: jasmine.createSpy('UofxCore_I18nLoader_reloadTranslations').and.returnValue(Promise.resolve(true))\r\n};\r\n\r\nexport const setUp_I18nLoaderTestModule = (moduleDef: TestModuleMetadata) => {\r\n  const providers = [\r\n    { provide: I18nLoader, useFactory: () => _i18nLoaderSpy },\r\n  ];\r\n\r\n  UofxTestBedGlobal.appendProviders(moduleDef, providers);\r\n};\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\n\r\nimport { TestModuleMetadata } from '@angular/core/testing';\r\nimport { UofxI18NService } from '@uofx/core';\r\n\r\nimport { UofxTestBedGlobal } from '../testbed/testbed.global';\r\n\r\n// useValue 的方式注入 mock object 但屬性無法改變預設值的問題\r\n// https://stackoverflow.com/questions/52409133/angular5-testbed-usevalue-seems-not-injecting-same-object-instance\r\nexport const _uofxI18NServiceSpy = {\r\n  trans: jasmine.createSpy('UofxCore_UofxI18NService_trans'),\r\n  switchLang: jasmine.createSpy('UofxCore_UofxI18NService_switchLang'),\r\n  getBrowserLang: jasmine.createSpy('UofxCore_UofxI18NService_getBrowserLang'),\r\n\r\n  get hostUrl() { return null; },\r\n  set hostUrl(value) { },\r\n  get langVersion() { return null; },\r\n  set langVersion(value) { },\r\n  get isApp() { return false; },\r\n  get isI18nProdApi() { return true; },\r\n  get defaultLang() { return null; },\r\n  get currentLang() { return null; },\r\n  set currentLang(value) { },\r\n  get onLangChange() { return null; }\r\n};\r\n\r\nexport const setUp_Uofx_I18NServiceTestModule = (moduleDef: TestModuleMetadata) => {\r\n  const providers = [\r\n    { provide: UofxI18NService, useFactory: () => _uofxI18NServiceSpy },\r\n  ];\r\n\r\n  UofxTestBedGlobal.appendProviders(moduleDef, providers);\r\n};\r\n","/* eslint-disable @typescript-eslint/no-empty-function */\r\nimport { TestModuleMetadata } from '@angular/core/testing';\r\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { UofxTestBedGlobal } from '../testbed/testbed.global';\r\n\r\nexport const _activatedRouteSpy = {\r\n  params: new BehaviorSubject({}),\r\n  queryParams: new BehaviorSubject({}),\r\n  data: new BehaviorSubject({}),\r\n  paramMap: new BehaviorSubject({}),\r\n  routeConfig: { path: '' },\r\n  snapshot: {\r\n    paramMap: {\r\n      get: jasmine.createSpy('UofxCore_ActivatedRouteSpy_snapshot_paramMap_get')\r\n    },\r\n    queryParamMap: {\r\n      get: jasmine.createSpy('UofxCore_ActivatedRouteSpy_snapshot_queryParamMap_get')\r\n    },\r\n    routeConfig: {\r\n      path: ''\r\n    }\r\n  },\r\n};\r\n\r\nexport const _routerSpy = {\r\n  navigate: jasmine.createSpy('UofxCore_Router_navigate'),\r\n  navigateByUrl: jasmine.createSpy('UofxCore_Router_navigateByUrl'),\r\n  createUrlTree: jasmine.createSpy('UofxCore_Router_createUrlTree'),\r\n  serializeUrl: jasmine.createSpy('UofxCore_Router_serializeUrl'),\r\n  getCurrentNavigation: jasmine.createSpy('UofxCore_Router_getCurrentNavigation'),\r\n  get url() { return ''; },\r\n  set url(value) { },\r\n  get onSameUrlNavigation() { return ''; },\r\n  set onSameUrlNavigation(value) { },\r\n  events: new BehaviorSubject({}),\r\n  lastSuccessfulNavigation: jasmine.createSpy('UofxCore_Router_getCurrentNavigation')\r\n};\r\n\r\nexport const setUpRouterTestModule = (moduleDef: TestModuleMetadata) => {\r\n  const providers = [\r\n    { provide: Router, useFactory: () => _routerSpy },\r\n    { provide: ActivatedRoute, useValue: _activatedRouteSpy }\r\n  ];\r\n\r\n  if (!moduleDef.imports) moduleDef.imports = [];\r\n  moduleDef.imports.push(RouterModule.forRoot([]));\r\n\r\n  UofxTestBedGlobal.appendProviders(moduleDef, providers);\r\n};\r\n","import { TestBed, TestModuleMetadata } from '@angular/core/testing';\r\n\r\nimport { setUp_Uofx_AuthGuardServiceTestModule } from '../spy/auth-guard.service.spy';\r\nimport { configureTestingModule, setUpBasicTestModule } from '../spy/basic.spy';\r\nimport { setUp_I18nLoaderTestModule } from '../spy/i18n-loader.service.spy';\r\nimport { setUp_Uofx_I18NServiceTestModule } from '../spy/i18n.service.spy';\r\nimport { setUpRouterTestModule } from '../spy/router.spy';\r\nimport { UofxTestBedGlobal } from './testbed.global';\r\n\r\nexport class UofxTestBedBasicModule {\r\n  private _moduleDef: TestModuleMetadata;\r\n\r\n  public getModuleDef() {\r\n    return this._moduleDef;\r\n  }\r\n\r\n  public setModuleDef(moduleDef: TestModuleMetadata) {\r\n    this._moduleDef = UofxTestBedGlobal.initModule(moduleDef);\r\n  }\r\n\r\n  /** Initialize Testing Module. */\r\n  public init(moduleDef: TestModuleMetadata) {\r\n    this.setModuleDef(moduleDef);\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Set ***HttpClientTestingModule***, ***BrowserAnimationsModule***, ***FormsModule***,\r\n   * ***ReactiveFormsModule*** and ***TranslateModule.forRoot()***.\r\n   */\r\n  setUpBasic = this.setup(setUpBasicTestModule);\r\n\r\n  /** Set Angular RouterModule and provide Router and Router+ActivatedRoute spy. */\r\n  setUpRouter = this.setup(setUpRouterTestModule);\r\n\r\n  /** Execute TestBed.configureTestingModule(). */\r\n  configureTestingModule = this.setup(configureTestingModule);\r\n\r\n  overrideProviders(component: any, providers: Array<any>) {\r\n    beforeEach(() => {\r\n      const overrideProviders = UofxTestBedGlobal.findProviders(this._moduleDef, providers);\r\n      if (overrideProviders?.length > 0)\r\n        TestBed.overrideComponent(component, { set: { providers: overrideProviders } });\r\n    });\r\n  }\r\n\r\n  setup(func: (def: TestModuleMetadata) => void) {\r\n    return () => {\r\n      func(this._moduleDef);\r\n      return this;\r\n    };\r\n  }\r\n}\r\n\r\nexport class UofxTestBedCoreModule extends UofxTestBedBasicModule {\r\n  public setUp_Uofx_AuthGuardService = this.setup(setUp_Uofx_AuthGuardServiceTestModule);\r\n  public setUp_I18nLoader = this.setup(setUp_I18nLoaderTestModule);\r\n  public setUp_Uofx_I18NService = this.setup(setUp_Uofx_I18NServiceTestModule);\r\n}\r\n\r\n","import { _uofxAuthGuardServiceSpy } from '../spy/auth-guard.service.spy';\r\nimport { _i18nLoaderSpy } from '../spy/i18n-loader.service.spy';\r\nimport { _uofxI18NServiceSpy } from '../spy/i18n.service.spy';\r\nimport { _activatedRouteSpy, _routerSpy } from '../spy/router.spy';\r\n\r\nexport class UofxTestBedBasicSpy {\r\n  /** Get Angular ActivatedRoute. */\r\n  public get ActivatedRoute() { return _activatedRouteSpy; }\r\n\r\n  /** Get Angular Router. */\r\n  public get Router() { return _routerSpy; }\r\n}\r\n\r\nexport class UofxTestBedCoreSpy extends UofxTestBedBasicSpy {\r\n  public get Uofx_AuthGuardService() { return _uofxAuthGuardServiceSpy; }\r\n  /** Get Uofx I18nLoader. */\r\n  public get I18nLoader() { return _i18nLoaderSpy; }\r\n  /** Get Uofx UofxI18NService. */\r\n  public get Uofx_I18NService() { return _uofxI18NServiceSpy; }\r\n}\r\n\r\nexport function spyDetectChanges(instance: any) {\r\n  return spyOn(instance.cdr, 'detectChanges');\r\n}\r\n","import { HttpInterceptor } from '@angular/common/http';\r\nimport { Type } from '@angular/core';\r\nimport { TestBed } from '@angular/core/testing';\r\nimport { UofxTestBedBasicModule } from './testbed.module';\r\nimport { UofxTestBedBasicSpy } from './testbed.spy';\r\n// from: https://github.com/angular/angular/issues/12409\r\n\r\n/**\r\n * get service instance\r\n */\r\nconst getService = <T>(type: Type<T>): T => <T>TestBed.inject(type);\r\n\r\n/**\r\n * @publicApi\r\n * Exclusive to UOF unit test tools.\r\n *\r\n * Example:\r\n * ```\r\n * const moduleDef = {\r\n *   declarations: [\r\n *     MyComponent\r\n *   ]\r\n * }\r\n * UofxTestBed.Module.init(moduleDef)\r\n *   .setUpBasic()\r\n *   .configureTestingModule();\r\n *\r\n * beforeEach(() => {\r\n *   fixture = TestBed.createComponent(MyComponent);\r\n *   comp = fixture.componentInstance;\r\n * });\r\n * ```\r\n */\r\n// @dynamic\r\nexport abstract class UofxTestBed {\r\n  protected static _spy = new UofxTestBedBasicSpy();\r\n  protected static _module = new UofxTestBedBasicModule();\r\n\r\n  public static get Spy(): UofxTestBedBasicSpy {\r\n    return this._spy;\r\n  }\r\n\r\n  public static get Module(): UofxTestBedBasicModule {\r\n    return this._module;\r\n  }\r\n\r\n  public static overrideProviders(component: any, providers: Array<any>) {\r\n    this._module.overrideProviders(component, providers);\r\n  }\r\n\r\n  /**\r\n   * Get service instance or spy.\r\n   *\r\n   * Example:\r\n   * ```\r\n   * routerSpy = UofxTestBed.getService(Router)\r\n   * activatedRouteSpy = UofxTestBed.getService(ActivatedRoute)\r\n   * ```\r\n   */\r\n  public static getService<T>(type: Type<T>) {\r\n    return getService<T>(type);\r\n  }\r\n\r\n  // https://www.moritz-benzenhoefer.com/2018/09/angular-6-get-http-interceptor-instance-in-test/\r\n  /**\r\n   * Get http interceptor instance\r\n   *\r\n   * Example:\r\n   * ```\r\n   * const interceptor = UofxTestBed.getInterceptorInstance<ErrorInterceptor>(\r\n   *  TestBed.get(HTTP_INTERCEPTORS),\r\n   *  ErrorInterceptor\r\n   * ) as ErrorInterceptor\r\n   * ```\r\n   */\r\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n  public static getInterceptorInstance<T extends HttpInterceptor>(\r\n    interceptors: Array<HttpInterceptor>, type\r\n  ): HttpInterceptor {\r\n    let resultInterceptor: HttpInterceptor = null;\r\n    interceptors.forEach((interceptor: HttpInterceptor) => {\r\n      if (interceptor instanceof type) {\r\n        resultInterceptor = interceptor;\r\n      }\r\n    });\r\n    return resultInterceptor;\r\n  }\r\n\r\n  /**\r\n   * Rest arguments spy.\r\n   *\r\n   * Example:\r\n   * ```\r\n   * let spy1 = spyOn(comp, 'method1');\r\n   * let spy2 = spyOn(comp, 'method2');\r\n   * UofxTestBed.resetSpyCalls(spy1, spy2);\r\n   * ```\r\n   */\r\n  public static resetSpyCalls(...objects: Array<unknown>) {\r\n    if (!objects) return;\r\n\r\n    objects.forEach(item => {\r\n      this.executeResetSpyCalls(item);\r\n    });\r\n  }\r\n\r\n  private static executeResetSpyCalls(spyObj) {\r\n    if (!spyObj) return;\r\n\r\n    if (spyObj.calls && spyObj.calls.reset) {\r\n      // calls 有東西，且呼叫次數大於 0，也有 reset 函式\r\n      if (spyObj.calls.count() > 0) spyObj.calls.reset();\r\n    } else {\r\n      Object.keys(spyObj).forEach(property => {\r\n        if (spyObj[property] && spyObj[property].calls && spyObj[property].calls.reset) {\r\n          spyObj[property].calls.reset();\r\n        } else if (spyObj[property]) {\r\n          this.executeResetSpyCalls(spyObj[property]);\r\n        }\r\n      });\r\n    }\r\n  }\r\n}\r\n\r\n","/// <reference types=\"jasmine\" />\r\n\r\nexport * from './testbed/testbed.global';\r\nexport * from './testbed/testbed.module';\r\nexport * from './testbed/testbed.spy';\r\nexport * from './testbed/testbed';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}