create(); FormField::factory()->create(['form_schema_id' => $schema->id]); $schema->load('fields.bindings'); $result = (new MaxOneIdentityKeyPerTargetEntity)->evaluate($schema); $this->assertTrue($result->passed); } public function test_passes_with_one_identity_key_per_entity(): void { $schema = FormSchema::factory()->create(); $field = FormField::factory()->create(['form_schema_id' => $schema->id]); FormFieldBinding::factory()->forField($field)->entityOwned('person', 'email') ->create(['is_identity_key' => true]); $schema->load('fields.bindings'); $result = (new MaxOneIdentityKeyPerTargetEntity)->evaluate($schema); $this->assertTrue($result->passed); } public function test_fails_with_two_identity_keys_same_entity(): void { $schema = FormSchema::factory()->create(); $f1 = FormField::factory()->create(['form_schema_id' => $schema->id]); $f2 = FormField::factory()->create(['form_schema_id' => $schema->id]); FormFieldBinding::factory()->forField($f1)->entityOwned('person', 'email') ->create(['is_identity_key' => true]); FormFieldBinding::factory()->forField($f2)->entityOwned('person', 'first_name') ->create(['is_identity_key' => true]); $schema->load('fields.bindings'); $result = (new MaxOneIdentityKeyPerTargetEntity)->evaluate($schema); $this->assertFalse($result->passed); $this->assertSame('person', $result->context['entity']); } public function test_passes_with_one_identity_key_each_on_different_entities(): void { $schema = FormSchema::factory()->create(); $f1 = FormField::factory()->create(['form_schema_id' => $schema->id]); $f2 = FormField::factory()->create(['form_schema_id' => $schema->id]); FormFieldBinding::factory()->forField($f1)->entityOwned('person', 'email') ->create(['is_identity_key' => true]); FormFieldBinding::factory()->forField($f2)->entityOwned('company', 'contact_email') ->create(['is_identity_key' => true]); $schema->load('fields.bindings'); $result = (new MaxOneIdentityKeyPerTargetEntity)->evaluate($schema); $this->assertTrue($result->passed); } }