]> BookStack Code Mirror - bookstack/blob - tests/FavouriteTest.php
Started writing testing for favourites
[bookstack] / tests / FavouriteTest.php
1 <?php
2
3 use BookStack\Actions\Favourite;
4 use BookStack\Entities\Models\Page;
5 use Tests\TestCase;
6
7 class FavouriteTest extends TestCase
8 {
9
10     public function test_page_add_favourite_flow()
11     {
12         $page = Page::query()->first();
13         $editor = $this->getEditor();
14
15         $resp = $this->actingAs($editor)->get($page->getUrl());
16         $resp->assertElementContains('button', 'Favourite');
17         $resp->assertElementExists('form[method="POST"][action$="/favourites/add"]');
18
19         $resp = $this->post('/favourites/add', [
20             'type' => get_class($page),
21             'id' => $page->id,
22         ]);
23         $resp->assertRedirect($page->getUrl());
24         $resp->assertSessionHas('success', "\"{$page->name}\" has been added to your favourites");
25
26         $this->assertDatabaseHas('favourites', [
27             'user_id' => $editor->id,
28             'favouritable_type' => $page->getMorphClass(),
29             'favouritable_id' => $page->id,
30         ]);
31     }
32
33     public function test_page_remove_favourite_flow()
34     {
35         $page = Page::query()->first();
36         $editor = $this->getEditor();
37         Favourite::query()->forceCreate([
38             'user_id' => $editor->id,
39             'favouritable_id' => $page->id,
40             'favouritable_type' => $page->getMorphClass(),
41         ]);
42
43         $resp = $this->actingAs($editor)->get($page->getUrl());
44         $resp->assertElementContains('button', 'Unfavourite');
45         $resp->assertElementExists('form[method="POST"][action$="/favourites/remove"]');
46
47         $resp = $this->post('/favourites/remove', [
48             'type' => get_class($page),
49             'id' => $page->id,
50         ]);
51         $resp->assertRedirect($page->getUrl());
52         $resp->assertSessionHas('success', "\"{$page->name}\" has been removed from your favourites");
53
54         $this->assertDatabaseMissing('favourites', [
55             'user_id' => $editor->id,
56         ]);
57     }
58
59 }