]> BookStack Code Mirror - bookstack/blob - tests/User/UserPreferencesTest.php
49c49188b2451f0b74cf017210f0b5baafd23f80
[bookstack] / tests / User / UserPreferencesTest.php
1 <?php namespace Tests\User;
2
3 use Tests\TestCase;
4
5 class UserPreferencesTest extends TestCase
6 {
7
8     public function test_update_sort_preference()
9     {
10         $editor = $this->getEditor();
11         $this->actingAs($editor);
12
13         $updateRequest = $this->patch('/settings/users/' . $editor->id.'/change-sort/books', [
14             'sort' => 'created_at',
15             'order' => 'desc'
16         ]);
17         $updateRequest->assertStatus(302);
18
19         $this->assertDatabaseHas('settings', [
20             'setting_key' => 'user:' . $editor->id . ':books_sort',
21             'value' => 'created_at'
22         ]);
23         $this->assertDatabaseHas('settings', [
24             'setting_key' => 'user:' . $editor->id . ':books_sort_order',
25             'value' => 'desc'
26         ]);
27         $this->assertEquals('created_at', setting()->getForCurrentUser('books_sort'));
28         $this->assertEquals('desc', setting()->getForCurrentUser('books_sort_order'));
29     }
30
31     public function test_update_sort_preference_defaults()
32     {
33         $editor = $this->getEditor();
34         $this->actingAs($editor);
35
36         $updateRequest = $this->patch('/settings/users/' . $editor->id.'/change-sort/bookshelves', [
37             'sort' => 'cat',
38             'order' => 'dog'
39         ]);
40         $updateRequest->assertStatus(302);
41
42         $this->assertEquals('name', setting()->getForCurrentUser('bookshelves_sort'));
43         $this->assertEquals('asc', setting()->getForCurrentUser('bookshelves_sort_order'));
44     }
45
46     public function test_update_sort_bad_entity_type_handled()
47     {
48         $editor = $this->getEditor();
49         $this->actingAs($editor);
50
51         $updateRequest = $this->patch('/settings/users/' . $editor->id.'/change-sort/dogs', [
52             'sort' => 'name',
53             'order' => 'asc'
54         ]);
55         $updateRequest->assertStatus(500);
56
57         $this->assertNotEmpty('name', setting()->getForCurrentUser('bookshelves_sort'));
58         $this->assertNotEmpty('asc', setting()->getForCurrentUser('bookshelves_sort_order'));
59     }
60
61     public function test_update_expansion_preference()
62     {
63         $editor = $this->getEditor();
64         $this->actingAs($editor);
65
66         $updateRequest = $this->patch('/settings/users/' . $editor->id.'/update-expansion-preference/home-details', ['expand' => 'true']);
67         $updateRequest->assertStatus(204);
68
69         $this->assertDatabaseHas('settings', [
70             'setting_key' => 'user:' . $editor->id . ':section_expansion#home-details',
71             'value' => 'true'
72         ]);
73         $this->assertEquals(true, setting()->getForCurrentUser('section_expansion#home-details'));
74
75         $invalidKeyRequest = $this->patch('/settings/users/' . $editor->id.'/update-expansion-preference/my-home-details', ['expand' => 'true']);
76         $invalidKeyRequest->assertStatus(500);
77     }
78
79     public function test_toggle_dark_mode()
80     {
81         $home = $this->actingAs($this->getEditor())->get('/');
82         $home->assertElementNotExists('.dark-mode');
83         $home->assertSee('Dark Mode');
84
85         $this->assertEquals(false, setting()->getForCurrentUser('dark-mode-enabled', false));
86         $prefChange = $this->patch('/settings/users/toggle-dark-mode');
87         $prefChange->assertRedirect();
88         $this->assertEquals(true, setting()->getForCurrentUser('dark-mode-enabled'));
89
90         $home = $this->actingAs($this->getEditor())->get('/');
91         $home->assertElementExists('.dark-mode');
92         $home->assertDontSee('Dark Mode');
93         $home->assertSee('Light Mode');
94     }
95
96     public function test_dark_mode_defaults_to_config_option()
97     {
98         config()->set('setting-defaults.user.dark-mode-enabled', false);
99         $this->assertEquals(false, setting()->getForCurrentUser('dark-mode-enabled'));
100         $home = $this->get('/login');
101         $home->assertElementNotExists('.dark-mode');
102
103         config()->set('setting-defaults.user.dark-mode-enabled', true);
104         $this->assertEquals(true, setting()->getForCurrentUser('dark-mode-enabled'));
105         $home = $this->get('/login');
106         $home->assertElementExists('.dark-mode');
107     }
108 }