container = require __DIR__ . '/../../../../bootstrap/container.php'; $this->pipelineService = $this->container->get(ConfigurablePipelineService::class); }); it('executes development pipeline successfully', function () { $configFile = __DIR__ . '/../../../../config/deployment/pipeline-development.yaml'; $result = $this->pipelineService->executeFromConfig($configFile); expect($result->status)->toBe(PipelineStatus::SUCCESS); expect($result->environment)->toBe(DeploymentEnvironment::DEVELOPMENT); expect($result->stageResults)->not->toBeEmpty(); }); it('skips stages based on environment configuration', function () { $configFile = __DIR__ . '/../../../../config/deployment/pipeline-development.yaml'; $result = $this->pipelineService->executeFromConfig($configFile); // Security check and backup should be skipped in development $stageTypes = array_map( fn($stageResult) => $stageResult->stage->value, $result->stageResults ); expect($stageTypes)->not->toContain('security_check'); expect($stageTypes)->not->toContain('backup'); }); it('handles stage failures correctly', function () { // This test would require mocking a failing stage // Placeholder for actual implementation expect(true)->toBeTrue(); })->skip('Requires stage mocking implementation'); it('performs rollback on failure when enabled', function () { // This test would require mocking a failing stage with rollback enabled // Placeholder for actual implementation expect(true)->toBeTrue(); })->skip('Requires stage mocking implementation'); it('respects stop_on_failure configuration', function () { // Test that pipeline stops after first failure when stop_on_failure: true expect(true)->toBeTrue(); })->skip('Requires stage mocking implementation'); it('continues on failure when continue_on_failure is set for stage', function () { // Test that pipeline continues even if a stage with continue_on_failure: true fails expect(true)->toBeTrue(); })->skip('Requires stage mocking implementation'); });