Ensure user toggles on board edit page are cached properly
Not including the disabled flag as part of the cache resulted in issues like the one described in #1992
This commit is contained in:
@@ -12,7 +12,7 @@ module AccessesHelper
|
||||
render partial: "boards/access_toggle",
|
||||
collection: users, as: :user,
|
||||
locals: { selected: selected, disabled: disabled },
|
||||
cached: ->(user) { [ user, selected ] }
|
||||
cached: ->(user) { [ user, selected, disabled ] }
|
||||
end
|
||||
|
||||
def access_involvement_advance_button(board, user, show_watchers: true, icon_only: false)
|
||||
|
||||
@@ -166,4 +166,28 @@ class BoardsControllerTest < ActionDispatch::IntegrationTest
|
||||
assert_select "button:not([disabled])", text: "Select all"
|
||||
assert_select "button:not([disabled])", text: "Select none"
|
||||
end
|
||||
|
||||
test "access toggle disabled state is cached correctly" do
|
||||
board = boards(:writebook)
|
||||
david = users(:david)
|
||||
|
||||
with_actionview_partial_caching do
|
||||
# privileged user
|
||||
assert users(:kevin).can_administer_board?(board)
|
||||
|
||||
get edit_board_path(board)
|
||||
|
||||
assert_response :success
|
||||
assert_select "input.switch__input[name='user_ids[]'][value='#{david.id}']:not([disabled])"
|
||||
|
||||
# unprivileged user
|
||||
logout_and_sign_in_as :jz
|
||||
assert_not users(:jz).can_administer_board?(board)
|
||||
|
||||
get edit_board_path(board)
|
||||
|
||||
assert_response :success
|
||||
assert_select "input.switch__input[name='user_ids[]'][value='#{david.id}'][disabled]"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ module ActiveSupport
|
||||
fixtures :all
|
||||
|
||||
include ActiveJob::TestHelper
|
||||
include ActionTextTestHelper, CardTestHelper, ChangeTestHelper, SessionTestHelper
|
||||
include ActionTextTestHelper, CachingTestHelper, CardTestHelper, ChangeTestHelper, SessionTestHelper
|
||||
include Turbo::Broadcastable::TestHelper
|
||||
|
||||
setup do
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
module CachingTestHelper
|
||||
def with_actionview_partial_caching
|
||||
was_cache = ActionView::PartialRenderer.collection_cache
|
||||
was_perform_caching = ApplicationController.perform_caching
|
||||
begin
|
||||
ActionView::PartialRenderer.collection_cache = ActiveSupport::Cache.lookup_store(:memory_store)
|
||||
ApplicationController.perform_caching = true
|
||||
yield
|
||||
ensure
|
||||
ActionView::PartialRenderer.collection_cache = was_cache
|
||||
ApplicationController.perform_caching = was_perform_caching
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user