all files / src/app/utils/ github.service.spec.js

100% Statements 48/48
100% Branches 0/0
100% Functions 12/12
100% Lines 48/48
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91                                                                                     
import angular from 'angular';
import 'angular-mocks';
import {GitHubService} from './github.service';
import {MOCK_REPOS, MOCK_CONTRIBUTORS, MOCK_USER, MOCK_USER_REPOS} from './github.service.mocks';
 
describe('GitHubService component', () => {
  let $httpBackend;
  let githubService;
 
  const API_HOST = 'https://api.github.com/';
 
  beforeEach(() => {
    angular.module('githubService', [])
      .service('githubService', GitHubService);
    angular.mock.module('githubService');
  });
 
  beforeEach(() => {
    angular.mock.inject((_$httpBackend_, _githubService_) => {
      $httpBackend = _$httpBackend_;
      githubService = _githubService_;
    });
  });
 
  it('should exist', () => {
    expect(githubService).toBeDefined();
  });
 
  describe('.getResource()', () => {
    let result;
 
    beforeEach(() => {
      result = {};
      spyOn(githubService, 'getResource').and.callThrough();
    });
 
    afterEach(() => {
      $httpBackend.verifyNoOutstandingExpectation();
      $httpBackend.verifyNoOutstandingRequest();
    });
 
    it('should return a repo and collaborators', () => {
      const type = 'repos';
      const value = 'angular/angular';
      const firstUrl = `${API_HOST}${type}/${value}`;
      const secondUrl = `${API_HOST}${type}/${value}/contributors`;
 
      $httpBackend.whenGET(firstUrl).respond(MOCK_REPOS);
      $httpBackend.whenGET(secondUrl).respond(MOCK_CONTRIBUTORS);
 
      expect(githubService.getResource).not.toHaveBeenCalled();
      expect(result).toEqual({});
 
      githubService.getResource(type, value)
        .then(res => {
          result = res;
        });
 
      $httpBackend.flush();
 
      expect(githubService.getResource).toHaveBeenCalledWith(type, value);
      expect(result.name).toEqual('angular');
      expect(result.contributors.length).toEqual(2);
    });
 
    it('should return a user and repos', () => {
      const type = 'users';
      const value = 'angular';
      const firstUrl = `${API_HOST}${type}/${value}`;
      const secondUrl = `${API_HOST}${type}/${value}/repos`;
 
      $httpBackend.whenGET(firstUrl).respond(MOCK_USER);
      $httpBackend.whenGET(secondUrl).respond(MOCK_USER_REPOS);
 
      expect(githubService.getResource).not.toHaveBeenCalled();
      expect(result).toEqual({});
 
      githubService.getResource(type, value)
        .then(res => {
          result = res;
        });
 
      $httpBackend.flush();
 
      expect(githubService.getResource).toHaveBeenCalledWith(type, value);
      expect(result.name).toEqual('Angular');
      expect(result.repos.length).toEqual(2);
    });
  });
});