Files
shields/services/sonar/sonar-tests.tester.js
chris48s 39ec09329a migrate some services from examples to openApi part 44; affects [sonar] (#9919)
* fix sonar tests

* migrate some services from examples to openApi

* migrate some services from examples to openApi
2024-02-05 11:01:58 +00:00

322 lines
7.5 KiB
JavaScript

import Joi from 'joi'
import { ServiceTester } from '../tester.js'
import {
isDefaultTestTotals,
isDefaultCompactTestTotals,
isCustomTestTotals,
isCustomCompactTestTotals,
isIntegerPercentage,
isMetric,
} from '../test-validators.js'
export const t = new ServiceTester({
id: 'SonarTests',
title: 'SonarTests',
pathPrefix: '/sonar',
})
const isMetricAllowZero = Joi.alternatives(
isMetric,
Joi.number().valid(0).required(),
)
// The service tests targeting the legacy SonarQube API are mocked
// because of the lack of publicly accessible, self-hosted, legacy SonarQube instances
// See https://github.com/badges/shields/issues/4221#issuecomment-546611598 for more details
// This is an uncommon scenario Shields has to support for Sonar, and should not be used as a model
// for other service tests.
t.create('Tests')
.timeout(10000)
.get('/tests/WebExtensions.Net.json?server=https://sonarcloud.io')
.expectBadge({
label: 'tests',
message: isDefaultTestTotals,
})
t.create('Tests (branch)')
.timeout(10000)
.get('/tests/WebExtensions.Net/main.json?server=https://sonarcloud.io')
.expectBadge({
label: 'tests',
message: isDefaultTestTotals,
})
t.create('Tests (legacy API supported)')
.get(
'/tests/org.ow2.petals%3Apetals-se-ase.json?server=http://sonar.petalslink.com&sonarVersion=4.2',
)
.intercept(nock =>
nock('http://sonar.petalslink.com/api')
.get('/resources')
.query({
resource: 'org.ow2.petals:petals-se-ase',
depth: 0,
metrics: 'tests,test_failures,skipped_tests',
includeTrends: true,
})
.reply(200, [
{
msr: [
{
key: 'tests',
val: '71',
},
{
key: 'test_failures',
val: '2',
},
{
key: 'skipped_tests',
val: '1',
},
],
},
]),
)
.expectBadge({
label: 'tests',
message: '68 passed, 2 failed, 1 skipped',
})
t.create('Tests with compact message')
.timeout(10000)
.get('/tests/WebExtensions.Net.json', {
qs: {
compact_message: null,
server: 'https://sonarcloud.io',
},
})
.expectBadge({ label: 'tests', message: isDefaultCompactTestTotals })
t.create('Tests with custom labels')
.timeout(10000)
.get('/tests/WebExtensions.Net.json', {
qs: {
server: 'https://sonarcloud.io',
passed_label: 'good',
failed_label: 'bad',
skipped_label: 'n/a',
},
})
.expectBadge({ label: 'tests', message: isCustomTestTotals })
t.create('Tests with compact message and custom labels')
.timeout(10000)
.get('/tests/WebExtensions.Net.json', {
qs: {
server: 'https://sonarcloud.io',
compact_message: null,
passed_label: '💃',
failed_label: '🤦‍♀️',
skipped_label: '🤷',
},
})
.expectBadge({
label: 'tests',
message: isCustomCompactTestTotals,
})
t.create('Total Test Count')
.timeout(10000)
.get(
'/total_tests/swellaby:azdo-shellcheck.json?server=https://sonarcloud.io',
)
.expectBadge({
label: 'total tests',
message: isMetric,
})
t.create('Total Test Count (branch)')
.timeout(10000)
.get(
'/total_tests/swellaby:azdo-shellcheck/master.json?server=https://sonarcloud.io',
)
.expectBadge({
label: 'total tests',
message: isMetric,
})
t.create('Total Test Count (legacy API supported)')
.get(
'/total_tests/org.ow2.petals%3Apetals-se-ase.json?server=http://sonar.petalslink.com&sonarVersion=4.2',
)
.intercept(nock =>
nock('http://sonar.petalslink.com/api')
.get('/resources')
.query({
resource: 'org.ow2.petals:petals-se-ase',
depth: 0,
metrics: 'tests',
includeTrends: true,
})
.reply(200, [
{
msr: [
{
key: 'tests',
val: '132',
},
],
},
]),
)
.expectBadge({
label: 'total tests',
message: '132',
})
t.create('Test Failures Count')
.timeout(10000)
.get(
'/test_failures/swellaby:azdo-shellcheck.json?server=https://sonarcloud.io',
)
.expectBadge({
label: 'test failures',
message: isMetricAllowZero,
})
t.create('Test Failures Count (legacy API supported)')
.get(
'/test_failures/org.ow2.petals%3Apetals-se-ase.json?server=http://sonar.petalslink.com&sonarVersion=4.2',
)
.intercept(nock =>
nock('http://sonar.petalslink.com/api')
.get('/resources')
.query({
resource: 'org.ow2.petals:petals-se-ase',
depth: 0,
metrics: 'test_failures',
includeTrends: true,
})
.reply(200, [
{
msr: [
{
key: 'test_failures',
val: '2',
},
],
},
]),
)
.expectBadge({
label: 'test failures',
message: '2',
})
t.create('Test Errors Count')
.timeout(10000)
.get(
'/test_errors/swellaby:azdo-shellcheck.json?server=https://sonarcloud.io',
)
.expectBadge({
label: 'test errors',
message: isMetricAllowZero,
})
t.create('Test Errors Count (legacy API supported)')
.get(
'/test_errors/org.ow2.petals%3Apetals-se-ase.json?server=http://sonar.petalslink.com&sonarVersion=4.2',
)
.intercept(nock =>
nock('http://sonar.petalslink.com/api')
.get('/resources')
.query({
resource: 'org.ow2.petals:petals-se-ase',
depth: 0,
metrics: 'test_errors',
includeTrends: true,
})
.reply(200, [
{
msr: [
{
key: 'test_errors',
val: '3',
},
],
},
]),
)
.expectBadge({
label: 'test errors',
message: '3',
})
t.create('Skipped Tests Count')
.timeout(10000)
.get(
'/skipped_tests/swellaby:azdo-shellcheck.json?server=https://sonarcloud.io',
)
.expectBadge({
label: 'skipped tests',
message: isMetricAllowZero,
})
t.create('Skipped Tests Count (legacy API supported)')
.get(
'/skipped_tests/org.ow2.petals%3Apetals-se-ase.json?server=http://sonar.petalslink.com&sonarVersion=4.2',
)
.intercept(nock =>
nock('http://sonar.petalslink.com/api')
.get('/resources')
.query({
resource: 'org.ow2.petals:petals-se-ase',
depth: 0,
metrics: 'skipped_tests',
includeTrends: true,
})
.reply(200, [
{
msr: [
{
key: 'skipped_tests',
val: '1',
},
],
},
]),
)
.expectBadge({
label: 'skipped tests',
message: '1',
})
t.create('Test Success Rate')
.timeout(10000)
.get(
'/test_success_density/swellaby:azdo-shellcheck.json?server=https://sonarcloud.io',
)
.expectBadge({
label: 'tests',
message: isIntegerPercentage,
})
t.create('Test Success Rate (legacy API supported)')
.get(
'/test_success_density/org.ow2.petals%3Apetals-se-ase.json?server=http://sonar.petalslink.com&sonarVersion=4.2',
)
.intercept(nock =>
nock('http://sonar.petalslink.com/api')
.get('/resources')
.query({
resource: 'org.ow2.petals:petals-se-ase',
depth: 0,
metrics: 'test_success_density',
includeTrends: true,
})
.reply(200, [
{
msr: [
{
key: 'test_success_density',
val: '97',
},
],
},
]),
)
.expectBadge({
label: 'tests',
message: '97%',
})