toHaveKeys([ 'test', 'test:fast', 'test:confidence', 'test:browser', 'test:heavy', 'test:profile', 'test:junit', 'test:report', 'test:report:confidence', 'test:report:browser', 'test:report:heavy', 'test:report:profile', 'sail:test', ]) ->and(TestLaneManifest::commandRef('fast-feedback'))->toBe('test') ->and(TestLaneManifest::commandRef('confidence'))->toBe('test:confidence') ->and(TestLaneManifest::commandRef('browser'))->toBe('test:browser') ->and(TestLaneManifest::commandRef('heavy-governance'))->toBe('test:heavy') ->and(TestLaneManifest::commandRef('profiling'))->toBe('test:profile') ->and(TestLaneManifest::commandRef('junit'))->toBe('test:junit'); }); it('keeps the host-side lane runner and report scripts checked in at repo root', function (): void { expect(file_exists(repo_path('scripts/platform-test-lane')))->toBeTrue() ->and(file_exists(repo_path('scripts/platform-test-report')))->toBeTrue(); }); it('keeps heavy-governance baseline capture support inside the checked-in wrappers', function (): void { $laneRunner = (string) file_get_contents(repo_path('scripts/platform-test-lane')); $reportRunner = (string) file_get_contents(repo_path('scripts/platform-test-report')); expect($laneRunner)->toContain('--capture-baseline', 'copy_heavy_baseline_artifacts', 'heavy-governance-baseline.${suffix}') ->and($reportRunner)->toContain('--capture-baseline', 'copy_heavy_baseline_artifacts', 'heavy-governance-baseline.${suffix}'); }); it('avoids expanding an empty forwarded-argument array in the lane runner', function (): void { $laneRunner = (string) file_get_contents(repo_path('scripts/platform-test-lane')); expect($laneRunner) ->toContain('if [[ ${#remaining_args[@]} -gt 0 ]]; then') ->and($laneRunner)->toContain('./vendor/bin/sail composer run --timeout=0 "${COMPOSER_SCRIPT}" -- "${remaining_args[@]}"') ->and($laneRunner)->toContain('./vendor/bin/sail composer run --timeout=0 "${COMPOSER_SCRIPT}"'); }); it('routes the foundational lane commands through stable artisan arguments', function (): void { $fastFeedbackConfig = TestLaneManifest::laneConfigurationPath('fast-feedback'); $fastFeedbackContents = (string) file_get_contents(TestLaneManifest::absolutePath($fastFeedbackConfig)); $confidenceConfig = TestLaneManifest::laneConfigurationPath('confidence'); $confidenceContents = (string) file_get_contents(TestLaneManifest::absolutePath($confidenceConfig)); $browserConfig = TestLaneManifest::laneConfigurationPath('browser'); $browserContents = (string) file_get_contents(TestLaneManifest::absolutePath($browserConfig)); $heavyConfig = TestLaneManifest::laneConfigurationPath('heavy-governance'); $heavyContents = (string) file_get_contents(TestLaneManifest::absolutePath($heavyConfig)); expect(TestLaneManifest::buildCommand('fast-feedback'))->toContain('--parallel') ->and(TestLaneManifest::buildCommand('fast-feedback'))->toContain('--configuration='.$fastFeedbackConfig) ->and($fastFeedbackContents)->not->toContain('tests/Feature/Drift/DriftBulkAcknowledgeAllMatchingConfirmationTest.php') ->and($fastFeedbackContents)->not->toContain('tests/Feature/Findings/FindingBulkActionsTest.php') ->and($fastFeedbackContents)->not->toContain('tests/Feature/Guards/ActionSurfaceContractTest.php') ->and(TestLaneManifest::buildCommand('confidence'))->toContain('--configuration='.$confidenceConfig) ->and($confidenceContents)->toContain('tests/Feature/Baselines/BaselineCompareMatrixCompareAllActionTest.php') ->and($confidenceContents)->not->toContain('tests/Feature/Drift/DriftBulkAcknowledgeAllMatchingConfirmationTest.php') ->and($confidenceContents)->not->toContain('tests/Feature/Filament/BaselineActionAuthorizationTest.php') ->and($confidenceContents)->not->toContain('tests/Feature/Filament/BaselineProfileCaptureStartSurfaceTest.php') ->and($confidenceContents)->not->toContain('tests/Feature/Filament/BaselineProfileCompareStartSurfaceTest.php') ->and($confidenceContents)->not->toContain('tests/Feature/Findings/FindingBulkActionsTest.php') ->and($confidenceContents)->not->toContain('tests/Feature/Guards/ActionSurfaceContractTest.php') ->and(TestLaneManifest::buildCommand('browser'))->toContain('--configuration='.$browserConfig) ->and($browserContents)->toContain('tests/Browser/Spec190BaselineCompareMatrixSmokeTest.php') ->and(TestLaneManifest::buildCommand('heavy-governance'))->toContain('--configuration='.$heavyConfig) ->and($heavyContents)->toContain('tests/Feature/Drift/DriftBulkAcknowledgeAllMatchingConfirmationTest.php') ->and($heavyContents)->toContain('tests/Feature/Filament/BaselineActionAuthorizationTest.php') ->and($heavyContents)->toContain('tests/Feature/Filament/BaselineProfileCaptureStartSurfaceTest.php') ->and($heavyContents)->toContain('tests/Feature/Filament/BaselineProfileCompareStartSurfaceTest.php') ->and($heavyContents)->toContain('tests/Feature/Findings/FindingBulkActionsTest.php') ->and($heavyContents)->toContain('tests/Feature/Guards/ActionSurfaceContractTest.php') ->and(TestLaneManifest::buildCommand('junit'))->toContain('--parallel'); });