Files
orca/config/scripts/mobile-test-change-scope.test.mjs
T
OrcaWinandm4air b5dec85a4e ci: reuse mobile web route analysis and skip unrelated mobile tests (#23329)
* ci: share mobile route analysis and scope mobile test runs

* ci: cover mobile web runner process dependencies

* test: verify mobile web selectors through the new runner

---------

Co-authored-by: m4air <m4air@m4airs-Air.localdomain>
2026-09-26 21:37:40 -07:00

61 lines
2.3 KiB
JavaScript

import { readFileSync } from 'node:fs'
import { parse } from 'yaml'
import { expect, it } from 'vitest'
import { shouldRunMobileTests } from './mobile-test-change-scope.mjs'
it.each([
'docs/ci.md',
'mobile/docs/release.md',
'mobile/README.md',
'mobile/Gemfile.lock',
'mobile/fastlane/Fastfile',
'.github/workflows/mobile-ios-release.yml',
'config/scripts/pr-code-change-scope.mjs',
'config/scripts/mobile-release-check-scope.test.mjs'
])('skips only known non-test inputs: %s', (file) => {
expect(shouldRunMobileTests([file])).toBe(false)
expect(shouldRunMobileTests([file, 'mobile/src/changed.ts'])).toBe(true)
})
it.each([
'mobile/src/view.tsx',
'mobile/app/_layout.tsx',
'mobile/scripts/check.ts',
'mobile/rpc-foundation/goldens/recording.json',
'mobile/vitest.config.ts',
'mobile/vitest.setup.ts',
'mobile/pnpm-lock.yaml',
'pnpm-lock.yaml',
'src/main/runtime/runtime-rpc.ts',
'src/shared/protocol-version.ts',
'.github/workflows/mobile.yml',
'.github/actions/install-node-dependencies/action.yml',
'config/scripts/mobile-test-change-scope.mjs',
'unknown-input',
'mobile/docs/../../src/source.ts'
])('retains source, fixtures, toolchain, selector and unknown changes: %s', (file) => {
expect(shouldRunMobileTests([file])).toBe(true)
})
it('retains tests on missing evidence and a move out of the source tree', () => {
expect(shouldRunMobileTests([])).toBe(true)
expect(shouldRunMobileTests(['mobile/src/deleted.ts', 'mobile/docs/moved.ts'])).toBe(true)
})
it('skips only tests, after successful detection, and retains all other mobile gates', () => {
const workflow = parse(
readFileSync(new URL('../../.github/workflows/mobile.yml', import.meta.url), 'utf8')
)
const steps = workflow.jobs.verify.steps
expect(workflow.on.pull_request.paths).toContain('config/scripts/mobile-test-change-scope*')
const detector = steps.find((step) => step.id === 'test-scope')
expect(detector.run).toContain('git diff --name-only --no-renames -z HEAD^1 HEAD')
expect(detector.run.match(/should_run=true/g)).toHaveLength(2)
expect(steps.find((step) => step.name === 'Test').if).toBe(
"steps.test-scope.outputs.should_run != 'false'"
)
for (const name of ['Typecheck', 'Typecheck tests (ratchet)', 'Lint', 'Check formatting']) {
expect(steps.find((step) => step.name === name).if).toBeUndefined()
}
})