burnchart/test/request.js

197 lines
4.6 KiB
JavaScript

import { assert } from 'chai';
import path from 'path';
import opa from 'object-path';
import { noCallThru } from 'proxyquire'
let proxy = noCallThru();
import config from '../src/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;
describe('request', () => {
it('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();
});
});
it('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();
});
});
it('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();
});
});
it('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();
});
});
it('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();
});
});
it('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();
});
});
it('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();
});
});
it('use tokens', done => {
superagent.response = {};
let user = { 'credential': { 'accessToken': 'ABC' }};
let owner = 'radekstepan';
let name = 'burnchart';
request.repo(user, { owner, name }, () => {
assert(superagent.params.Authorization, 'token ABC');
done();
});
});
});