create(); $field = FormField::factory()->create(['form_schema_id' => $schema->id]); FormFieldBinding::factory()->forField($field)->entityOwned('person', 'email')->create([ 'merge_strategy' => FormFieldBindingMergeStrategy::Overwrite->value, ]); $schema->load('fields.bindings'); $result = $this->guard()->evaluate($schema); $this->assertTrue($result->passed); } public function test_fails_with_scalar_target_reason(): void { $schema = FormSchema::factory()->create(); $field = FormField::factory()->create(['form_schema_id' => $schema->id]); FormFieldBinding::factory()->forField($field)->entityOwned('person', 'email')->create([ 'merge_strategy' => FormFieldBindingMergeStrategy::Append->value, ]); $schema->load('fields.bindings'); $result = $this->guard()->evaluate($schema); $this->assertFalse($result->passed); $this->assertSame('scalar_target', $result->context['reason']); } public function test_passes_with_collection_target(): void { $schema = FormSchema::factory()->create(); $field = FormField::factory()->create(['form_schema_id' => $schema->id]); FormFieldBinding::factory()->forField($field)->entityOwned('person', 'dietary_preferences')->create([ 'merge_strategy' => FormFieldBindingMergeStrategy::Append->value, ]); $schema->load('fields.bindings'); $result = $this->guard()->evaluate($schema); $this->assertTrue($result->passed); } public function test_fails_with_unknown_target_reason(): void { $schema = FormSchema::factory()->create(); $field = FormField::factory()->create(['form_schema_id' => $schema->id]); FormFieldBinding::factory()->forField($field)->entityOwned('person', 'unknown_attr')->create([ 'merge_strategy' => FormFieldBindingMergeStrategy::Append->value, ]); $schema->load('fields.bindings'); $result = $this->guard()->evaluate($schema); $this->assertFalse($result->passed); $this->assertSame('unknown_target', $result->context['reason']); } private function guard(): AppendStrategyRequiresCollectionTarget { return new AppendStrategyRequiresCollectionTarget( $this->app->make(BindingTypeRegistry::class), ); } }