'use strict' const { expect } = require('chai') const GithubApiProvider = require('./github-api-provider') describe('Github API provider', function() { const baseUrl = 'https://github-api.example.com' let provider beforeEach(function() { provider = new GithubApiProvider({ baseUrl }) }) context('a valid response', function() { const rateLimit = 12500 const remaining = 7955 const nextReset = 123456789 const mockResponse = { statusCode: 200, headers: { 'x-ratelimit-limit': rateLimit, 'x-ratelimit-remaining': remaining, 'x-ratelimit-reset': nextReset, }, } const mockBuffer = Buffer.alloc(0) const mockRequest = (...args) => { const callback = args.pop() callback(null, mockResponse, mockBuffer) } it('should invoke the callback', function(done) { provider.request(mockRequest, '/foo', {}, (err, res, buffer) => { expect(err).to.equal(null) expect(Object.is(res, mockResponse)).to.be.true expect(Object.is(buffer, mockBuffer)).to.be.true done() }) }) }) context('an unauthorized response', function() { const mockResponse = { statusCode: 401 } const mockBuffer = Buffer.alloc(0) const mockRequest = (...args) => { const callback = args.pop() callback(null, mockResponse, mockBuffer) } it('should invoke the callback', function(done) { provider.request(mockRequest, '/foo', {}, (err, res, buffer) => { expect(err).to.equal(null) // Add more? done() }) }) }) context('a connection error', function() { const mockRequest = (...args) => { const callback = args.pop() callback(Error('connection timeout')) } it('should pass the error to the callback', function(done) { provider.request(mockRequest, '/foo', {}, (err, res, buffer) => { expect(err).to.be.an.instanceof(Error) expect(err.message).to.equal('connection timeout') done() }) }) }) })