]> git.openstreetmap.org Git - rails.git/blob - test/system/user_logout_test.rb
Fix new rubocop warnings
[rails.git] / test / system / user_logout_test.rb
1 require "application_system_test_case"
2
3 class UserLogoutTest < ApplicationSystemTestCase
4   test "Sign out via link" do
5     user = create(:user)
6     sign_in_as(user)
7     assert_no_content "Log In"
8
9     click_on user.display_name
10     click_on "Log Out"
11     assert_content "Log In"
12   end
13
14   test "Sign out via link with referer" do
15     user = create(:user)
16     sign_in_as(user)
17     visit traces_path
18     assert_no_content "Log In"
19
20     click_on user.display_name
21     click_on "Log Out"
22     assert_content "Log In"
23     assert_content "Public GPS Traces"
24   end
25
26   test "Sign out via fallback page" do
27     sign_in_as(create(:user))
28     assert_no_content "Log In"
29
30     visit logout_path
31     assert_content "Logout from OpenStreetMap"
32
33     click_on "Logout"
34     assert_content "Log In"
35   end
36
37   test "Sign out via fallback page with referer" do
38     sign_in_as(create(:user))
39     assert_no_content "Log In"
40
41     visit logout_path(:referer => "/traces")
42     assert_content "Logout from OpenStreetMap"
43
44     click_on "Logout"
45     assert_content "Log In"
46     assert_content "Public GPS Traces"
47   end
48
49   test "Sign out after navigating diary entries with Turbo pagination" do
50     create(:language, :code => "en")
51     create(:diary_entry, :title => "First Diary Entry")
52     create_list(:diary_entry, 20) # rubocop:disable FactoryBot/ExcessiveCreateList
53
54     check_sign_out_after_turbo_pagination diary_entries_path do
55       assert_no_link "First Diary Entry"
56
57       click_on "Older Entries", :match => :first
58
59       assert_link "First Diary Entry"
60     end
61   end
62
63   test "Sign out after navigating issues with Turbo pagination" do
64     first_target_user = create(:user, :display_name => "First Target User")
65     create(:issue, :reportable => first_target_user, :reported_user => first_target_user)
66     create_list(:issue, 50) # rubocop:disable FactoryBot/ExcessiveCreateList
67
68     check_sign_out_after_turbo_pagination issues_path do
69       assert_no_link "First Target User"
70
71       click_on "Older Issues", :match => :first
72
73       assert_link "First Target User"
74     end
75   end
76
77   test "Sign out after navigating traces with Turbo pagination" do
78     create(:trace, :fixture => "a", :name => "First Trace")
79     create_list(:trace, 20, :fixture => "a") # rubocop:disable FactoryBot/ExcessiveCreateList
80
81     check_sign_out_after_turbo_pagination traces_path do
82       assert_no_link "First Trace"
83
84       click_on "Older Traces", :match => :first
85
86       assert_link "First Trace"
87     end
88   end
89
90   test "Sign out after navigating changeset comments with Turbo pagination" do
91     user = create(:user)
92     create(:changeset_comment, :author => user, :body => "First Changeset Comment")
93     create_list(:changeset_comment, 20, :author => user) # rubocop:disable FactoryBot/ExcessiveCreateList
94
95     check_sign_out_after_turbo_pagination user_changeset_comments_path(user) do
96       assert_no_text "First Changeset Comment"
97
98       click_on "Older Comments", :match => :first
99
100       assert_text "First Changeset Comment"
101     end
102   end
103
104   test "Sign out after navigating diary comments with Turbo pagination" do
105     create(:language, :code => "en")
106     user = create(:user)
107     create(:diary_comment, :user => user, :body => "First Diary Comment")
108     create_list(:diary_comment, 20, :user => user) # rubocop:disable FactoryBot/ExcessiveCreateList
109
110     check_sign_out_after_turbo_pagination user_diary_comments_path(user) do
111       assert_no_text "First Diary Comment"
112
113       click_on "Older Comments", :match => :first
114
115       assert_text "First Diary Comment"
116     end
117   end
118
119   test "Sign out after navigating users with Turbo pagination" do
120     create(:user, :display_name => "First User")
121     create_list(:user, 50) # rubocop:disable FactoryBot/ExcessiveCreateList
122
123     check_sign_out_after_turbo_pagination users_list_path do
124       assert_no_link "First User"
125
126       click_on "Older Users", :match => :first
127
128       assert_link "First User"
129     end
130   end
131
132   test "Sign out after navigating user blocks with Turbo pagination" do
133     check_sign_out_after_turbo_pagination_on_block_pages user_blocks_path
134   end
135
136   test "Sign out after navigating issued user blocks with Turbo pagination" do
137     creator = create(:moderator_user)
138     check_sign_out_after_turbo_pagination_on_block_pages user_issued_blocks_path(creator), :creator => creator
139   end
140
141   test "Sign out after navigating received user blocks with Turbo pagination" do
142     receiver = create(:user)
143     check_sign_out_after_turbo_pagination_on_block_pages user_received_blocks_path(receiver), :receiver => receiver
144   end
145
146   private
147
148   def check_sign_out_after_turbo_pagination_on_block_pages(path, receiver: create(:user), creator: create(:moderator_user))
149     create(:user_block, :reason => "First User Block", :user => receiver, :creator => creator)
150     create_list(:user_block, 20, :user => receiver, :creator => creator) # rubocop:disable FactoryBot/ExcessiveCreateList
151
152     check_sign_out_after_turbo_pagination path do
153       assert_no_text "First User Block"
154
155       click_on "Older Blocks", :match => :first
156
157       assert_text "First User Block"
158     end
159   end
160
161   def check_sign_out_after_turbo_pagination(path, &)
162     with_forgery_protection do
163       user = create(:super_user)
164       sign_in_as user
165
166       visit path
167
168       assert_no_link "Log In"
169
170       within_content_body(&)
171
172       click_on user.display_name
173       click_on "Log Out"
174
175       assert_link "Log In"
176     end
177   end
178
179   def with_forgery_protection
180     saved_allow_forgery_protection = ActionController::Base.allow_forgery_protection
181     ActionController::Base.allow_forgery_protection = true
182
183     yield
184   ensure
185     ActionController::Base.allow_forgery_protection = saved_allow_forgery_protection
186   end
187 end