create(); $field = FormField::factory()->for($schema, 'schema')->create(); $submission = FormSubmission::factory()->create(['form_schema_id' => $schema->id]); $value = FormValue::factory()->create([ 'form_submission_id' => $submission->id, 'form_field_id' => $field->id, ]); $this->assertSame($submission->id, $value->submission->id); $this->assertSame($field->id, $value->field->id); } public function test_form_value_casts_value_to_array(): void { $schema = FormSchema::factory()->create(); $field = FormField::factory()->for($schema, 'schema')->create(); $submission = FormSubmission::factory()->create(['form_schema_id' => $schema->id]); $value = FormValue::create([ 'form_submission_id' => $submission->id, 'form_field_id' => $field->id, 'value' => ['value' => 'hallo'], ]); $this->assertIsArray($value->fresh()->value); $this->assertSame('hallo', $value->fresh()->value['value']); } public function test_form_value_has_many_options(): void { $schema = FormSchema::factory()->create(); $field = FormField::factory()->for($schema, 'schema')->ofType(FormFieldType::MULTISELECT)->filterable()->create(); $submission = FormSubmission::factory()->create(['form_schema_id' => $schema->id]); $value = FormValue::create([ 'form_submission_id' => $submission->id, 'form_field_id' => $field->id, 'value' => ['A', 'B', 'C'], ]); // Observer rebuilds the pivot on save. $this->assertCount(3, $value->fresh()->options); $this->assertSame(3, FormValueOption::where('form_value_id', $value->id)->count()); } public function test_form_value_is_unique_per_submission_field_pair(): void { $schema = FormSchema::factory()->create(); $field = FormField::factory()->for($schema, 'schema')->create(); $submission = FormSubmission::factory()->create(['form_schema_id' => $schema->id]); FormValue::create([ 'form_submission_id' => $submission->id, 'form_field_id' => $field->id, 'value' => ['value' => 'x'], ]); $this->expectException(QueryException::class); FormValue::create([ 'form_submission_id' => $submission->id, 'form_field_id' => $field->id, 'value' => ['value' => 'y'], ]); } }