create(); $profile = $user->profile; $this->assertNotNull($profile); $this->assertSame($user->id, $profile->user->id); } public function test_emergency_contact_fields_are_fillable(): void { $profile = UserProfile::factory()->create([ 'emergency_contact_name' => 'Partner', 'emergency_contact_phone' => '+31611112222', ]); $this->assertSame('Partner', $profile->emergency_contact_name); $this->assertSame('+31611112222', $profile->emergency_contact_phone); } public function test_reliability_score_is_not_fillable(): void { $profile = (new UserProfile)->fill([ 'user_id' => (string) \Illuminate\Support\Str::ulid(), 'reliability_score' => 4.99, ]); $this->assertNull($profile->reliability_score); } public function test_is_ambassador_is_not_fillable(): void { $profile = (new UserProfile)->fill([ 'user_id' => (string) \Illuminate\Support\Str::ulid(), 'is_ambassador' => true, ]); $this->assertNull($profile->is_ambassador); } public function test_settings_is_cast_to_array(): void { $profile = UserProfile::factory()->create([ 'settings' => ['ui.theme' => 'dark'], ]); $this->assertIsArray($profile->fresh()->settings); $this->assertSame('dark', $profile->fresh()->settings['ui.theme']); } public function test_last_submitted_at_returns_null_when_no_submissions(): void { $user = User::factory()->create(); $profile = $user->profile; $this->assertNull($profile->last_submitted_at); } public function test_last_submitted_at_returns_max_submitted_at_from_user_subject_submissions(): void { $user = User::factory()->create(); $schema = FormSchema::factory()->create(); FormSubmission::factory()->create([ 'form_schema_id' => $schema->id, 'subject_type' => 'user', 'subject_id' => $user->id, 'status' => FormSubmissionStatus::SUBMITTED, 'submitted_at' => now()->subDays(5), ]); $latest = FormSubmission::factory()->create([ 'form_schema_id' => $schema->id, 'subject_type' => 'user', 'subject_id' => $user->id, 'status' => FormSubmissionStatus::SUBMITTED, 'submitted_at' => now()->subDay(), ]); // A draft and a test submission should be ignored. FormSubmission::factory()->create([ 'form_schema_id' => $schema->id, 'subject_type' => 'user', 'subject_id' => $user->id, 'status' => FormSubmissionStatus::DRAFT, 'submitted_at' => now(), ]); FormSubmission::factory()->create([ 'form_schema_id' => $schema->id, 'subject_type' => 'user', 'subject_id' => $user->id, 'status' => FormSubmissionStatus::SUBMITTED, 'submitted_at' => now(), 'is_test' => true, ]); $this->assertSame( $latest->submitted_at->format('Y-m-d H:i:s'), $user->profile->last_submitted_at->format('Y-m-d H:i:s') ); } }