{"version":3,"file":"toolbox-testing.mjs","sources":["../../../projects/toolbox/testing/test-helpers.ts","../../../projects/toolbox/testing/test-resolver.ts","../../../projects/toolbox/testing/toolbox-testing.ts"],"sourcesContent":["import { DebugElement } from \"@angular/core\";\r\nimport { ComponentFixture } from \"@angular/core/testing\";\r\nimport { By } from \"@angular/platform-browser\";\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\ndeclare let expect: any;\r\ndeclare let fail: any;\r\n\r\nexport class TbxDomHelper<T> {\r\n  private readonly internalFixture: ComponentFixture<T>;\r\n\r\n  public constructor( fixture: ComponentFixture<T> ) { this.internalFixture = fixture; }\r\n\r\n  /** Gets the component fixture wrapped in this instance. */\r\n  public get fixture(): ComponentFixture<T> { return this.internalFixture; }\r\n\r\n  /** Gets the number of CSS classes found in the component fixture. */\r\n  public get cssClassesLength(): number { return this.cssClasses.length; }\r\n\r\n  /** Gets all CSS classes found in the component fixture. */\r\n  public get cssClasses(): string[] {\r\n    return this.fixture.debugElement.nativeElement.className.split( \" \" );\r\n  }\r\n\r\n  /**\r\n   * Searches for an element in the fixture using {@link By.css}.\r\n   * @param selector The selector to search.\r\n   * @return The {@DebugElement} found with the given selector.\r\n   */\r\n  public queryDebugElement( selector: string ): DebugElement {\r\n    return this.fixture.debugElement.query( By.css( selector ) );\r\n  }\r\n\r\n  public queryDebugElements( selector: string ): DebugElement[] {\r\n    return this.fixture.debugElement.queryAll( By.css( selector ) );\r\n  }\r\n\r\n  public hasElement( selector: string, failedMessage?: string ): void {\r\n    expect( !!this.queryDebugElement( selector ) ).toBe( true, failedMessage ?? \"\" );\r\n  }\r\n\r\n  public hasNoElement( selector: string, failedMessage?: string ): void {\r\n    expect( !!this.queryDebugElement( selector ) ).toBe( false, failedMessage ?? \"\" );\r\n  }\r\n\r\n  // Check if there are content:\r\n  public hasContent( content: string, failedMessage?: string ): void {\r\n    expect( this.fixture.debugElement.nativeElement.textContent )\r\n      .toContain( content, failedMessage ?? \"\" );\r\n  }\r\n\r\n  public hasNoContent( content: string, failedMessage?: string ): void {\r\n    expect( this.fixture.debugElement.nativeElement.textContent )\r\n      .not.toContain( content, failedMessage ?? \"\" );\r\n  }\r\n\r\n  // Check if there are css classes:\r\n  public hasCssClass( cssClass: string, failedMessage?: string ): void {\r\n    expect( this.cssClasses.indexOf( cssClass ) > -1 )\r\n      .toBe( true, failedMessage ?? \"\" );\r\n  }\r\n\r\n  public hasNoCssClass( cssClass: string, failedMessage?: string ): void {\r\n    expect( this.cssClasses.indexOf( cssClass ) === -1 )\r\n      .toBe( true, failedMessage ?? \"\" );\r\n  }\r\n\r\n  /**\r\n   * Finds the button in the fixture that has the given text as content or the\r\n   * \"title\" attribute and clicks it if found.\r\n   * @param textOrTitle\r\n   */\r\n  public clickButton( textOrTitle: string ): void {\r\n    const buttons = this.queryDebugElements( \"button\" );\r\n\r\n    const button = buttons.find( btn => {\r\n      const el = btn.nativeElement;\r\n\r\n      return el.type === textOrTitle ||\r\n        el.title === textOrTitle ||\r\n        el.textContent.indexOf( textOrTitle ) > -1;\r\n    }\r\n    );\r\n\r\n    if( !button ) {\r\n      fail( `Button with content or title ${textOrTitle} not found.` );\r\n    }\r\n    else {\r\n      button.nativeElement.click();\r\n    }\r\n  }\r\n\r\n  public async fixtureHasContent( text: string, detectChanges = true ): Promise<void> {\r\n\r\n    if( detectChanges ) {\r\n      this.internalFixture.detectChanges();\r\n      await this.internalFixture.whenStable();\r\n      this.internalFixture.detectChanges();\r\n    }\r\n\r\n    const content = this.internalFixture.debugElement.nativeElement.textContent;\r\n\r\n    expect( content ).toContain( text );\r\n  }\r\n\r\n  public async validateTableRowCount(\r\n    count: number, queryAllSelector = \"tbody tr\", detectChanges = true ) {\r\n\r\n    if( detectChanges ) {\r\n      this.internalFixture.detectChanges();\r\n      await this.internalFixture.whenStable();\r\n      this.internalFixture.detectChanges();\r\n    }\r\n\r\n    const compiled = this.internalFixture.debugElement.nativeElement;\r\n    const rows = compiled.querySelectorAll( queryAllSelector );\r\n\r\n    expect( rows.length ).toEqual( count );\r\n  };\r\n\r\n  // STATIC\r\n\r\n  public static queryDebugElement( de: DebugElement, selector: string ): DebugElement {\r\n    return de.query( By.css( selector ) );\r\n  }\r\n\r\n  public static queryDebugElements( de: DebugElement, selector: string ): DebugElement[] {\r\n    return de.queryAll( By.css( selector ) );\r\n  }\r\n\r\n  public static hasElement(\r\n    de: DebugElement, selector: string, failedMessage?: string ) {\r\n    expect( !!TbxDomHelper.queryDebugElement( de, selector ) )\r\n      .toBe( true, failedMessage ?? \"\" );\r\n  }\r\n\r\n  public static hasNoElement(\r\n    de: DebugElement, selector: string, failedMessage?: string ): void {\r\n    expect( !!TbxDomHelper.queryDebugElement( de, selector ) )\r\n      .toBe( false, failedMessage ?? \"\" );\r\n  }\r\n\r\n  // Check if there are content:\r\n  public static hasContent(\r\n    el: DebugElement | string, content: string, failedMessage?: string ): void {\r\n    if( typeof el === \"string\" ) {\r\n      expect( el ).toContain( content, failedMessage ?? \"\" );\r\n    }\r\n    else {\r\n      expect( el.nativeElement.textContent ).toContain( content, failedMessage ?? \"\" );\r\n    }\r\n  }\r\n\r\n  public static hasNoContent(\r\n    el: DebugElement | string, content: string, failedMessage?: string ): void {\r\n    if( typeof el === \"string\" ) {\r\n      expect( el ).not.toContain( content, failedMessage ?? \"\" );\r\n    }\r\n    else {\r\n      expect( el.nativeElement.textContent )\r\n        .not.toContain( content, failedMessage ?? \"\" );\r\n    }\r\n  }\r\n\r\n  public static hasCssClass(\r\n    el: DebugElement, cssClass: string, failedMessage?: string ): void {\r\n    expect( TbxDomHelper.getCssClasses( el ).indexOf( cssClass ) > -1 )\r\n      .toBe( true, failedMessage ?? \"\" );\r\n  }\r\n\r\n  public static hasNoCssClass(\r\n    el: DebugElement, cssClass: string, failedMessage?: string ): void {\r\n    expect( TbxDomHelper.getCssClasses( el ).indexOf( cssClass ) === -1 )\r\n      .toBe( true, failedMessage ?? \"\" );\r\n  }\r\n\r\n  public static getCssClassLength( de: DebugElement ): number {\r\n    return TbxDomHelper.getCssClasses( de ).length;\r\n  }\r\n\r\n  public static getCssClasses( de: DebugElement ): string[] {\r\n    return de.nativeElement.className.split( \" \" );\r\n  }\r\n\r\n  public static async fixtureHasContent<T>(\r\n    fixture: ComponentFixture<T>, text: string, detectChanges = true ): Promise<void> {\r\n\r\n    if( detectChanges ) {\r\n      fixture.detectChanges();\r\n      await fixture.whenStable();\r\n      fixture.detectChanges();\r\n    }\r\n\r\n    const content = fixture.debugElement.nativeElement.textContent;\r\n\r\n    expect( content ).toContain( text );\r\n  }\r\n\r\n  public static async validateTableRowCount<T>(\r\n    fixture: ComponentFixture<T>,\r\n    count: number,\r\n    queryAllSelector = \"tbody tr\",\r\n    detectChanges = true\r\n  ) {\r\n    if( detectChanges ) {\r\n      fixture.detectChanges();\r\n      await fixture.whenStable();\r\n      fixture.detectChanges();\r\n    }\r\n\r\n    const compiled = fixture.debugElement.nativeElement;\r\n    const rows = compiled.querySelectorAll( queryAllSelector );\r\n\r\n    expect( rows.length ).toEqual( count );\r\n  };\r\n}\r\n","import { TestBed } from \"@angular/core/testing\";\nimport { ActivatedRouteSnapshot, RedirectCommand, ResolveFn, RouterStateSnapshot } from \"@angular/router\";\nimport { Observable } from \"rxjs\";\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ndeclare let expect: any;\ndeclare let fail: any;\n\nexport const validateResult = <T>(\n  resolver: ResolveFn<T>, routeSnapshot: ActivatedRouteSnapshot, expected: any ) => {\n\n  const result = TestBed.runInInjectionContext( () =>\n    resolver( routeSnapshot, {} as RouterStateSnapshot ) );\n\n  if( result instanceof Observable ) {\n    result.subscribe( data => expect( data ).toEqual( expected ) );\n  }\n  else {\n    fail( \"Expected the result to be of type Observable\" );\n  }\n};\n\nexport const validateError = <T>(\n  resolver: ResolveFn<T>, routeSnapshot: ActivatedRouteSnapshot, routeUrl: string ) => {\n\n  const result = TestBed.runInInjectionContext( () =>\n    resolver( routeSnapshot, {} as RouterStateSnapshot ) );\n\n  if( result instanceof Observable ) {\n    result.subscribe( data => {\n      void expect( data ).toBeInstanceOf( RedirectCommand );\n\n      if( data instanceof RedirectCommand ) {\n        void expect( data.redirectTo.toString() ).toEqual( routeUrl );\n      }\n    } );\n  }\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}