Files
snipe-it/tests/Unit/BladeComponents/UserFullNameTest.php

96 lines
3.6 KiB
PHP
Raw Permalink Normal View History

2025-05-22 16:33:45 -07:00
<?php
namespace Tests\Unit\BladeComponents;
use App\Models\User;
2025-05-22 16:54:52 -07:00
use Generator;
2025-05-22 16:33:45 -07:00
use Illuminate\Support\Facades\View;
2025-05-22 16:54:52 -07:00
use PHPUnit\Framework\Assert;
use PHPUnit\Framework\Attributes\DataProvider;
2025-05-22 16:33:45 -07:00
use Tests\TestCase;
class UserFullNameTest extends TestCase
{
2025-05-22 16:54:52 -07:00
public static function provider(): Generator
2025-05-22 16:33:45 -07:00
{
2025-05-22 16:54:52 -07:00
yield 'Renders link to user if they exist and the authenticated user can view them' => [
function () {
return [
'actor' => User::factory()->viewUsers()->create(),
'user' => User::factory()->create(['first_name' => 'Jim', 'last_name' => 'Bagg', 'display_name' => null]),
2025-05-22 16:54:52 -07:00
'assertions' => function ($rendered) {
Assert::assertStringContainsString('<a ', $rendered);
Assert::assertStringContainsString('Jim Bagg', $rendered);
},
];
}
];
2025-05-22 16:33:45 -07:00
2025-05-22 16:54:52 -07:00
yield 'Renders struck-through link to user if they are deleted and the authenticated user can view them' => [
function () {
return [
'actor' => User::factory()->viewUsers()->create(),
'user' => User::factory()->deleted()->create(['first_name' => 'Jim', 'last_name' => 'Bagg', 'display_name' => 'Jim Baggins']),
2025-05-22 16:54:52 -07:00
'assertions' => function ($rendered) {
Assert::assertStringContainsString('<s><a ', $rendered);
Assert::assertStringContainsString('Jim Bagg', $rendered);
},
];
}
];
yield 'Renders name without link if the authenticated user cannot view them' => [
function () {
return [
'actor' => User::factory()->create(),
'user' => User::factory()->create(['first_name' => 'Jim', 'last_name' => 'Bagg', 'display_name' => 'Jim Bagg']),
2025-05-22 16:54:52 -07:00
'assertions' => function ($rendered) {
Assert::assertStringContainsString('<span>Jim Bagg', $rendered);
Assert::assertStringNotContainsString('<a ', $rendered);
},
];
}
];
yield 'Renders struck-through name without link if the user is deleted and the authenticated user cannot view them' => [
function () {
return [
'actor' => User::factory()->create(),
'user' => User::factory()->deleted()->create(['first_name' => 'Jim', 'last_name' => 'Bagg', 'display_name' => 'Jim Bagg']),
2025-05-22 16:54:52 -07:00
'assertions' => function ($rendered) {
Assert::assertStringContainsString('<s><span>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();
// $user->displayName();
// \Log::error($user->toArray());
2025-05-22 16:54:52 -07:00
$this->actingAs($actor);
2025-05-22 16:33:45 -07:00
$renderedTemplateString = View::make('blade.full-user-name', ['user' => $user])->render();
2025-05-22 16:54:52 -07:00
$assertions($renderedTemplateString);
2025-05-22 16:33:45 -07:00
}
}