mirror of
https://github.com/status-im/burnchart.git
synced 2025-02-10 09:26:20 +00:00
197 lines
4.6 KiB
JavaScript
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();
|
|
});
|
|
});
|
|
});
|