require "test_helper" class AccountsControllerTest < ActionDispatch::IntegrationTest setup do sign_in :david end test "edit" do get edit_account_url assert_response :ok end test "edit groups administrators separately from members with a divider" do get edit_account_url assert_response :ok # Verify the divider exists between administrator and member sections assert_select "turbo-frame#account_users hr.separator.full-width" # Verify administrators appear before the divider and members appear after # by checking the order of user names in the response body administrators = users(:david, :jason).map(&:name) members = users(:jz, :kevin).map(&:name) response_body = response.body # Find positions of divider and user names divider_position = response_body.index('hr class="separator full-width"') assert divider_position, "Divider should exist in the response" administrators.each do |name| name_position = response_body.index("#{name}") assert name_position, "Administrator #{name} should appear in the response" assert name_position < divider_position, "Administrator #{name} should appear before the divider" end members.each do |name| name_position = response_body.index("#{name}") assert name_position, "Member #{name} should appear in the response" assert name_position > divider_position, "Member #{name} should appear after the divider" end end test "edit lists a page of members and the next page carries on from it" do User.insert_all 501.times.map { |i| { name: "Member #{i}", email_address: "member#{i}@37signals.com" } } get edit_account_url first_page = listed_user_ids get account_users_url(page: 2, format: :turbo_stream) next_page = listed_user_ids assert_not_empty next_page assert_equal User.active.without_bots.ids.sort, (first_page + next_page).sort end test "update" do assert users(:david).administrator? put account_url, params: { account: { name: "Different" } } assert_redirected_to edit_account_url assert_equal accounts(:signal).name, "Different" end test "non-admins cannot update" do sign_in :kevin assert users(:kevin).member? put account_url, params: { account: { name: "Different" } } assert_response :forbidden end private def listed_user_ids response.body.scan(/id="role_user_(\d+)"/).flatten.map(&:to_i) end end