presidential-innovation-fellows/code-gov-web

View on GitHub
src/app/components/repos-search/repos-search.component.spec.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { APP_BASE_HREF } from '@angular/common';
import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { FormGroup } from '@angular/forms';
import { async, ComponentFixture, inject, TestBed } from '@angular/core/testing';
import { HttpModule } from '@angular/http';
import { RouterTestingModule } from '@angular/router/testing';
import { RouterModule } from '@angular/router';
import { Router } from '@angular/router';

import { Observable } from 'rxjs/Observable';

import { AutocompleteComponent } from '../autocomplete';
import { AutocompleteResultComponent } from '../autocomplete-result';
import { ReposSearchComponent } from './';
import { ClientService } from '../../services/client';

class MockRouter {
  url: string;
  routerState: Object;
  events: Observable<any>;

  constructor() {
    this.url = '/explore-code/';
    this.routerState = {
      route: '/'
    };
    this.events = Observable.of([]);
  }

  navigateByUrl() {
    return true;
  }
}

describe('ReposSearchComponent', () => {

  let mockRouter: any;


  beforeEach(() => {
    mockRouter = new MockRouter();

    TestBed.configureTestingModule({
      declarations: [
        AutocompleteComponent,
        AutocompleteResultComponent,
        ReposSearchComponent
      ],
      imports: [
        HttpModule,
        RouterModule.forRoot([])
      ],
      providers: [
        { provide: APP_BASE_HREF, useValue: '/' },
        ClientService,
        { provide: Router, useClass: MockRouter }
      ],
      schemas: [ CUSTOM_ELEMENTS_SCHEMA ],
    });

    this.fixture = TestBed.createComponent(ReposSearchComponent);
    this.reposSearchComponent = this.fixture.componentInstance;
  });

  describe('onSubmit', () => {
    it('should call the search function', () => {
      spyOn(this.reposSearchComponent, 'search');
      this.reposSearchComponent.queryValue = 'GSA';

      this.reposSearchComponent.onSubmit();

      expect(this.reposSearchComponent.search).toHaveBeenCalled();
    });
  });

  describe('search', () => {
    it('should navigate to results page',
      inject([Router], router => {
        let query = 'GSA';
        spyOn(router, 'navigateByUrl');
        this.reposSearchComponent.queryValue = query;
        this.reposSearchComponent.search();

        expect(router.navigateByUrl).toHaveBeenCalledWith('/search?q=' + query);
      }));
  });
});