create(); $admin = \App\Models\User::factory()->create(); $org->users()->attach($admin, ['role' => 'org_admin']); $schema = FormSchema::factory()->create(['organisation_id' => $org->id]); FormField::factory() ->withOptions([ ['value' => 'red', 'label' => 'Red', 'sort_order' => 0, 'translations' => ['nl' => 'Rood']], ['value' => 'green', 'label' => 'Green', 'sort_order' => 1], ]) ->create([ 'form_schema_id' => $schema->id, 'field_type' => FormFieldType::SELECT->value, 'slug' => 'colour', 'label' => 'Colour', ]); \Laravel\Sanctum\Sanctum::actingAs($admin); $response = $this->getJson("/api/v1/organisations/{$org->id}/forms/schemas/{$schema->id}/fields"); $response->assertOk(); $emitted = collect($response->json('data'))->firstWhere('slug', 'colour'); $this->assertSame( [ ['value' => 'red', 'label' => 'Red', 'sort_order' => 0, 'translations' => ['nl' => 'Rood']], ['value' => 'green', 'label' => 'Green', 'sort_order' => 1], ], $emitted['options'], ); } public function test_form_field_resource_emits_null_options_for_option_less_field_type(): void { $org = Organisation::factory()->create(); $admin = \App\Models\User::factory()->create(); $org->users()->attach($admin, ['role' => 'org_admin']); $schema = FormSchema::factory()->create(['organisation_id' => $org->id]); FormField::factory()->create([ 'form_schema_id' => $schema->id, 'field_type' => FormFieldType::TEXT->value, 'slug' => 'name', 'label' => 'Name', ]); \Laravel\Sanctum\Sanctum::actingAs($admin); $response = $this->getJson("/api/v1/organisations/{$org->id}/forms/schemas/{$schema->id}/fields"); $response->assertOk(); $emitted = collect($response->json('data'))->firstWhere('slug', 'name'); $this->assertNull($emitted['options']); } public function test_library_resource_emits_rich_shape_options(): void { $org = Organisation::factory()->create(); $admin = \App\Models\User::factory()->create(); $org->users()->attach($admin, ['role' => 'org_admin']); $library = FormFieldLibrary::factory() ->withOptions(['a', 'b']) ->create(['organisation_id' => $org->id]); \Laravel\Sanctum\Sanctum::actingAs($admin); $response = $this->getJson("/api/v1/organisations/{$org->id}/forms/field-library/{$library->id}"); $response->assertOk(); $this->assertSame( [ ['value' => 'a', 'label' => 'a', 'sort_order' => 0], ['value' => 'b', 'label' => 'b', 'sort_order' => 1], ], $response->json('data.options'), ); } public function test_to_json_shape_is_byte_equal_to_resource_output(): void { $org = Organisation::factory()->create(); $schema = FormSchema::factory()->create(['organisation_id' => $org->id]); $field = FormField::factory() ->withOptions(['x', 'y', 'z']) ->create([ 'form_schema_id' => $schema->id, 'field_type' => FormFieldType::RADIO->value, ]); $service = app(FormFieldOptionService::class); $shape = $service->toJsonShape($service->optionsFor($field)); $this->assertSame( [ ['value' => 'x', 'label' => 'x', 'sort_order' => 0], ['value' => 'y', 'label' => 'y', 'sort_order' => 1], ['value' => 'z', 'label' => 'z', 'sort_order' => 2], ], $shape, ); } }