From bddd68b7230038dede9fdeca7072142decfccf88 Mon Sep 17 00:00:00 2001 From: Radek Stepan Date: Thu, 21 Jan 2016 14:28:37 +0100 Subject: [PATCH] request tests --- test/request.js | 196 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 test/request.js diff --git a/test/request.js b/test/request.js new file mode 100644 index 0000000..676798b --- /dev/null +++ b/test/request.js @@ -0,0 +1,196 @@ +import { assert } from 'chai'; +import path from 'path'; +import opa from 'object-path'; +import { noCallThru } from 'proxyquire' +let proxy = noCallThru(); + +import config from '../src/js/models/config.js'; + +class Sa { + constructor() { + // How soon do we call back? + this.timeout = 1; + } + + // Save the uri. + get(uri) { + this.params = { uri }; + return this; + } + + // Save the key-value pair. + set(key, value) { + this.params[key] = value; + return this; + } + + // Call back with the response, async. + end(cb) { + setTimeout(() => cb(null, this.response), this.timeout); + } +} + +let superagent = new Sa(); + +// Proxy the superagent lib. +let lib = path.resolve(__dirname, '../src/js/modules/github/request.js'); +let request = proxy(lib, { superagent }).default; + +export default { + 'request - all milestones (ok)': (done) => { + superagent.response = { + 'statusType': 2, + 'error': false, + 'body': [ null ] + }; + + let owner = 'radekstepan'; + let name = 'burnchart'; + + request.allMilestones({}, { owner, name }, (err, data) => { + assert.isNull(err); + assert.deepEqual(superagent.params, { + 'uri': 'https://api.github.com/repos/radekstepan/burnchart/milestones?state=open&sort=due_date&direction=asc', + 'Content-Type': 'application/json', + 'Accept': 'application/vnd.github.v3' + }); + assert.deepEqual(data, [null]); + done(); + }); + }, + + 'request - all milestones (403)': (done) => { + superagent.response = { + 'statusType': 4, + 'error': false, + 'body': { + 'message': 'API rate limit exceeded' + } + }; + + let owner = 'radekstepan'; + let name = 'burnchart'; + let milestone = 0; + + request.oneMilestone({}, { owner, name, milestone }, (err) => { + assert(err, 'Error'); + done(); + }); + }, + + 'request - one milestone (ok)': (done) => { + superagent.response = { + 'statusType': 2, + 'error': false, + 'body': [ null ] + }; + + let owner = 'radekstepan'; + let name = 'burnchart'; + let milestone = 1; + + request.oneMilestone({}, { owner, name, milestone }, (err, data) => { + assert.isNull(err); + assert.deepEqual(superagent.params, { + 'uri': 'https://api.github.com/repos/radekstepan/burnchart/milestones/1?state=open&sort=due_date&direction=asc', + 'Content-Type': 'application/json', + 'Accept': 'application/vnd.github.v3' + }); + assert.deepEqual(data, [null]); + done(); + }); + }, + + 'request - one milestone (404)': (done) => { + superagent.response = { + 'statusType': 4, + 'error': Error("cannot GET undefined (404)"), + 'body': { + 'documentation_url': "http://developer.github.com/v3", + 'message': "Not Found" + } + }; + + let owner = 'radekstepan'; + let name = 'burnchart'; + let milestone = 0; + + request.oneMilestone({}, { owner, name, milestone }, (err) => { + assert(err, 'Not Found'); + done(); + }); + }, + + 'request - one milestone (500)': (done) => { + superagent.response = { + 'statusType': 5, + 'error': Error("Error"), + 'body': null + }; + + let owner = 'radekstepan'; + let name = 'burnchart'; + let milestone = 0; + + request.oneMilestone({}, { owner, name, milestone }, (err) => { + assert(err, 'Error'); + done(); + }); + }, + + 'request - all issues (ok)': (done) => { + superagent.response = { + 'statusType': 2, + 'error': false, + 'body': [ null ] + }; + + let owner = 'radekstepan'; + let name = 'burnchart'; + let milestone = 0; + + request.allIssues({}, { owner, name, milestone }, {}, (err, data) => { + assert.isNull(err); + assert.deepEqual(superagent.params, { + 'uri': 'https://api.github.com/repos/radekstepan/burnchart/issues?milestone=0&per_page=100', + 'Content-Type': 'application/json', + 'Accept': 'application/vnd.github.v3' + }); + assert.deepEqual(data, [ null ]); + done(); + }); + }, + + 'request - timeout': (done) => { + opa.set(config, 'request.timeout', 10); + + superagent.timeout = 20; + superagent.response = { + 'statusType': 2, + 'error': false, + 'body': [ null ] + }; + + let owner = 'radekstepan'; + let name = 'burnchart'; + let milestone = 0; + + request.allIssues({}, { owner, name, milestone }, {}, (err) => { + assert(err, 'Request has timed out'); + done(); + }); + }, + + 'request - use tokens': (done) => { + superagent.response = {}; + + let user = { 'github': { 'accessToken': 'ABC' }}; + let owner = 'radekstepan'; + let name = 'burnchart'; + + request.repo(user, { owner, name }, () => { + assert(superagent.params.Authorization, 'token ABC'); + done(); + }); + } +};