seed(RoleSeeder::class); $this->org = Organisation::factory()->create(); $this->admin = User::factory()->create(); $this->org->users()->attach($this->admin, ['role' => 'org_admin']); } public function test_form_field_resource_serialises_entity_owned_binding(): void { Sanctum::actingAs($this->admin); $schema = FormSchema::factory()->create(['organisation_id' => $this->org->id]); $field = FormField::factory()->create(['form_schema_id' => $schema->id]); FormFieldBinding::factory()->forField($field)->entityOwned('person', 'email')->create(); $response = $this->getJson("/api/v1/organisations/{$this->org->id}/forms/schemas/{$schema->id}/fields"); $response->assertOk(); $payload = collect($response->json('data'))->firstWhere('id', $field->id); $this->assertSame([ 'mode' => 'entity_owned', 'entity' => 'person', 'column' => 'email', ], $payload['binding']); } public function test_form_field_resource_returns_null_binding_when_none(): void { Sanctum::actingAs($this->admin); $schema = FormSchema::factory()->create(['organisation_id' => $this->org->id]); $field = FormField::factory()->create(['form_schema_id' => $schema->id]); $response = $this->getJson("/api/v1/organisations/{$this->org->id}/forms/schemas/{$schema->id}/fields"); $response->assertOk(); $payload = collect($response->json('data'))->firstWhere('id', $field->id); $this->assertNull($payload['binding']); } public function test_form_field_library_resource_serialises_default_binding(): void { Sanctum::actingAs($this->admin); $library = FormFieldLibrary::factory()->create(['organisation_id' => $this->org->id]); FormFieldBinding::factory()->forLibrary($library)->mirrored('user_profile', 'bio')->create(); $response = $this->getJson("/api/v1/organisations/{$this->org->id}/forms/field-library/{$library->id}"); $response->assertOk(); $response->assertJsonPath('data.default_binding', [ 'mode' => 'mirrored', 'entity' => 'user_profile', 'column' => 'bio', 'sync_direction' => 'write_on_submit', ]); } }