import dedent from 'dedent' import * as github from '@actions/github' import {afterEach, describe, expect, it} from '@jest/globals' import {BuildResult} from '../../src/build-results' import {jobMarker, renderSummaryTable} from '../../src/job-summary' const MATRIX_INPUT_ENV = 'INPUT_WORKFLOW-JOB-CONTEXT' function fakeContext(workflow: string, job: string): typeof github.context { return {workflow, job} as unknown as typeof github.context } const successfulHelpBuild: BuildResult = { rootProjectName: 'root', rootProjectDir: '/', requestedTasks: 'help', gradleVersion: '8.0', gradleHomeDir: '/opt/gradle', buildFailed: false, configCacheHit: false, buildScanUri: 'https://scans.gradle.com/s/abc123', buildScanFailed: false } const failedHelpBuild: BuildResult = { ...successfulHelpBuild, buildFailed: true } const longArgsBuild: BuildResult = { ...successfulHelpBuild, requestedTasks: 'check publishMyLongNamePluginPublicationToMavenCentral publishMyLongNamePluginPublicationToPluginPortal', } const scanPublishDisabledBuild: BuildResult = { ...successfulHelpBuild, buildScanUri: '', buildScanFailed: false, } const scanPublishFailedBuild: BuildResult = { ...successfulHelpBuild, buildScanUri: '', buildScanFailed: true, } describe('renderSummaryTable', () => { describe('renders', () => { it('successful build', () => { const table = renderSummaryTable([successfulHelpBuild]) expect(table.trim()).toBe(dedent`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root help 8.0 :white_check_mark: Build Scan published
`); }) it('failed build', () => { const table = renderSummaryTable([failedHelpBuild]) expect(table.trim()).toBe(dedent`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root help 8.0 :x: Build Scan published
`); }) describe('when build scan', () => { it('publishing disabled', () => { const table = renderSummaryTable([scanPublishDisabledBuild]) expect(table.trim()).toBe(dedent`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root help 8.0 :white_check_mark: Build Scan not published
`); }) it('publishing failed', () => { const table = renderSummaryTable([scanPublishFailedBuild]) expect(table.trim()).toBe(dedent`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root help 8.0 :white_check_mark: Build Scan publish failed
`); }) }) it('multiple builds', () => { const table = renderSummaryTable([successfulHelpBuild, failedHelpBuild]) expect(table.trim()).toBe(dedent`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root help 8.0 :white_check_mark: Build Scan published
root help 8.0 :x: Build Scan published
`); }) it('truncating long requested tasks', () => { const table = renderSummaryTable([longArgsBuild]) expect(table.trim()).toBe(dedent`
Gradle Root Project Requested Tasks Gradle Version Build Outcome Build Scan®
root
check publishMyLongNamePluginPublicationToMavenCentral publ…
8.0 :white_check_mark: Build Scan published
`); }) }) }) describe('jobMarker', () => { const original = process.env[MATRIX_INPUT_ENV] afterEach(() => { if (original === undefined) { delete process.env[MATRIX_INPUT_ENV] } else { process.env[MATRIX_INPUT_ENV] = original } }) it('builds a hidden marker from the workflow and job', () => { process.env[MATRIX_INPUT_ENV] = 'null' const marker = jobMarker(fakeContext('CI', 'build')) expect(marker).toBe('') }) it('includes the job matrix in the marker', () => { process.env[MATRIX_INPUT_ENV] = JSON.stringify({os: 'ubuntu', java: '17'}) const marker = jobMarker(fakeContext('CI', 'build')) expect(marker).toBe('') }) })