import { fakeAsync, TestBed, tick } from '@angular/core/testing';
import { AppComponent } from './app.component';
import { NxWelcomeComponent } from './nx-welcome.component';<% if(useRouterTestingModule) { %>
import { RouterTestingModule } from '@angular/router/testing';<% } %>
import { Router<% if(!useRouterTestingModule) { %>, RouterModule<% } %> } from '@angular/router';

describe('AppComponent', () => {
  beforeEach(async () => {
    await TestBed.configureTestingModule({
      imports: [<% if(useRouterTestingModule) { %>
        RouterTestingModule.withRoutes([
          { path: '', component: NxWelcomeComponent },
        ]),<% } %><% if(!useRouterTestingModule) { %>
        RouterModule.forRoot([
          { path: '', component: NxWelcomeComponent },
        ]),<% } %><% if (standalone) { %>
        AppComponent,
        NxWelcomeComponent,<% } %>
      ],<% if (!standalone) { %>
      declarations: [AppComponent, NxWelcomeComponent],<% } %>
    }).compileComponents();
  });

  it('should create the app', () => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.componentInstance;
    expect(app).toBeTruthy();
  });

  it(`should have as title '<%= appName %>'`, () => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.componentInstance;
    expect(app.title).toEqual('<%= appName %>');
  });

  it('should render title', fakeAsync(() => {
    const fixture = TestBed.createComponent(AppComponent);
    const router = TestBed.inject(Router);
    fixture.ngZone?.run(() => router.navigate(['']));
    tick();
    fixture.detectChanges();
    const compiled = fixture.nativeElement as HTMLElement;
    expect(compiled.querySelector('h1')?.textContent).toContain(
      'Welcome <%= appName %>'
    );
  }));
});
