diff --git a/.github/actions/file/src/types.d.ts b/.github/actions/file/src/types.d.ts index 08d85737..2a1551c5 100644 --- a/.github/actions/file/src/types.d.ts +++ b/.github/actions/file/src/types.d.ts @@ -10,6 +10,7 @@ export type Finding = { category?: FindingCategory ruleId?: string url: string + originalUrl: string html?: string nodes?: FindingNode[] problemShort: string diff --git a/.github/actions/find/src/findForUrl.ts b/.github/actions/find/src/findForUrl.ts index 163df959..14c4e30e 100644 --- a/.github/actions/find/src/findForUrl.ts +++ b/.github/actions/find/src/findForUrl.ts @@ -1,4 +1,11 @@ -import type {ColorSchemePreference, Finding, FindingCategory, ReducedMotionPreference, UrlConfig} from './types.d.js' +import type { + ColorSchemePreference, + Finding, + FindingCategory, + FindingInput, + ReducedMotionPreference, + UrlConfig, +} from './types.d.js' import {AxeBuilder} from '@axe-core/playwright' import {accesslintAudit} from '@accesslint/playwright' import playwright from 'playwright' @@ -39,12 +46,12 @@ export async function findForUrl( ) const findings: Finding[] = [] - const addFinding = async (findingData: Finding) => { + const addFinding = async (findingData: FindingInput) => { let screenshotId if (includeScreenshots) { screenshotId = await generateScreenshots(page) } - findings.push({...findingData, screenshotId}) + findings.push({...findingData, screenshotId, originalUrl: url}) } try { @@ -92,7 +99,7 @@ async function runAxeScan({ excludeSelectors, }: { page: playwright.Page - addFinding: (findingData: Finding, options?: {includeScreenshots?: boolean}) => Promise + addFinding: (findingData: FindingInput, options?: {includeScreenshots?: boolean}) => Promise excludeSelectors?: string[] }) { const url = page.url() @@ -129,7 +136,7 @@ async function runAccesslintScan({ addFinding, }: { page: playwright.Page - addFinding: (findingData: Finding, options?: {includeScreenshots?: boolean}) => Promise + addFinding: (findingData: FindingInput, options?: {includeScreenshots?: boolean}) => Promise }) { const url = page.url() core.info(`Scanning ${url} with AccessLint`) diff --git a/.github/actions/find/src/pluginManager/types.ts b/.github/actions/find/src/pluginManager/types.ts index 65b82469..20f39119 100644 --- a/.github/actions/find/src/pluginManager/types.ts +++ b/.github/actions/find/src/pluginManager/types.ts @@ -1,9 +1,9 @@ -import type {Finding} from '../types.d.js' +import type {FindingInput} from '../types.d.js' import playwright from 'playwright' export type PluginDefaultParams = { page: playwright.Page - addFinding: (findingData: Finding) => Promise + addFinding: (findingData: FindingInput) => Promise } export type Plugin = { diff --git a/.github/actions/find/src/types.d.ts b/.github/actions/find/src/types.d.ts index 678474d6..47347f91 100644 --- a/.github/actions/find/src/types.d.ts +++ b/.github/actions/find/src/types.d.ts @@ -17,8 +17,11 @@ export type Finding = { solutionLong?: string screenshotId?: string ruleId?: string + originalUrl: string } +export type FindingInput = Omit + export type Cookie = { name: string value: string diff --git a/.github/actions/find/tests/findForUrl.test.ts b/.github/actions/find/tests/findForUrl.test.ts index 89474f01..a8de52ed 100644 --- a/.github/actions/find/tests/findForUrl.test.ts +++ b/.github/actions/find/tests/findForUrl.test.ts @@ -335,6 +335,28 @@ describe('findForUrl', () => { ]) }) + it('adds the original url to each finding', async () => { + actionInput = '' + clearAll() + vi.mocked(AxeBuilder.prototype.analyze).mockResolvedValueOnce({ + violations: [ + { + id: 'r', + help: 'h', + helpUrl: 'https://example.com', + description: 'd', + tags: [], + nodes: [{html: '', target: ['a']}], + }, + ], + } as unknown as axe.AxeResults) + + const findings = await findForUrl({url: 'https://original.example/page'}) + + expect(findings).toHaveLength(1) + expect(findings[0].originalUrl).toBe('https://original.example/page') + }) + describe('axe finding categorization', () => { function axeViolation(tags: string[]) { return { diff --git a/tests/site-with-errors.test.ts b/tests/site-with-errors.test.ts index 4a6b00ef..59c66146 100644 --- a/tests/site-with-errors.test.ts +++ b/tests/site-with-errors.test.ts @@ -39,10 +39,11 @@ describe('site-with-errors', () => { it('cache has expected results', () => { const actual = results.map(({issue: {url: issueUrl}, findings}) => { - const {problemUrl, solutionLong, screenshotId, nodes, ...finding} = findings[0] + const {problemUrl, solutionLong, screenshotId, nodes, originalUrl, ...finding} = findings[0] // Check volatile fields for existence only expect(issueUrl).toBeDefined() expect(problemUrl).toBeDefined() + expect(originalUrl).toBeDefined() // Axe-specific assertions if (finding.scannerType === 'axe') { expect(solutionLong).toBeDefined() diff --git a/tests/types.d.ts b/tests/types.d.ts index ea72c54b..967a71eb 100644 --- a/tests/types.d.ts +++ b/tests/types.d.ts @@ -7,6 +7,7 @@ export type Finding = { scannerType: string ruleId?: string url: string + originalUrl: string html?: string nodes?: FindingNode[] problemShort: string