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_dont_error_on_deleted_items()
- {
- $editor = $this->users->editor();
- $book = $this->entities->book();
-
- $options = new UserEntityWatchOptions($editor, $book);
- $options->updateLevelByValue(WatchLevels::COMMENTS);
-
- $this->actingAs($editor)->delete($book->getUrl());
- $book->refresh();
- $this->assertNotNull($book->deleted_at);
-
- $resp = $this->actingAs($editor)->get('/preferences/notifications');
- $resp->assertOk();
- $resp->assertDontSee($book->name);
- }
-
- 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_notification_comment_options_only_exist_if_comments_active()
- {
- $resp = $this->asEditor()->get('/preferences/notifications');
- $resp->assertSee('Notify upon comments');
- $resp->assertSee('Notify upon replies');
-
- setting()->put('app-disable-comments', true);
-
- $resp = $this->get('/preferences/notifications');
- $resp->assertDontSee('Notify upon comments');
- $resp->assertDontSee('Notify upon replies');
- }
-
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'));
->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())