Support for Test at Scale Badge, run [TAS] (#7612)
* added support for TAS application * Added prod url. Fixed test-case * fixed label * updated tests * streamlining of test badge * mock test cases * updated tests to make it live * updated schema validation * updated example Co-authored-by: Saurabh Prakash <saurabhp@lambdatest.com> Co-authored-by: repo-ranger[bot] <39074581+repo-ranger[bot]@users.noreply.github.com>
This commit is contained in:
111
services/tas/tas-tests.service.js
Normal file
111
services/tas/tas-tests.service.js
Normal file
@@ -0,0 +1,111 @@
|
||||
import Joi from 'joi'
|
||||
import { BaseJsonService } from '../index.js'
|
||||
import {
|
||||
testResultQueryParamSchema,
|
||||
renderTestResultBadge,
|
||||
} from '../test-results.js'
|
||||
import { nonNegativeInteger } from '../../services/validators.js'
|
||||
|
||||
const commonAttrs = {
|
||||
namedParams: {
|
||||
provider: 'github',
|
||||
org: 'tasdemo',
|
||||
repo: 'axios',
|
||||
},
|
||||
queryParams: {
|
||||
passed_label: 'passed',
|
||||
failed_label: 'failed',
|
||||
skipped_label: 'skipped',
|
||||
compact_message: null,
|
||||
},
|
||||
}
|
||||
|
||||
const schema = Joi.object({
|
||||
badge: Joi.object({
|
||||
passed: nonNegativeInteger,
|
||||
failed: nonNegativeInteger,
|
||||
skipped: nonNegativeInteger,
|
||||
total_tests: nonNegativeInteger,
|
||||
status: Joi.string().required(),
|
||||
}).required(),
|
||||
}).required()
|
||||
|
||||
export default class TasBuildStatus extends BaseJsonService {
|
||||
static category = 'test-results'
|
||||
|
||||
static route = {
|
||||
base: 'tas/tests',
|
||||
pattern: ':provider/:org/:repo',
|
||||
queryParamSchema: testResultQueryParamSchema,
|
||||
}
|
||||
|
||||
static examples = [
|
||||
{
|
||||
title: 'TAS Tests',
|
||||
staticPreview: this.render({
|
||||
passed: 20,
|
||||
failed: 1,
|
||||
skipped: 1,
|
||||
total: 22,
|
||||
}),
|
||||
...commonAttrs,
|
||||
},
|
||||
]
|
||||
|
||||
static defaultBadgeData = { label: 'tests' }
|
||||
|
||||
static render({
|
||||
passed,
|
||||
failed,
|
||||
skipped,
|
||||
total,
|
||||
passedLabel,
|
||||
failedLabel,
|
||||
skippedLabel,
|
||||
isCompact,
|
||||
}) {
|
||||
return renderTestResultBadge({
|
||||
passed,
|
||||
failed,
|
||||
skipped,
|
||||
total,
|
||||
passedLabel,
|
||||
failedLabel,
|
||||
skippedLabel,
|
||||
isCompact,
|
||||
})
|
||||
}
|
||||
|
||||
async fetch({ provider, org, repo }) {
|
||||
return this._requestJson({
|
||||
schema,
|
||||
url: `https://api.tas.lambdatest.com/repo/badge?git_provider=${provider}&org=${org}&repo=${repo}`,
|
||||
errorMessages: {
|
||||
401: 'private project not supported',
|
||||
404: 'project not found',
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
async handle(
|
||||
{ provider, org, repo },
|
||||
{
|
||||
compact_message: compactMessage,
|
||||
passed_label: passedLabel,
|
||||
failed_label: failedLabel,
|
||||
skipped_label: skippedLabel,
|
||||
}
|
||||
) {
|
||||
const { badge } = await this.fetch({ provider, org, repo })
|
||||
return this.constructor.render({
|
||||
passed: badge.passed,
|
||||
failed: badge.failed,
|
||||
skipped: badge.skipped,
|
||||
total: badge.total_tests,
|
||||
passedLabel,
|
||||
failedLabel,
|
||||
skippedLabel,
|
||||
isCompact: compactMessage !== undefined,
|
||||
})
|
||||
}
|
||||
}
|
||||
52
services/tas/tas-tests.tester.js
Normal file
52
services/tas/tas-tests.tester.js
Normal file
@@ -0,0 +1,52 @@
|
||||
import { createServiceTester } from '../tester.js'
|
||||
import {
|
||||
isDefaultTestTotals,
|
||||
isCustomTestTotals,
|
||||
isCustomCompactTestTotals,
|
||||
} from '../test-validators.js'
|
||||
|
||||
export const t = await createServiceTester()
|
||||
|
||||
t.create('Test status')
|
||||
.get('/github/tasdemo/axios.json')
|
||||
.expectBadge({ label: 'tests', message: isDefaultTestTotals })
|
||||
|
||||
t.create('Test status with custom labels')
|
||||
.get('/github/tasdemo/axios.json', {
|
||||
qs: {
|
||||
passed_label: 'good',
|
||||
failed_label: 'bad',
|
||||
skipped_label: 'n/a',
|
||||
},
|
||||
})
|
||||
.expectBadge({ label: 'tests', message: isCustomTestTotals })
|
||||
|
||||
t.create('Test status with compact message and custom labels')
|
||||
.get('/github/tasdemo/axios.json', {
|
||||
qs: {
|
||||
compact_message: null,
|
||||
passed_label: '💃',
|
||||
failed_label: '🤦♀️',
|
||||
skipped_label: '🤷',
|
||||
},
|
||||
})
|
||||
.expectBadge({
|
||||
label: 'tests',
|
||||
message: isCustomCompactTestTotals,
|
||||
})
|
||||
|
||||
t.create('Test status on project that does not exist')
|
||||
.get('/github/tasdemo/doesntexist.json')
|
||||
.expectBadge({
|
||||
label: 'tests',
|
||||
message: 'project not found',
|
||||
color: 'red',
|
||||
})
|
||||
|
||||
t.create('Test status on private project')
|
||||
.get('/github/tasdemo/nexe-private.json')
|
||||
.expectBadge({
|
||||
label: 'tests',
|
||||
message: 'private project not supported',
|
||||
color: 'lightgrey',
|
||||
})
|
||||
Reference in New Issue
Block a user