mirror of
https://github.com/stablyai/orca.git
synced 2026-09-22 16:02:32 +00:00
* test: exercise packaged browser compatibility in scheduled CI * test: record final packaged workflow participation evidence * test: expose manual packaged revision and simplify executable check * test: reject missing package checksum assertion
43 lines
1.3 KiB
JavaScript
43 lines
1.3 KiB
JavaScript
export function verifyPlaywrightParticipation(report, { titles, label, repetitions = 3 }) {
|
|
const stats = report?.stats
|
|
if (
|
|
!stats ||
|
|
stats.expected !== titles.length * repetitions ||
|
|
stats.skipped !== 0 ||
|
|
stats.unexpected !== 0 ||
|
|
stats.flaky !== 0 ||
|
|
report.errors?.length
|
|
) {
|
|
throw new Error(`${label} participation failed: ${JSON.stringify(stats)}`)
|
|
}
|
|
const counts = new Map(titles.map((title) => [title, 0]))
|
|
const visit = (suites) => {
|
|
for (const suite of suites ?? []) {
|
|
for (const spec of suite.specs ?? []) {
|
|
if (!counts.has(spec.title)) {
|
|
throw new Error(`Unexpected ${label} scenario: ${spec.title}`)
|
|
}
|
|
for (const test of spec.tests ?? []) {
|
|
if (
|
|
test.expectedStatus !== 'passed' ||
|
|
test.results?.length !== 1 ||
|
|
test.results[0].status !== 'passed'
|
|
) {
|
|
throw new Error(`${label} scenario did not pass without retries: ${spec.title}`)
|
|
}
|
|
counts.set(spec.title, counts.get(spec.title) + 1)
|
|
}
|
|
}
|
|
visit(suite.suites)
|
|
}
|
|
}
|
|
visit(report.suites)
|
|
for (const [title, count] of counts) {
|
|
if (count !== repetitions) {
|
|
throw new Error(
|
|
`${label} scenario requires ${repetitions === 3 ? 'three' : repetitions} executions: ${title} (${count})`
|
|
)
|
|
}
|
|
}
|
|
}
|