Skip to content

Commit 4f6e0ea

Browse files
committed
✅ mis en place des tests unitaires pour les discussions
1 parent 7ddf5be commit 4f6e0ea

File tree

3 files changed

+90
-1
lines changed

3 files changed

+90
-1
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace Database\Factories;
4+
5+
use App\Models\User;
6+
use Illuminate\Database\Eloquent\Factories\Factory;
7+
8+
class DiscussionFactory extends Factory
9+
{
10+
public function definition()
11+
{
12+
return [
13+
'user_id' => $attributes['user_id'] ?? User::factory(),
14+
'title' => $this->faker->sentence(),
15+
'body' => $this->faker->paragraphs(3, true),
16+
'slug' => $this->faker->unique()->slug(),
17+
];
18+
}
19+
}

database/factories/TagFactory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public function definition()
2323
{
2424
return [
2525
'name' => $this->faker->text(15),
26-
'slug' => $this->faker->slug,
26+
'slug' => $this->faker->slug(),
2727
'concerns' => ['post', 'discussion', 'tutorial'],
2828
];
2929
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
3+
use App\Models\Activity;
4+
use App\Models\Discussion;
5+
use App\Models\Tag;
6+
7+
it('can find by slug', function () {
8+
Discussion::factory()->create(['slug' => 'foo']);
9+
10+
expect(Discussion::findBySlug('foo'))->toBeInstanceOf(Discussion::class);
11+
});
12+
13+
it('can give an excerpt of its body', function () {
14+
$discussion = Discussion::factory()->make(['body' => 'This is a pretty long text.']);
15+
16+
expect($discussion->excerpt(7))->toEqual('This is...');
17+
});
18+
19+
test('html in excerpts is html encoded', function () {
20+
$discussion = Discussion::factory()->make(['body' => '<p>Discussion body</p>']);
21+
22+
expect($discussion->excerpt())->toEqual("&lt;p&gt;Discussion body&lt;/p&gt;\n");
23+
});
24+
25+
it('can have many tags', function () {
26+
$tags = Tag::factory()->count(3)->create();
27+
$discussion = Discussion::factory()->create();
28+
$discussion->syncTags($tags->modelKeys());
29+
30+
expect($discussion->tags->count())->toEqual(3);
31+
});
32+
33+
it('records activity when a discussion is created', function () {
34+
actingAs();
35+
36+
$discussion = Discussion::factory()->create(['user_id' => auth()->id()]);
37+
38+
$this->assertDatabaseHas('activities', [
39+
'type' => 'created_discussion',
40+
'user_id' => auth()->id(),
41+
'subject_id' => $discussion->id,
42+
'subject_type' => Discussion::class,
43+
]);
44+
45+
$activity = Activity::first();
46+
47+
$this->assertEquals($activity->subject->id, $discussion->id);
48+
49+
$this->assertEquals(auth()->user()->activities->count(), 1);
50+
});
51+
52+
it('generates a slug when valid url characters provided', function () {
53+
$discussion = Discussion::factory()->make(['slug' => 'Help with eloquent']);
54+
55+
expect($discussion->slug())->toEqual('help-with-eloquent');
56+
});
57+
58+
it('generates a unique slug when valid url characters provided', function () {
59+
$discussionOne = Discussion::factory()->create(['slug' => 'Help with eloquent']);
60+
$discussionTwo = Discussion::factory()->create(['slug' => 'Help with eloquent']);
61+
62+
expect($discussionTwo->slug())->toEqual('help-with-eloquent-1');
63+
});
64+
65+
it('generates a slug when invalid url characters provided', function () {
66+
$discussion = Discussion::factory()->make(['slug' => '한글 테스트']);
67+
68+
// When providing a slug with invalid url characters, a random 5 character string is returned.
69+
expect($discussion->slug())->toMatch('/\w{5}/');
70+
});

0 commit comments

Comments
 (0)