import { getElementFromFixture, mock } from '@alfa-client/test-utils';
import { EventEmitter } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
import { SearchResultItemComponent } from './search-result-item.component';

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

  beforeEach(async () => {
    await TestBed.configureTestingModule({
      imports: [SearchResultItemComponent],
    }).compileComponents();

    fixture = TestBed.createComponent(SearchResultItemComponent);
    component = fixture.componentInstance;
    component.title = 'Test';
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });

  describe('itemClicked', () => {
    it('should emit event', () => {
      component.itemClicked = <any>mock(EventEmitter);
      const button = getElementFromFixture(fixture, getDataTestIdOf('item-button'));

      button.click();

      expect(component.itemClicked.emit).toHaveBeenCalled();
    });
  });

  describe('setFocus', () => {
    it('should focus native element', () => {
      component.buttonRef.nativeElement.focus = jest.fn();

      component.setFocus();

      expect(component.buttonRef.nativeElement.focus).toHaveBeenCalled();
    });
  });
});