create(); $schema = FormSchema::factory()->create(['organisation_id' => $org->id]); $field = FormField::factory()->create(['form_schema_id' => $schema->id]); $root = FormFieldConditionalLogicGroup::factory() ->forField($field) ->withOperator(FormFieldConditionalLogicGroupOperator::All) ->create(); FormFieldConditionalLogicGroup::factory() ->nestedUnder($root, 0) ->withOperator(FormFieldConditionalLogicGroupOperator::Any) ->create(); $groups = $field->fresh()->conditionalLogicGroups; $this->assertCount(2, $groups); } public function test_root_helper_returns_parentless_group(): void { $org = Organisation::factory()->create(); $schema = FormSchema::factory()->create(['organisation_id' => $org->id]); $field = FormField::factory()->create(['form_schema_id' => $schema->id]); $root = FormFieldConditionalLogicGroup::factory()->forField($field)->create(); FormFieldConditionalLogicGroup::factory()->nestedUnder($root, 0)->create(); FormFieldConditionalLogicGroup::factory()->nestedUnder($root, 1)->create(); $found = $field->fresh()->rootConditionalLogicGroup(); $this->assertNotNull($found); $this->assertSame($root->id, $found->id); $this->assertNull($found->parent_group_id); } public function test_group_relations_parent_and_children(): void { $org = Organisation::factory()->create(); $schema = FormSchema::factory()->create(['organisation_id' => $org->id]); $field = FormField::factory()->create(['form_schema_id' => $schema->id]); $root = FormFieldConditionalLogicGroup::factory()->forField($field)->create(); $child1 = FormFieldConditionalLogicGroup::factory()->nestedUnder($root, 0)->create(); $child2 = FormFieldConditionalLogicGroup::factory()->nestedUnder($root, 1)->create(); $this->assertSame($root->id, $child1->fresh()->parentGroup->id); $childIds = $root->fresh()->childGroups->pluck('id')->sort()->values()->all(); $this->assertSame(collect([$child1->id, $child2->id])->sort()->values()->all(), $childIds); } public function test_group_has_many_conditions(): void { $org = Organisation::factory()->create(); $schema = FormSchema::factory()->create(['organisation_id' => $org->id]); $field = FormField::factory()->create(['form_schema_id' => $schema->id]); $group = FormFieldConditionalLogicGroup::factory()->forField($field)->create(); FormFieldConditionalLogicCondition::factory()->inGroup($group, 0)->create(); FormFieldConditionalLogicCondition::factory()->inGroup($group, 1)->create(); $this->assertCount(2, $group->fresh()->conditions); } public function test_operator_enum_casts_roundtrip(): void { $org = Organisation::factory()->create(); $schema = FormSchema::factory()->create(['organisation_id' => $org->id]); $field = FormField::factory()->create(['form_schema_id' => $schema->id]); $group = FormFieldConditionalLogicGroup::factory() ->forField($field) ->withOperator(FormFieldConditionalLogicGroupOperator::Any) ->create(); $fresh = $group->fresh(); $this->assertSame(FormFieldConditionalLogicGroupOperator::Any, $fresh->operator); $condition = FormFieldConditionalLogicCondition::factory() ->inGroup($group) ->withOperator(FormFieldConditionalLogicConditionOperator::GreaterThan, 18) ->create(); $this->assertSame( FormFieldConditionalLogicConditionOperator::GreaterThan, $condition->fresh()->comparison_operator, ); $this->assertSame(18, $condition->fresh()->value); } }