1 # frozen_string_literal: true
 
   3 require "application_system_test_case"
 
   5 class UserLogoutTest < ApplicationSystemTestCase
 
   6   test "Sign out via link" do
 
   9     assert_no_content "Log In"
 
  11     click_on user.display_name
 
  13     assert_content "Log In"
 
  16   test "Sign out via link with referer" do
 
  20     assert_no_content "Log In"
 
  22     click_on user.display_name
 
  24     assert_content "Log In"
 
  25     assert_content "Public GPS Traces"
 
  28   test "Sign out via fallback page" do
 
  29     sign_in_as(create(:user))
 
  30     assert_no_content "Log In"
 
  33     assert_content "Logout from OpenStreetMap"
 
  36     assert_content "Log In"
 
  39   test "Sign out via fallback page with referer" do
 
  40     sign_in_as(create(:user))
 
  41     assert_no_content "Log In"
 
  43     visit logout_path(:referer => "/traces")
 
  44     assert_content "Logout from OpenStreetMap"
 
  47     assert_content "Log In"
 
  48     assert_content "Public GPS Traces"
 
  51   test "Sign out after navigating diary entries with Turbo pagination" do
 
  52     create(:language, :code => "en")
 
  53     create(:diary_entry, :title => "First Diary Entry")
 
  54     create_list(:diary_entry, 20) # rubocop:disable FactoryBot/ExcessiveCreateList
 
  56     check_sign_out_after_turbo_pagination diary_entries_path do
 
  57       assert_no_link "First Diary Entry"
 
  59       click_on "Older Entries", :match => :first
 
  61       assert_link "First Diary Entry"
 
  65   test "Sign out after navigating issues with Turbo pagination" do
 
  66     first_target_user = create(:user, :display_name => "First Target User")
 
  67     create(:issue, :reportable => first_target_user, :reported_user => first_target_user)
 
  68     create_list(:issue, 50) # rubocop:disable FactoryBot/ExcessiveCreateList
 
  70     check_sign_out_after_turbo_pagination issues_path do
 
  71       assert_no_link "First Target User"
 
  73       click_on "Older Issues", :match => :first
 
  75       assert_link "First Target User"
 
  79   test "Sign out after navigating traces with Turbo pagination" do
 
  80     create(:trace, :fixture => "a", :name => "First Trace")
 
  81     create_list(:trace, 20, :fixture => "a") # rubocop:disable FactoryBot/ExcessiveCreateList
 
  83     check_sign_out_after_turbo_pagination traces_path do
 
  84       assert_no_link "First Trace"
 
  86       click_on "Older Traces", :match => :first
 
  88       assert_link "First Trace"
 
  92   test "Sign out after navigating changeset comments with Turbo pagination" do
 
  94     create(:changeset_comment, :author => user, :body => "First Changeset Comment")
 
  95     create_list(:changeset_comment, 20, :author => user) # rubocop:disable FactoryBot/ExcessiveCreateList
 
  97     check_sign_out_after_turbo_pagination user_changeset_comments_path(user) do
 
  98       assert_no_text "First Changeset Comment"
 
 100       click_on "Older Comments", :match => :first
 
 102       assert_text "First Changeset Comment"
 
 106   test "Sign out after navigating diary comments with Turbo pagination" do
 
 107     create(:language, :code => "en")
 
 109     create(:diary_comment, :user => user, :body => "First Diary Comment")
 
 110     create_list(:diary_comment, 20, :user => user) # rubocop:disable FactoryBot/ExcessiveCreateList
 
 112     check_sign_out_after_turbo_pagination user_diary_comments_path(user) do
 
 113       assert_no_text "First Diary Comment"
 
 115       click_on "Older Comments", :match => :first
 
 117       assert_text "First Diary Comment"
 
 121   test "Sign out after navigating users with Turbo pagination" do
 
 122     create(:user, :display_name => "First User")
 
 123     create_list(:user, 50) # rubocop:disable FactoryBot/ExcessiveCreateList
 
 125     check_sign_out_after_turbo_pagination users_list_path do
 
 126       assert_no_link "First User"
 
 128       click_on "Older Users", :match => :first
 
 130       assert_link "First User"
 
 134   test "Sign out after navigating user blocks with Turbo pagination" do
 
 135     check_sign_out_after_turbo_pagination_on_block_pages user_blocks_path
 
 138   test "Sign out after navigating issued user blocks with Turbo pagination" do
 
 139     creator = create(:moderator_user)
 
 140     check_sign_out_after_turbo_pagination_on_block_pages user_issued_blocks_path(creator), :creator => creator
 
 143   test "Sign out after navigating received user blocks with Turbo pagination" do
 
 144     receiver = create(:user)
 
 145     check_sign_out_after_turbo_pagination_on_block_pages user_received_blocks_path(receiver), :receiver => receiver
 
 150   def check_sign_out_after_turbo_pagination_on_block_pages(path, receiver: create(:user), creator: create(:moderator_user))
 
 151     create(:user_block, :reason => "First User Block", :user => receiver, :creator => creator)
 
 152     create_list(:user_block, 20, :user => receiver, :creator => creator) # rubocop:disable FactoryBot/ExcessiveCreateList
 
 154     check_sign_out_after_turbo_pagination path do
 
 155       assert_no_text "First User Block"
 
 157       click_on "Older Blocks", :match => :first
 
 159       assert_text "First User Block"
 
 163   def check_sign_out_after_turbo_pagination(path, &)
 
 164     with_forgery_protection do
 
 165       user = create(:super_user)
 
 170       assert_no_link "Log In"
 
 172       within_content_body(&)
 
 174       click_on user.display_name
 
 181   def with_forgery_protection
 
 182     saved_allow_forgery_protection = ActionController::Base.allow_forgery_protection
 
 183     ActionController::Base.allow_forgery_protection = true
 
 187     ActionController::Base.allow_forgery_protection = saved_allow_forgery_protection