namespace Tests\User;
-use BookStack\Activity\Tools\UserEntityWatchOptions;
-use BookStack\Activity\WatchLevels;
use Tests\TestCase;
class UserPreferencesTest extends TestCase
{
- public function test_index_view()
- {
- $resp = $this->asEditor()->get('/preferences');
- $resp->assertOk();
- $resp->assertSee('Interface Keyboard Shortcuts');
- $resp->assertSee('Edit Profile');
- }
-
- public function test_index_view_accessible_but_without_profile_and_notifications_for_guest_user()
- {
- $this->setSettings(['app-public' => 'true']);
- $this->permissions->grantUserRolePermissions($this->users->guest(), ['receive-notifications']);
- $resp = $this->get('/preferences');
- $resp->assertOk();
- $resp->assertSee('Interface Keyboard Shortcuts');
- $resp->assertDontSee('Edit Profile');
- $resp->assertDontSee('Notification');
- }
- public function test_interface_shortcuts_updating()
- {
- $this->asEditor();
-
- // View preferences with defaults
- $resp = $this->get('/preferences/shortcuts');
- $resp->assertSee('Interface Keyboard Shortcuts');
-
- $html = $this->withHtml($resp);
- $html->assertFieldHasValue('enabled', 'false');
- $html->assertFieldHasValue('shortcut[home_view]', '1');
-
- // Update preferences
- $resp = $this->put('/preferences/shortcuts', [
- 'enabled' => 'true',
- 'shortcut' => ['home_view' => 'Ctrl + 1'],
- ]);
-
- $resp->assertRedirect('/preferences/shortcuts');
- $resp->assertSessionHas('success', 'Shortcut preferences have been updated!');
-
- // View updates to preferences page
- $resp = $this->get('/preferences/shortcuts');
- $html = $this->withHtml($resp);
- $html->assertFieldHasValue('enabled', 'true');
- $html->assertFieldHasValue('shortcut[home_view]', 'Ctrl + 1');
- }
-
- public function test_body_has_shortcuts_component_when_active()
- {
- $editor = $this->users->editor();
- $this->actingAs($editor);
-
- $this->withHtml($this->get('/'))->assertElementNotExists('body[component="shortcuts"]');
-
- setting()->putUser($editor, 'ui-shortcuts-enabled', 'true');
- $this->withHtml($this->get('/'))->assertElementExists('body[component="shortcuts"]');
- }
-
- public function test_notification_routes_requires_notification_permission()
- {
- $viewer = $this->users->viewer();
- $resp = $this->actingAs($viewer)->get('/preferences/notifications');
- $this->assertPermissionError($resp);
-
- $resp = $this->put('/preferences/notifications');
- $this->assertPermissionError($resp);
-
- $this->permissions->grantUserRolePermissions($viewer, ['receive-notifications']);
- $resp = $this->get('/preferences/notifications');
- $resp->assertOk();
- $resp->assertSee('Notification Preferences');
- }
-
- public function test_notification_preferences_updating()
- {
- $editor = $this->users->editor();
-
- // View preferences with defaults
- $resp = $this->actingAs($editor)->get('/preferences/notifications');
- $resp->assertSee('Notification Preferences');
-
- $html = $this->withHtml($resp);
- $html->assertFieldHasValue('preferences[comment-replies]', 'false');
-
- // Update preferences
- $resp = $this->put('/preferences/notifications', [
- 'preferences' => ['comment-replies' => 'true'],
- ]);
-
- $resp->assertRedirect('/preferences/notifications');
- $resp->assertSessionHas('success', 'Notification preferences have been updated!');
-
- // View updates to preferences page
- $resp = $this->get('/preferences/notifications');
- $html = $this->withHtml($resp);
- $html->assertFieldHasValue('preferences[comment-replies]', 'true');
- }
-
- public function test_notification_preferences_show_watches()
- {
- $editor = $this->users->editor();
- $book = $this->entities->book();
-
- $options = new UserEntityWatchOptions($editor, $book);
- $options->updateLevelByValue(WatchLevels::COMMENTS);
-
- $resp = $this->actingAs($editor)->get('/preferences/notifications');
- $resp->assertSee($book->name);
- $resp->assertSee('All Page Updates & Comments');
-
- $options->updateLevelByValue(WatchLevels::DEFAULT);
-
- $resp = $this->actingAs($editor)->get('/preferences/notifications');
- $resp->assertDontSee($book->name);
- $resp->assertDontSee('All Page Updates & Comments');
- }
-
- public function test_notification_preferences_not_accessible_to_guest()
- {
- $this->setSettings(['app-public' => 'true']);
- $guest = $this->users->guest();
- $this->permissions->grantUserRolePermissions($guest, ['receive-notifications']);
-
- $resp = $this->get('/preferences/notifications');
- $this->assertPermissionError($resp);
-
- $resp = $this->put('/preferences/notifications', [
- 'preferences' => ['comment-replies' => 'true'],
- ]);
- $this->assertPermissionError($resp);
- }
-
public function test_update_sort_preference()
{
$editor = $this->users->editor();
'sort' => 'name',
'order' => 'asc',
]);
- $updateRequest->assertStatus(500);
+ $updateRequest->assertRedirect();
$this->assertNotEmpty('name', setting()->getForCurrentUser('bookshelves_sort'));
$this->assertNotEmpty('asc', setting()->getForCurrentUser('bookshelves_sort_order'));
$this->withHtml($home)->assertElementExists('.dark-mode');
}
+ public function test_dark_mode_toggle_endpoint_changes_to_light_when_dark_by_default()
+ {
+ config()->set('setting-defaults.user.dark-mode-enabled', true);
+ $editor = $this->users->editor();
+
+ $this->assertEquals(true, setting()->getUser($editor, 'dark-mode-enabled'));
+ $prefChange = $this->actingAs($editor)->patch('/preferences/toggle-dark-mode');
+ $prefChange->assertRedirect();
+ $this->assertEquals(false, setting()->getUser($editor, 'dark-mode-enabled'));
+
+ $home = $this->get('/');
+ $this->withHtml($home)->assertElementNotExists('.dark-mode');
+ $home->assertDontSee('Light Mode');
+ $home->assertSee('Dark Mode');
+ }
+
public function test_books_view_type_preferences_when_list()
{
$editor = $this->users->editor();
->assertElementNotExists('.featured-image-container')
->assertElementExists('.content-wrap .entity-list-item');
- $req = $this->patch("/preferences/change-view/bookshelf", ['view' => 'grid']);
+ $req = $this->patch("/preferences/change-view/bookshelf", [
+ 'view' => 'grid',
+ '_return' => $shelf->getUrl(),
+ ]);
$req->assertRedirect($shelf->getUrl());
$resp = $this->actingAs($editor)->get($shelf->getUrl())