]> BookStack Code Mirror - bookstack/blob - tests/User/UserPreferencesTest.php
Applied latest styleci changes
[bookstack] / tests / User / UserPreferencesTest.php
1 <?php
2
3 namespace Tests\User;
4
5 use BookStack\Entities\Models\Bookshelf;
6 use Tests\TestCase;
7
8 class UserPreferencesTest extends TestCase
9 {
10     public function test_update_sort_preference()
11     {
12         $editor = $this->getEditor();
13         $this->actingAs($editor);
14
15         $updateRequest = $this->patch('/settings/users/' . $editor->id . '/change-sort/books', [
16             'sort'  => 'created_at',
17             'order' => 'desc',
18         ]);
19         $updateRequest->assertStatus(302);
20
21         $this->assertDatabaseHas('settings', [
22             'setting_key' => 'user:' . $editor->id . ':books_sort',
23             'value'       => 'created_at',
24         ]);
25         $this->assertDatabaseHas('settings', [
26             'setting_key' => 'user:' . $editor->id . ':books_sort_order',
27             'value'       => 'desc',
28         ]);
29         $this->assertEquals('created_at', setting()->getForCurrentUser('books_sort'));
30         $this->assertEquals('desc', setting()->getForCurrentUser('books_sort_order'));
31     }
32
33     public function test_update_sort_preference_defaults()
34     {
35         $editor = $this->getEditor();
36         $this->actingAs($editor);
37
38         $updateRequest = $this->patch('/settings/users/' . $editor->id . '/change-sort/bookshelves', [
39             'sort'  => 'cat',
40             'order' => 'dog',
41         ]);
42         $updateRequest->assertStatus(302);
43
44         $this->assertEquals('name', setting()->getForCurrentUser('bookshelves_sort'));
45         $this->assertEquals('asc', setting()->getForCurrentUser('bookshelves_sort_order'));
46     }
47
48     public function test_update_sort_bad_entity_type_handled()
49     {
50         $editor = $this->getEditor();
51         $this->actingAs($editor);
52
53         $updateRequest = $this->patch('/settings/users/' . $editor->id . '/change-sort/dogs', [
54             'sort'  => 'name',
55             'order' => 'asc',
56         ]);
57         $updateRequest->assertStatus(500);
58
59         $this->assertNotEmpty('name', setting()->getForCurrentUser('bookshelves_sort'));
60         $this->assertNotEmpty('asc', setting()->getForCurrentUser('bookshelves_sort_order'));
61     }
62
63     public function test_update_expansion_preference()
64     {
65         $editor = $this->getEditor();
66         $this->actingAs($editor);
67
68         $updateRequest = $this->patch('/settings/users/' . $editor->id . '/update-expansion-preference/home-details', ['expand' => 'true']);
69         $updateRequest->assertStatus(204);
70
71         $this->assertDatabaseHas('settings', [
72             'setting_key' => 'user:' . $editor->id . ':section_expansion#home-details',
73             'value'       => 'true',
74         ]);
75         $this->assertEquals(true, setting()->getForCurrentUser('section_expansion#home-details'));
76
77         $invalidKeyRequest = $this->patch('/settings/users/' . $editor->id . '/update-expansion-preference/my-home-details', ['expand' => 'true']);
78         $invalidKeyRequest->assertStatus(500);
79     }
80
81     public function test_toggle_dark_mode()
82     {
83         $home = $this->actingAs($this->getEditor())->get('/');
84         $home->assertSee('Dark Mode');
85         $this->withHtml($home)->assertElementNotExists('.dark-mode');
86
87         $this->assertEquals(false, setting()->getForCurrentUser('dark-mode-enabled', false));
88         $prefChange = $this->patch('/settings/users/toggle-dark-mode');
89         $prefChange->assertRedirect();
90         $this->assertEquals(true, setting()->getForCurrentUser('dark-mode-enabled'));
91
92         $home = $this->actingAs($this->getEditor())->get('/');
93         $this->withHtml($home)->assertElementExists('.dark-mode');
94         $home->assertDontSee('Dark Mode');
95         $home->assertSee('Light Mode');
96     }
97
98     public function test_dark_mode_defaults_to_config_option()
99     {
100         config()->set('setting-defaults.user.dark-mode-enabled', false);
101         $this->assertEquals(false, setting()->getForCurrentUser('dark-mode-enabled'));
102         $home = $this->get('/login');
103         $this->withHtml($home)->assertElementNotExists('.dark-mode');
104
105         config()->set('setting-defaults.user.dark-mode-enabled', true);
106         $this->assertEquals(true, setting()->getForCurrentUser('dark-mode-enabled'));
107         $home = $this->get('/login');
108         $this->withHtml($home)->assertElementExists('.dark-mode');
109     }
110
111     public function test_books_view_type_preferences_when_list()
112     {
113         $editor = $this->getEditor();
114         setting()->putUser($editor, 'books_view_type', 'list');
115
116         $resp = $this->actingAs($editor)->get('/books');
117         $this->withHtml($resp)
118             ->assertElementNotExists('.featured-image-container')
119             ->assertElementExists('.content-wrap .entity-list-item');
120     }
121
122     public function test_books_view_type_preferences_when_grid()
123     {
124         $editor = $this->getEditor();
125         setting()->putUser($editor, 'books_view_type', 'grid');
126
127         $resp = $this->actingAs($editor)->get('/books');
128         $this->withHtml($resp)->assertElementExists('.featured-image-container');
129     }
130
131     public function test_shelf_view_type_change()
132     {
133         $editor = $this->getEditor();
134         /** @var Bookshelf $shelf */
135         $shelf = Bookshelf::query()->first();
136         setting()->putUser($editor, 'bookshelf_view_type', 'list');
137
138         $resp = $this->actingAs($editor)->get($shelf->getUrl())->assertSee('Grid View');
139         $this->withHtml($resp)
140             ->assertElementNotExists('.featured-image-container')
141             ->assertElementExists('.content-wrap .entity-list-item');
142
143         $req = $this->patch("/settings/users/{$editor->id}/switch-shelf-view", ['view_type' => 'grid']);
144         $req->assertRedirect($shelf->getUrl());
145
146         $resp = $this->actingAs($editor)->get($shelf->getUrl())
147             ->assertSee('List View');
148
149         $this->withHtml($resp)
150             ->assertElementExists('.featured-image-container')
151             ->assertElementNotExists('.content-wrap .entity-list-item');
152     }
153 }