seed(RoleSeeder::class); $this->org = Organisation::factory()->create(); $this->schema = FormSchema::factory()->create(['organisation_id' => $this->org->id]); $this->admin = User::factory()->create(); $this->org->users()->attach($this->admin, ['role' => 'org_admin']); } private function toArray(FormSubmission $submission): array { $request = request(); Sanctum::actingAs($this->admin); return (new FormSubmissionResource($submission->fresh()))->toArray($request); } public function test_pending_status_serialises_as_nested_object(): void { $submission = FormSubmission::create([ 'form_schema_id' => $this->schema->id, 'status' => FormSubmissionStatus::SUBMITTED->value, 'submitted_at' => now(), 'is_test' => false, 'identity_match_status' => 'pending', ]); $array = $this->toArray($submission); $this->assertIsArray($array['identity_match']); $this->assertSame(['status' => 'pending'], $array['identity_match']); } public function test_null_status_serialises_as_null(): void { $submission = FormSubmission::create([ 'form_schema_id' => $this->schema->id, 'status' => FormSubmissionStatus::SUBMITTED->value, 'submitted_at' => now(), 'is_test' => false, ]); $array = $this->toArray($submission); $this->assertNull($array['identity_match']); } public function test_api_endpoint_returns_matching_shape(): void { Sanctum::actingAs($this->admin); $submission = FormSubmission::create([ 'form_schema_id' => $this->schema->id, 'status' => FormSubmissionStatus::SUBMITTED->value, 'submitted_at' => now(), 'is_test' => false, 'identity_match_status' => 'matched', ]); $response = $this->getJson("/api/v1/organisations/{$this->org->id}/forms/submissions/{$submission->id}"); $response->assertOk() ->assertJsonPath('data.identity_match.status', 'matched'); } }