diff --git a/app/Http/Controllers/Accessories/AccessoriesController.php b/app/Http/Controllers/Accessories/AccessoriesController.php index bc1ac56fc976..66a914e9a941 100755 --- a/app/Http/Controllers/Accessories/AccessoriesController.php +++ b/app/Http/Controllers/Accessories/AccessoriesController.php @@ -220,7 +220,10 @@ public function destroy($accessoryId) : RedirectResponse */ public function show(Accessory $accessory) : View | RedirectResponse { - $accessory = Accessory::withCount('checkouts as checkouts_count')->find($accessory->id); + $accessory->loadCount('checkouts as checkouts_count'); + + $accessory->load(['adminuser' => fn($query) => $query->withTrashed()]); + $this->authorize('view', $accessory); return view('accessories.view', compact('accessory')); } diff --git a/resources/views/accessories/view.blade.php b/resources/views/accessories/view.blade.php index 137f64fef3ab..9a7a402cb0b6 100644 --- a/resources/views/accessories/view.blade.php +++ b/resources/views/accessories/view.blade.php @@ -317,20 +317,18 @@ class="table table-striped snipe-table" @endif -
-
- - {{ trans('general.created_by') }} - -
-
- @if ($accessory->adminuser) - {{ $accessory->adminuser->present()->fullName() }} - @else - {{ trans('admin/reports/general.deleted_user') }} - @endif + @if ($accessory->adminuser) +
+
+ + {{ trans('general.created_by') }} + +
+
+ +
-
+ @endif
diff --git a/resources/views/blade/full-user-name.blade.php b/resources/views/blade/full-user-name.blade.php new file mode 100644 index 000000000000..2e072236a7da --- /dev/null +++ b/resources/views/blade/full-user-name.blade.php @@ -0,0 +1,27 @@ +@props([ + 'user' +]) + +@if($user) + @php + $fullName = $user->present()->fullName(); + @endphp + + @can('view', $user) + @if(! $user->trashed()) + {{-- if the user is in database but soft-deleted --}} + {{ $fullName }} + @else + {{-- if the user exists --}} + {{ $fullName }} + @endif + @else + @if(! $user->trashed()) + {{-- if the user is in database but soft-deleted --}} + {{ $fullName }} + @else + {{-- if the user exists --}} + {{ $fullName }} + @endif + @endcan +@endif diff --git a/tests/Unit/BladeComponents/UserFullNameTest.php b/tests/Unit/BladeComponents/UserFullNameTest.php new file mode 100644 index 000000000000..bbd74c7fa179 --- /dev/null +++ b/tests/Unit/BladeComponents/UserFullNameTest.php @@ -0,0 +1,91 @@ + [ + function () { + return [ + 'actor' => User::factory()->viewUsers()->create(), + 'user' => User::factory()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']), + 'assertions' => function ($rendered) { + Assert::assertStringContainsString(' [ + function () { + return [ + 'actor' => User::factory()->viewUsers()->create(), + 'user' => User::factory()->deleted()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']), + 'assertions' => function ($rendered) { + Assert::assertStringContainsString(' [ + function () { + return [ + 'actor' => User::factory()->create(), + 'user' => User::factory()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']), + 'assertions' => function ($rendered) { + Assert::assertStringContainsString('Jim Bagg', $rendered); + Assert::assertStringNotContainsString(' [ + function () { + return [ + 'actor' => User::factory()->create(), + 'user' => User::factory()->deleted()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']), + 'assertions' => function ($rendered) { + Assert::assertStringContainsString('Jim Bagg', $rendered); + }, + ]; + } + ]; + + yield 'Renders nothing if the provided user is null' => [ + function () { + return [ + 'actor' => User::factory()->create(), + 'user' => null, + 'assertions' => function ($rendered) { + Assert::assertEmpty($rendered); + }, + ]; + } + ]; + } + + #[DataProvider('provider')] + public function testComponent($provided) + { + ['actor' => $actor, 'user' => $user, 'assertions' => $assertions] = $provided(); + + $this->actingAs($actor); + + $renderedTemplateString = View::make('blade.full-user-name', ['user' => $user])->render(); + + $assertions($renderedTemplateString); + } +}