import { Clipboard } from '@angular/cdk/clipboard' import { ComponentFixture, TestBed } from '@angular/core/testing' import { Title } from '@angular/platform-browser' import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons' import { environment } from 'src/environments/environment' import { PageHeaderComponent } from './page-header.component' describe('PageHeaderComponent', () => { let component: PageHeaderComponent let fixture: ComponentFixture let titleService: Title let clipboard: Clipboard beforeEach(async () => { TestBed.configureTestingModule({ providers: [], imports: [NgxBootstrapIconsModule.pick(allIcons), PageHeaderComponent], }).compileComponents() titleService = TestBed.inject(Title) clipboard = TestBed.inject(Clipboard) fixture = TestBed.createComponent(PageHeaderComponent) component = fixture.componentInstance fixture.detectChanges() }) afterEach(() => { jest.useRealTimers() }) it('should display title + subtitle', () => { fixture.componentRef.setInput('title', 'Foo') fixture.componentRef.setInput('subTitle', 'Bar') fixture.detectChanges() expect(fixture.nativeElement.textContent).toContain('Foo') expect(fixture.nativeElement.textContent).toContain('Bar') }) it('should set html title', () => { const titleSpy = jest.spyOn(titleService, 'setTitle') fixture.componentRef.setInput('title', 'Foo Bar') fixture.detectChanges() expect(titleSpy).toHaveBeenCalledWith(`Foo Bar - ${environment.appTitle}`) }) it('should copy id to clipboard, reset after 3 seconds', () => { jest.useFakeTimers() fixture.componentRef.setInput('id', 42) jest.spyOn(clipboard, 'copy').mockReturnValue(true) component.copyID() expect(clipboard.copy).toHaveBeenCalledWith('42') expect(component.copied()).toBe(true) jest.advanceTimersByTime(3000) expect(component.copied()).toBe(false) }) })