Skip to content

Commit 21699ae

Browse files
authored
Merge pull request #316 from NativePHP/fix-filament-null-username
Fix Filament null username crash on impersonate banner
2 parents dce84d7 + f8272bf commit 21699ae

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

app/Models/User.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use App\Enums\Subscription;
88
use App\Enums\TeamUserStatus;
99
use Filament\Models\Contracts\FilamentUser;
10+
use Filament\Models\Contracts\HasName;
1011
use Filament\Panel;
1112
use Illuminate\Database\Eloquent\Casts\Attribute;
1213
use Illuminate\Database\Eloquent\Factories\HasFactory;
@@ -18,7 +19,7 @@
1819
use Laravel\Cashier\Billable;
1920
use Laravel\Sanctum\HasApiTokens;
2021

21-
class User extends Authenticatable implements FilamentUser
22+
class User extends Authenticatable implements FilamentUser, HasName
2223
{
2324
use Billable, HasApiTokens, HasFactory, Notifiable;
2425

@@ -30,6 +31,11 @@ class User extends Authenticatable implements FilamentUser
3031
'github_token',
3132
];
3233

34+
public function getFilamentName(): string
35+
{
36+
return $this->attributes['display_name'] ?? $this->name ?? $this->email;
37+
}
38+
3339
public function canAccessPanel(Panel $panel): bool
3440
{
3541
return $this->isAdmin();

tests/Feature/UserModelTest.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace Tests\Feature;
4+
5+
use App\Models\User;
6+
use Illuminate\Foundation\Testing\RefreshDatabase;
7+
use Tests\TestCase;
8+
9+
class UserModelTest extends TestCase
10+
{
11+
use RefreshDatabase;
12+
13+
public function test_get_filament_name_returns_name_when_present(): void
14+
{
15+
$user = User::factory()->create(['name' => 'John Doe']);
16+
17+
$this->assertSame('John Doe', $user->getFilamentName());
18+
}
19+
20+
public function test_get_filament_name_returns_display_name_when_name_is_null(): void
21+
{
22+
$user = User::factory()->create(['name' => null, 'display_name' => 'Custom Name']);
23+
24+
$this->assertSame('Custom Name', $user->getFilamentName());
25+
}
26+
27+
public function test_get_filament_name_returns_email_when_name_and_display_name_are_null(): void
28+
{
29+
$user = User::factory()->create(['name' => null, 'display_name' => null]);
30+
31+
$this->assertSame($user->email, $user->getFilamentName());
32+
}
33+
34+
public function test_get_filament_name_always_returns_string(): void
35+
{
36+
$user = User::factory()->create(['name' => null, 'display_name' => null]);
37+
38+
$this->assertIsString($user->getFilamentName());
39+
}
40+
}

0 commit comments

Comments
 (0)