create(); $guard = new ConditionalRequirement( predicate: fn (): bool => false, subGuard: $this->alwaysFails(), code: 'test_predicate_false', ); $result = $guard->evaluate($schema); $this->assertTrue($result->passed); $this->assertSame('conditional:test_predicate_false', $result->guardCode); } public function test_passes_when_predicate_true_and_sub_passes(): void { $schema = FormSchema::factory()->create(); $guard = new ConditionalRequirement( predicate: fn (): bool => true, subGuard: $this->alwaysPasses(), code: 'test_sub_passes', ); $result = $guard->evaluate($schema); $this->assertTrue($result->passed); } public function test_fails_when_predicate_true_and_sub_fails(): void { $schema = FormSchema::factory()->create(); $guard = new ConditionalRequirement( predicate: fn (): bool => true, subGuard: $this->alwaysFails(), code: 'test_sub_fails', ); $result = $guard->evaluate($schema); $this->assertFalse($result->passed); $this->assertSame('conditional:test_sub_fails', $result->guardCode); $this->assertSame('inner_failure', $result->messageKey); $this->assertSame('inner_guard', $result->context['delegated_to']); } private function alwaysPasses(): PublishGuard { return new class implements PublishGuard { public function code(): string { return 'inner_guard'; } public function evaluate(FormSchema $schema): PublishGuardResult { return PublishGuardResult::passed($this->code()); } }; } private function alwaysFails(): PublishGuard { return new class implements PublishGuard { public function code(): string { return 'inner_guard'; } public function evaluate(FormSchema $schema): PublishGuardResult { return PublishGuardResult::failed($this->code(), 'inner_failure'); } }; } }