Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use App\Enums\Subscription;
use App\Enums\TeamUserStatus;
use Filament\Models\Contracts\FilamentUser;
use Filament\Models\Contracts\HasName;
use Filament\Panel;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
Expand All @@ -18,7 +19,7 @@
use Laravel\Cashier\Billable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable implements FilamentUser
class User extends Authenticatable implements FilamentUser, HasName
{
use Billable, HasApiTokens, HasFactory, Notifiable;

Expand All @@ -30,6 +31,11 @@ class User extends Authenticatable implements FilamentUser
'github_token',
];

public function getFilamentName(): string
{
return $this->attributes['display_name'] ?? $this->name ?? $this->email;
}

public function canAccessPanel(Panel $panel): bool
{
return $this->isAdmin();
Expand Down
40 changes: 40 additions & 0 deletions tests/Feature/UserModelTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

namespace Tests\Feature;

use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class UserModelTest extends TestCase
{
use RefreshDatabase;

public function test_get_filament_name_returns_name_when_present(): void
{
$user = User::factory()->create(['name' => 'John Doe']);

$this->assertSame('John Doe', $user->getFilamentName());
}

public function test_get_filament_name_returns_display_name_when_name_is_null(): void
{
$user = User::factory()->create(['name' => null, 'display_name' => 'Custom Name']);

$this->assertSame('Custom Name', $user->getFilamentName());
}

public function test_get_filament_name_returns_email_when_name_and_display_name_are_null(): void
{
$user = User::factory()->create(['name' => null, 'display_name' => null]);

$this->assertSame($user->email, $user->getFilamentName());
}

public function test_get_filament_name_always_returns_string(): void
{
$user = User::factory()->create(['name' => null, 'display_name' => null]);

$this->assertIsString($user->getFilamentName());
}
}
Loading