Skip to content

Commit bea426d

Browse files
committed
Add test
1 parent be60370 commit bea426d

File tree

1 file changed

+74
-5
lines changed

1 file changed

+74
-5
lines changed

tests/Unit/BladeComponents/UserFullNameTest.php

Lines changed: 74 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,89 @@
33
namespace Tests\Unit\BladeComponents;
44

55
use App\Models\User;
6+
use Generator;
67
use Illuminate\Support\Facades\View;
8+
use PHPUnit\Framework\Assert;
9+
use PHPUnit\Framework\Attributes\DataProvider;
710
use Tests\TestCase;
811

912
class UserFullNameTest extends TestCase
1013
{
11-
public function testComponent()
14+
public static function provider(): Generator
1215
{
13-
$this->actingAs(User::factory()->viewUsers()->create());
16+
yield 'Renders link to user if they exist and the authenticated user can view them' => [
17+
function () {
18+
return [
19+
'actor' => User::factory()->viewUsers()->create(),
20+
'user' => User::factory()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']),
21+
'assertions' => function ($rendered) {
22+
Assert::assertStringContainsString('<a ', $rendered);
23+
Assert::assertStringContainsString('Jim Bagg', $rendered);
24+
},
25+
];
26+
}
27+
];
1428

15-
$user = User::factory()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']);
29+
yield 'Renders struck-through link to user if they are deleted and the authenticated user can view them' => [
30+
function () {
31+
return [
32+
'actor' => User::factory()->viewUsers()->create(),
33+
'user' => User::factory()->deleted()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']),
34+
'assertions' => function ($rendered) {
35+
Assert::assertStringContainsString('<s><a ', $rendered);
36+
Assert::assertStringContainsString('Jim Bagg', $rendered);
37+
},
38+
];
39+
}
40+
];
41+
42+
yield 'Renders name without link if the authenticated user cannot view them' => [
43+
function () {
44+
return [
45+
'actor' => User::factory()->create(),
46+
'user' => User::factory()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']),
47+
'assertions' => function ($rendered) {
48+
Assert::assertStringContainsString('<span>Jim Bagg', $rendered);
49+
Assert::assertStringNotContainsString('<a ', $rendered);
50+
},
51+
];
52+
}
53+
];
54+
55+
yield 'Renders struck-through name without link if the user is deleted and the authenticated user cannot view them' => [
56+
function () {
57+
return [
58+
'actor' => User::factory()->create(),
59+
'user' => User::factory()->deleted()->create(['first_name' => 'Jim', 'last_name' => 'Bagg']),
60+
'assertions' => function ($rendered) {
61+
Assert::assertStringContainsString('<s><span>Jim Bagg', $rendered);
62+
},
63+
];
64+
}
65+
];
66+
67+
yield 'Renders nothing if the provided user is null' => [
68+
function () {
69+
return [
70+
'actor' => User::factory()->create(),
71+
'user' => null,
72+
'assertions' => function ($rendered) {
73+
Assert::assertEmpty($rendered);
74+
},
75+
];
76+
}
77+
];
78+
}
79+
80+
#[DataProvider('provider')]
81+
public function testComponent($provided)
82+
{
83+
['actor' => $actor, 'user' => $user, 'assertions' => $assertions] = $provided();
84+
85+
$this->actingAs($actor);
1686

1787
$renderedTemplateString = View::make('blade.full-user-name', ['user' => $user])->render();
1888

19-
$this->assertStringContainsString('<a', $renderedTemplateString);
20-
$this->assertStringContainsString('Jim Bagg', $renderedTemplateString);
89+
$assertions($renderedTemplateString);
2190
}
2291
}

0 commit comments

Comments
 (0)