create(['section_level_submit' => false]); FormSchemaSection::factory()->create(['form_schema_id' => $schema->id, 'sort_order' => 0]); $section2 = FormSchemaSection::factory()->create(['form_schema_id' => $schema->id, 'sort_order' => 1]); $field = FormField::factory()->create([ 'form_schema_id' => $schema->id, 'form_schema_section_id' => $section2->id, // identity key in 2nd section ]); FormFieldBinding::factory()->forField($field)->entityOwned('person', 'email') ->create(['is_identity_key' => true]); $schema->load(['fields.bindings', 'sections']); $result = (new IdentityKeyBindingsOnlyInFirstSection())->evaluate($schema); $this->assertTrue($result->passed); } public function test_passes_when_identity_key_in_first_section(): void { $schema = FormSchema::factory()->create(['section_level_submit' => true]); $section1 = FormSchemaSection::factory()->create(['form_schema_id' => $schema->id, 'sort_order' => 0]); FormSchemaSection::factory()->create(['form_schema_id' => $schema->id, 'sort_order' => 1]); $field = FormField::factory()->create([ 'form_schema_id' => $schema->id, 'form_schema_section_id' => $section1->id, ]); FormFieldBinding::factory()->forField($field)->entityOwned('artist', 'email') ->create(['is_identity_key' => true]); $schema->load(['fields.bindings', 'sections']); $result = (new IdentityKeyBindingsOnlyInFirstSection())->evaluate($schema); $this->assertTrue($result->passed); } public function test_fails_when_identity_key_in_later_section(): void { $schema = FormSchema::factory()->create(['section_level_submit' => true]); FormSchemaSection::factory()->create(['form_schema_id' => $schema->id, 'sort_order' => 0]); $section2 = FormSchemaSection::factory()->create(['form_schema_id' => $schema->id, 'sort_order' => 1]); $field = FormField::factory()->create([ 'form_schema_id' => $schema->id, 'form_schema_section_id' => $section2->id, ]); FormFieldBinding::factory()->forField($field)->entityOwned('artist', 'email') ->create(['is_identity_key' => true]); $schema->load(['fields.bindings', 'sections']); $result = (new IdentityKeyBindingsOnlyInFirstSection())->evaluate($schema); $this->assertFalse($result->passed); $this->assertSame((string) $field->id, $result->offendingFormFieldId); } }