Files
shields/services/symfony/symfony-insight-violations.service.js
2021-07-09 12:53:55 +01:00

80 lines
1.8 KiB
JavaScript

import { SymfonyInsightBase, keywords } from './symfony-insight-base.js'
export default class SymfonyInsightViolations extends SymfonyInsightBase {
static route = {
base: 'symfony/i/violations',
pattern: ':projectUuid',
}
static examples = [
{
title: 'SymfonyInsight Violations',
namedParams: {
projectUuid: '825be328-29f8-44f7-a750-f82818ae9111',
},
staticPreview: this.render({
numViolations: 0,
status: 'finished',
}),
keywords,
},
]
static render({
status,
numViolations,
numCriticalViolations,
numMajorViolations,
numMinorViolations,
numInfoViolations,
}) {
const label = 'violations'
if (status !== 'finished' && status !== '') {
return {
label,
message: 'pending',
color: 'lightgrey',
}
}
if (numViolations === 0) {
return {
label,
message: '0',
color: 'brightgreen',
}
}
let color = 'yellowgreen'
const violationSummary = []
if (numInfoViolations > 0) {
violationSummary.push(`${numInfoViolations} info`)
}
if (numMinorViolations > 0) {
violationSummary.unshift(`${numMinorViolations} minor`)
color = 'yellow'
}
if (numMajorViolations > 0) {
violationSummary.unshift(`${numMajorViolations} major`)
color = 'orange'
}
if (numCriticalViolations > 0) {
violationSummary.unshift(`${numCriticalViolations} critical`)
color = 'red'
}
return {
label,
message: violationSummary.join(', '),
color,
}
}
async handle({ projectUuid }) {
const data = await this.fetch({ projectUuid })
const lastAnalysis = this.transform({ data })
return this.constructor.render(lastAnalysis)
}
}