Files
shields/services/github/github-issue-detail.spec.js
chris48s 65dba94fa8 Stop calling variables "which"; affects [chocolatey codeclimate conda crates debug gem github mozillaobservatory nuget powershellgallery pub resharper vaadindirectory] (#3495)
* which --> variant

* which --> alias

* which --> format

* improve param names in codeclimate

* improve param names in github-issue-detail

* update github-issue-detail unit tests
2019-05-28 23:00:12 +01:00

200 lines
4.9 KiB
JavaScript

'use strict'
const { expect } = require('chai')
const { test, given } = require('sazerac')
const { InvalidResponse } = require('..')
const { age } = require('../color-formatters')
const { formatDate, metric } = require('../text-formatters')
const GithubIssueDetail = require('./github-issue-detail.service')
const { stateColor, commentsColor } = require('./github-helpers')
describe('GithubIssueDetail', function() {
test(GithubIssueDetail.render, () => {
given({
property: 'state',
value: { state: 'open' },
number: '12',
isPR: true,
}).expect({
label: 'pull request 12',
message: 'open',
color: stateColor('open'),
})
given({
property: 'state',
value: { state: 'closed' },
number: '15',
isPR: false,
}).expect({
label: 'issue 15',
message: 'closed',
color: stateColor('closed'),
})
given({
property: 'title',
value: 'refactor [FooService]',
number: '232',
isPR: true,
}).expect({
label: 'pull request 232',
message: 'refactor [FooService]',
})
given({
property: 'title',
value: 'Packagist: invalid response data',
number: '345',
isPR: false,
}).expect({
label: 'issue 345',
message: 'Packagist: invalid response data',
})
given({
property: 'author',
value: 'calebcartwright',
}).expect({
label: 'author',
message: 'calebcartwright',
})
given({
property: 'label',
value: { names: ['feature'], colors: ['a2eeef'] },
}).expect({
color: 'a2eeef',
message: 'feature',
label: 'label',
})
given({
property: 'label',
value: { names: ['service-badge', 'bug'], colors: ['a2eeef', 'ee0701'] },
}).expect({
color: undefined,
message: 'service-badge | bug',
label: 'label',
})
given({ property: 'comments', value: 27 }).expect({
label: 'comments',
message: metric(27),
color: commentsColor('closed'),
})
given({
property: 'age',
value: '2019-04-01T20:09:31Z',
}).expect({
label: 'created',
message: formatDate('2019-04-01T20:09:31Z'),
color: age('2019-04-01T20:09:31Z'),
})
given({
property: 'last-update',
value: '2019-04-02T20:09:31Z',
}).expect({
label: 'updated',
message: formatDate('2019-04-02T20:09:31Z'),
color: age('2019-04-02T20:09:31Z'),
})
})
test(GithubIssueDetail.prototype.transform, () => {
given({
property: 'state',
json: { state: 'closed' },
}).expect({
// Since it's a PR, the "merged" value is not crucial here.
value: { state: 'closed', merged: true },
isPR: false,
})
given({
property: 'state',
issueKind: 'pulls',
json: { state: 'closed', merged_at: null },
}).expect({
value: { state: 'closed', merged: false },
isPR: true,
})
given({
property: 'state',
issueKind: 'pulls',
json: { state: 'closed', merged_at: 'I am not null' },
}).expect({
value: { state: 'closed', merged: true },
isPR: true,
})
given({
property: 'title',
json: { pull_request: {}, title: 'refactor [Codecov]' },
}).expect({
value: 'refactor [Codecov]',
isPR: true,
})
given({
property: 'author',
json: { user: { login: 'dependabot' } },
}).expect({
value: 'dependabot',
isPR: false,
})
given({
property: 'label',
json: {
pull_request: {},
labels: [
{ name: 'service-badge', color: 'a2eeef' },
{ name: 'bug', color: 'ee0701' },
],
},
}).expect({
value: {
names: ['service-badge', 'bug'],
colors: ['a2eeef', 'ee0701'],
},
isPR: true,
})
given({
property: 'label',
json: { labels: [{ name: 'bug', color: 'ee0701' }] },
}).expect({
value: {
names: ['bug'],
colors: ['ee0701'],
},
isPR: false,
})
given({
property: 'comments',
json: { comments: 100 },
}).expect({
value: 100,
isPR: false,
})
given({
property: 'age',
json: { created_at: '2019-04-01T20:09:31Z' },
}).expect({
value: '2019-04-01T20:09:31Z',
isPR: false,
})
given({
property: 'last-update',
json: { updated_at: '2019-04-02T20:09:31Z' },
}).expect({
value: '2019-04-02T20:09:31Z',
isPR: false,
})
})
context('transform()', function() {
it('throws InvalidResponse error when issue has no labels', function() {
try {
GithubIssueDetail.prototype.transform({
property: 'label',
json: { labels: [] },
})
expect.fail('Expected to throw')
} catch (e) {
expect(e).to.be.an.instanceof(InvalidResponse)
expect(e.prettyMessage).to.equal('no labels found')
}
})
})
})