import { Location } from '@angular/common';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import {
  ComponentFixture,
  TestBed,
  waitForAsync,
} from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { TranslateModule } from '@ngx-translate/core';
import { of } from 'rxjs';

import { VarDirective } from '../../shared/utils/var.directive';
import { EmailRequestCopyComponent } from './email-request-copy.component';
import { RequestCopyEmail } from './request-copy-email.model';

describe('EmailRequestCopyComponent', () => {
  let component: EmailRequestCopyComponent;
  let fixture: ComponentFixture<EmailRequestCopyComponent>;

  let location: Location;

  beforeEach(waitForAsync(() => {
    location = jasmine.createSpyObj('location', ['back']);

    TestBed.configureTestingModule({
      imports: [TranslateModule.forRoot(), RouterTestingModule.withRoutes([]), EmailRequestCopyComponent, VarDirective],
      providers: [
        { provide: Location, useValue: location },
      ],
      schemas: [NO_ERRORS_SCHEMA],
    }).compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(EmailRequestCopyComponent);
    component = fixture.componentInstance;
    // Set validAccessPeriods$ before detectChanges calls ngOnInit
    component.validAccessPeriods$ = of(['FOREVER']);
    fixture.detectChanges();
  });

  it('return should navigate to the previous page', () => {
    component.return();
    expect(location.back).toHaveBeenCalled();
  });

  it('submit should emit an email object', () => {
    spyOn(component.send, 'emit').and.stub();
    component.subject = 'test-subject';
    component.message = 'test-message';
    component.submit();
    expect(component.send.emit).toHaveBeenCalledWith(new RequestCopyEmail('test-subject', 'test-message'));
  });
});