diff --git a/tests/Unit/BladeComponents/UserFullNameTest.php b/tests/Unit/BladeComponents/UserFullNameTest.php index 8c36cb4ffe..bbd74c7fa1 100644 --- a/tests/Unit/BladeComponents/UserFullNameTest.php +++ b/tests/Unit/BladeComponents/UserFullNameTest.php @@ -3,20 +3,89 @@ namespace Tests\Unit\BladeComponents; use App\Models\User; +use Generator; use Illuminate\Support\Facades\View; +use PHPUnit\Framework\Assert; +use PHPUnit\Framework\Attributes\DataProvider; use Tests\TestCase; class UserFullNameTest extends TestCase { - public function testComponent() + public static function provider(): Generator { - $this->actingAs(User::factory()->viewUsers()->create()); + 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']), + 'assertions' => function ($rendered) { + Assert::assertStringContainsString('create(['first_name' => 'Jim', 'last_name' => 'Bagg']); + 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']), + '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(); - $this->assertStringContainsString('assertStringContainsString('Jim Bagg', $renderedTemplateString); + $assertions($renderedTemplateString); } }