1
0
mirror of https://github.com/badges/shields.git synced 2025-04-18 19:44:04 +03:00
shields/services/symfony/symfony-insight.spec.js
dependabot[bot] b9d96755ec
chore(deps-dev): bump prettier from 2.8.8 to 3.0.0 (#9357)
* chore(deps-dev): bump prettier from 2.8.8 to 3.0.0

Bumps [prettier](https://github.com/prettier/prettier) from 2.8.8 to 3.0.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.8.8...3.0.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* reformat all the things (prettier 3)

* update tests to await calls to prettier.format()

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: chris48s <git@chris-shaw.dev>
2023-07-10 09:27:51 +00:00

265 lines
6.2 KiB
JavaScript

import { expect } from 'chai'
import nock from 'nock'
import { cleanUpNockAfterEach, defaultContext } from '../test-helpers.js'
import SymfonyInsightGrade from './symfony-insight-grade.service.js'
import SymfonyInsightStars from './symfony-insight-stars.service.js'
import SymfonyInsightViolations from './symfony-insight-violations.service.js'
import {
sampleProjectUuid as projectUuid,
runningMockResponse,
platinumMockResponse,
goldMockResponse,
silverMockResponse,
bronzeMockResponse,
noMedalMockResponse,
noGradeMockResponse,
criticalViolation,
majorViolation,
minorViolation,
infoViolation,
multipleViolations,
user,
token,
config,
} from './symfony-test-helpers.js'
// These tests are organized in a fairly unusual way because the service uses
// XML, so it's difficult to decouple the parsing from the transform + render.
// It also requires authentication so the tests must be written using a .spec
// instead of a .tester.
//
// In most other cases, do not follow this pattern. Instead, write a .spec file
// with sazerac tests of the transform and render functions.
describe('SymfonyInsight[Grade|Stars|Violation]', function () {
cleanUpNockAfterEach()
function createMock() {
return nock('https://insight.symfony.com/api/projects')
.get(`/${projectUuid}`)
.basicAuth({ user, pass: token })
}
it('401 not authorized grade', async function () {
const scope = createMock().reply(401)
expect(
await SymfonyInsightGrade.invoke(defaultContext, config, { projectUuid }),
).to.deep.equal({
message: 'not authorized to access project',
color: 'lightgray',
isError: true,
})
scope.done()
})
function testBadges({
description,
response,
expectedGradeBadge,
expectedStarsBadge,
expectedViolationsBadge,
...rest
}) {
if (Object.keys(rest).length > 0) {
throw Error(`Oops, what are those doing there: ${rest.join(', ')}`)
}
describe(description, function () {
if (expectedGradeBadge) {
it('grade', async function () {
const scope = createMock().reply(200, response)
expect(
await SymfonyInsightGrade.invoke(defaultContext, config, {
projectUuid,
}),
).to.deep.equal(expectedGradeBadge)
scope.done()
})
}
if (expectedStarsBadge) {
it('stars', async function () {
const scope = createMock().reply(200, response)
expect(
await SymfonyInsightStars.invoke(defaultContext, config, {
projectUuid,
}),
).to.deep.equal(expectedStarsBadge)
scope.done()
})
}
if (expectedViolationsBadge) {
it('violations', async function () {
const scope = createMock().reply(200, response)
expect(
await SymfonyInsightViolations.invoke(defaultContext, config, {
projectUuid,
}),
).to.deep.equal(expectedViolationsBadge)
scope.done()
})
}
})
}
testBadges({
description: 'pending project',
response: runningMockResponse,
expectedGradeBadge: {
label: 'grade',
message: 'pending',
color: 'lightgrey',
},
expectedStarsBadge: {
label: 'stars',
message: 'pending',
color: 'lightgrey',
},
expectedViolationsBadge: {
label: 'violations',
message: 'pending',
color: 'lightgrey',
},
})
testBadges({
description: 'platinum',
response: platinumMockResponse,
expectedGradeBadge: {
label: 'grade',
message: 'platinum',
color: '#e5e4e2',
},
expectedStarsBadge: {
label: 'stars',
message: '★★★★',
color: '#e5e4e2',
},
})
testBadges({
description: 'gold',
response: goldMockResponse,
expectedGradeBadge: {
label: 'grade',
message: 'gold',
color: '#ebc760',
},
expectedStarsBadge: {
label: 'stars',
message: '★★★☆',
color: '#ebc760',
},
expectedViolationsBadge: {
label: 'violations',
message: '0',
color: 'brightgreen',
},
})
testBadges({
description: 'silver',
response: silverMockResponse,
expectedGradeBadge: {
label: 'grade',
message: 'silver',
color: '#c0c0c0',
},
expectedStarsBadge: {
label: 'stars',
message: '★★☆☆',
color: '#c0c0c0',
},
})
testBadges({
description: 'bronze',
response: bronzeMockResponse,
expectedGradeBadge: {
label: 'grade',
message: 'bronze',
color: '#c88f6a',
},
expectedStarsBadge: {
label: 'stars',
message: '★☆☆☆',
color: '#c88f6a',
},
})
testBadges({
description: 'no medal',
response: noMedalMockResponse,
expectedGradeBadge: {
label: 'grade',
message: 'no medal',
color: 'red',
},
expectedStarsBadge: {
label: 'stars',
message: '☆☆☆☆',
color: 'red',
},
})
testBadges({
description: 'no medal',
response: noGradeMockResponse,
expectedGradeBadge: {
label: 'grade',
message: 'no medal',
color: 'red',
},
})
testBadges({
description: 'critical violations',
response: criticalViolation,
expectedViolationsBadge: {
label: 'violations',
message: '1 critical',
color: 'red',
},
})
testBadges({
description: 'major violations',
response: majorViolation,
expectedViolationsBadge: {
label: 'violations',
message: '1 major',
color: 'orange',
},
})
testBadges({
description: 'minor violations',
response: minorViolation,
expectedViolationsBadge: {
label: 'violations',
message: '1 minor',
color: 'yellow',
},
})
testBadges({
description: 'info violations',
response: infoViolation,
expectedViolationsBadge: {
label: 'violations',
message: '1 info',
color: 'yellowgreen',
},
})
testBadges({
description: 'multiple violations',
response: multipleViolations,
expectedViolationsBadge: {
label: 'violations',
message: '1 critical, 1 info',
color: 'red',
},
})
})