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",
|
render partial: "boards/access_toggle",
|
||||||
collection: users, as: :user,
|
collection: users, as: :user,
|
||||||
locals: { selected: selected, disabled: disabled },
|
locals: { selected: selected, disabled: disabled },
|
||||||
cached: ->(user) { [ user, selected ] }
|
cached: ->(user) { [ user, selected, disabled ] }
|
||||||
end
|
end
|
||||||
|
|
||||||
def access_involvement_advance_button(board, user, show_watchers: true, icon_only: false)
|
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 all"
|
||||||
assert_select "button:not([disabled])", text: "Select none"
|
assert_select "button:not([disabled])", text: "Select none"
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
+1
-1
@@ -44,7 +44,7 @@ module ActiveSupport
|
|||||||
fixtures :all
|
fixtures :all
|
||||||
|
|
||||||
include ActiveJob::TestHelper
|
include ActiveJob::TestHelper
|
||||||
include ActionTextTestHelper, CardTestHelper, ChangeTestHelper, SessionTestHelper
|
include ActionTextTestHelper, CachingTestHelper, CardTestHelper, ChangeTestHelper, SessionTestHelper
|
||||||
include Turbo::Broadcastable::TestHelper
|
include Turbo::Broadcastable::TestHelper
|
||||||
|
|
||||||
setup do
|
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