109 lines
3.1 KiB
Plaintext
109 lines
3.1 KiB
Plaintext
const nock = require('nock');
|
|
|
|
const interceptAuthentication = ({ api = 'https://api.github.com', username = 'john' } = {}) =>
|
|
nock(api).get('/user').reply(200, {
|
|
login: username
|
|
});
|
|
|
|
const interceptCollaborator = ({
|
|
api = 'https://api.github.com',
|
|
owner = 'user',
|
|
project = 'repo',
|
|
username = 'john'
|
|
} = {}) => nock(api).get(`/repos/${owner}/${project}/collaborators/${username}`).reply(204);
|
|
|
|
const interceptListReleases = ({
|
|
host = 'github.com',
|
|
api = 'https://api.github.com',
|
|
owner = 'user',
|
|
project = 'repo',
|
|
tag_name
|
|
} = {}) =>
|
|
nock(api)
|
|
.get(`/repos/${owner}/${project}/releases?per_page=1&page=1`)
|
|
.reply(200, [
|
|
{
|
|
id: 1,
|
|
upload_url: `https://uploads.${host}/repos/${owner}/${project}/releases/1/assets{?name,label}`,
|
|
html_url: `https://${host}/${owner}/${project}/releases/tag/${tag_name}`
|
|
}
|
|
]);
|
|
|
|
const interceptCreate = ({
|
|
api = 'https://api.github.com',
|
|
host = 'github.com',
|
|
owner = 'user',
|
|
project = 'repo',
|
|
body: { tag_name, name = '', body = null, prerelease = false, draft = false }
|
|
} = {}) =>
|
|
nock(api)
|
|
.post(`/repos/${owner}/${project}/releases`, { tag_name, name, body, prerelease, draft })
|
|
.reply(() => {
|
|
const id = 1;
|
|
const responseBody = {
|
|
id,
|
|
tag_name,
|
|
name,
|
|
body,
|
|
prerelease,
|
|
draft,
|
|
upload_url: `https://uploads.${host}/repos/${owner}/${project}/releases/${id}/assets{?name,label}`,
|
|
html_url: `https://${host}/${owner}/${project}/releases/tag/${tag_name}`
|
|
};
|
|
return [200, responseBody, { location: `${api}/repos/${owner}/${project}/releases/${id}` }];
|
|
});
|
|
|
|
const interceptUpdate = ({
|
|
host = 'github.com',
|
|
api = 'https://api.github.com',
|
|
owner = 'user',
|
|
project = 'repo',
|
|
body: { tag_name, name = '', body = null, prerelease = false, draft = false }
|
|
} = {}) =>
|
|
nock(api)
|
|
.patch(`/repos/${owner}/${project}/releases/1`, { tag_name, name, body, draft, prerelease })
|
|
.reply(200, {
|
|
id: 1,
|
|
tag_name,
|
|
name,
|
|
body,
|
|
prerelease,
|
|
draft,
|
|
upload_url: `https://uploads.${host}/repos/${owner}/${project}/releases/1/assets{?name,label}`,
|
|
html_url: `https://${host}/${owner}/${project}/releases/tag/${tag_name}`
|
|
});
|
|
|
|
const interceptAsset = ({
|
|
api = 'https://api.github.com',
|
|
host = 'github.com',
|
|
owner = 'user',
|
|
project = 'repo',
|
|
tagName,
|
|
body = {}
|
|
} = {}) =>
|
|
nock(`https://uploads.${host}`)
|
|
.post(`/repos/${owner}/${project}/releases/1/assets`, body)
|
|
.query(true)
|
|
.reply(200, function () {
|
|
const id = 1;
|
|
const [, name] = this.req.path.match(/\?name=([^&]+)/);
|
|
return {
|
|
id,
|
|
url: `${api}/repos/${owner}/${project}/releases/assets/${id}`,
|
|
name,
|
|
label: '',
|
|
state: 'uploaded',
|
|
size: this.req.headers['content-length'],
|
|
browser_download_url: `https://${host}/${owner}/${project}/releases/download/${tagName}/${name}`
|
|
};
|
|
});
|
|
|
|
module.exports = {
|
|
interceptAuthentication,
|
|
interceptCollaborator,
|
|
interceptListReleases,
|
|
interceptCreate,
|
|
interceptUpdate,
|
|
interceptAsset
|
|
};
|