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