]> git.openstreetmap.org Git - rails.git/blob - test/system/issues_test.rb
Add frozen_string_literal comments to ruby files
[rails.git] / test / system / issues_test.rb
1 # frozen_string_literal: true
2
3 require "application_system_test_case"
4
5 class IssuesTest < ApplicationSystemTestCase
6   include IssuesHelper
7
8   def test_view_issues_not_logged_in
9     visit issues_path
10
11     within_content_heading do
12       assert_content "Log In"
13     end
14   end
15
16   def test_view_issues_normal_user
17     sign_in_as(create(:user))
18
19     visit issues_path
20     assert_content "Forbidden"
21   end
22
23   def test_view_no_issues
24     sign_in_as(create(:moderator_user))
25
26     visit issues_path
27     assert_content I18n.t("issues.page.issues_not_found")
28   end
29
30   def test_view_issues
31     sign_in_as(create(:moderator_user))
32     issues = create_list(:issue, 3, :assigned_role => "moderator")
33
34     visit issues_path
35     assert_content issues.first.reported_user.display_name
36   end
37
38   def test_view_issue_with_report
39     sign_in_as(create(:moderator_user))
40     issue = create(:issue, :assigned_role => "moderator")
41     issue.reports << create(:report, :details => "test report text **with kramdown**")
42
43     visit issue_path(issue)
44     assert_content I18n.t("issues.show.reports", :count => 1)
45     assert_content "test report text with kramdown"
46     assert_selector "strong", :text => "with kramdown"
47   end
48
49   def test_view_issue_rich_text_container
50     sign_in_as(create(:moderator_user))
51     issue = create(:issue, :assigned_role => "moderator")
52     issue.reports << create(:report, :details => "paragraph one\n\n---\n\nparagraph two")
53
54     visit issue_path(issue)
55     assert_content I18n.t("issues.show.reports", :count => 1)
56     richtext = find "div.richtext"
57     richtext_elements = richtext.all "*"
58     assert_equal 3, richtext_elements.size
59     assert_equal "p", richtext_elements[0].tag_name
60     assert_equal "paragraph one", richtext_elements[0].text
61     assert_equal "hr", richtext_elements[1].tag_name
62     assert_equal "p", richtext_elements[2].tag_name
63     assert_equal "paragraph two", richtext_elements[2].text
64   end
65
66   def test_view_issues_with_no_reported_user
67     sign_in_as(create(:moderator_user))
68     anonymous_note = create(:note_with_comments)
69     issue = create(:issue, :reportable => anonymous_note, :assigned_role => "moderator")
70
71     visit issues_path
72     assert_content reportable_title(anonymous_note)
73
74     visit issue_path(issue)
75     assert_content reportable_title(anonymous_note)
76   end
77
78   def test_search_issues_by_user
79     good_user = create(:user)
80     bad_user = create(:user)
81     create(:issue, :reportable => bad_user, :reported_user => bad_user, :assigned_role => "administrator")
82
83     sign_in_as(create(:administrator_user))
84
85     # No issues against the user
86     visit issues_path
87     fill_in "search_by_user", :with => good_user.display_name
88     click_on "Search"
89     assert_no_content I18n.t("issues.page.user_not_found")
90     assert_content I18n.t("issues.page.issues_not_found")
91
92     # User doesn't exist
93     visit issues_path
94     fill_in "search_by_user", :with => "Nonexistent User"
95     click_on "Search"
96     assert_content I18n.t("issues.page.user_not_found")
97     assert_no_content I18n.t("issues.page.issues_not_found")
98
99     # Find Issue against bad_user
100     visit issues_path
101     fill_in "search_by_user", :with => bad_user.display_name
102     click_on "Search"
103     assert_no_content I18n.t("issues.page.user_not_found")
104     assert_no_content I18n.t("issues.page.issues_not_found")
105   end
106
107   def test_commenting
108     issue = create(:issue, :assigned_role => "moderator")
109     sign_in_as(create(:moderator_user))
110
111     visit issue_path(issue)
112
113     fill_in :issue_comment_body, :with => "test comment"
114     click_on "Add Comment"
115     assert_content I18n.t("issue_comments.create.comment_created")
116     assert_content "test comment"
117
118     issue.reload
119     assert_equal("test comment", issue.comments.first.body)
120   end
121
122   def test_reassign_issue_to_moderators
123     issue = create(:issue, :assigned_role => "administrator")
124     sign_in_as(create(:administrator_user))
125
126     visit issue_path(issue)
127
128     assert_unchecked_field "Reassign Issue to Moderators"
129     fill_in :issue_comment_body, :with => "reassigning to moderators"
130     check "Reassign Issue to Moderators"
131     click_on "Add Comment"
132
133     assert_content "and the issue was reassigned"
134     assert_current_path issues_path(:status => "open")
135
136     issue.reload
137     assert_equal "moderator", issue.assigned_role
138   end
139
140   def test_reassign_issue_to_administrators
141     issue = create(:issue, :assigned_role => "moderator")
142     sign_in_as(create(:moderator_user))
143
144     visit issue_path(issue)
145
146     assert_unchecked_field "Reassign Issue to Administrators"
147     fill_in :issue_comment_body, :with => "reassigning to administrators"
148     check "Reassign Issue to Administrators"
149     click_on "Add Comment"
150
151     assert_content "and the issue was reassigned"
152     assert_current_path issues_path(:status => "open")
153
154     issue.reload
155     assert_equal "administrator", issue.assigned_role
156   end
157
158   def test_reassign_issue_as_super_user
159     issue = create(:issue)
160     sign_in_as(create(:super_user))
161
162     visit issue_path(issue)
163
164     fill_in :issue_comment_body, :with => "reassigning to moderators"
165     check "Reassign Issue to Moderators"
166     click_on "Add Comment"
167
168     assert_content "and the issue was reassigned"
169     assert_current_path issue_path(issue)
170   end
171
172   def test_issue_index_with_multiple_roles
173     user1 = create(:user)
174     user2 = create(:user)
175     issue1 = create(:issue, :reportable => user1, :assigned_role => "administrator")
176     issue2 = create(:issue, :reportable => user2, :assigned_role => "moderator")
177
178     user = create(:administrator_user)
179     create(:user_role, :user => user, :role => "moderator")
180     sign_in_as(user)
181
182     visit issues_path
183
184     assert_link I18n.t("issues.page.reports_count", :count => issue1.reports_count), :href => issue_path(issue1)
185     assert_link I18n.t("issues.page.reports_count", :count => issue2.reports_count), :href => issue_path(issue2)
186   end
187
188   def test_issues_pagination
189     1.upto(8).each do |n|
190       user = create(:user, :display_name => "extra_#{n}")
191       create(:issue, :reportable => user, :reported_user => user, :assigned_role => "administrator")
192     end
193
194     sign_in_as(create(:administrator_user))
195
196     visit issues_path(:limit => 5)
197
198     # First Page
199     assert_no_content I18n.t("issues.page.user_not_found")
200     assert_no_content I18n.t("issues.page.issues_not_found")
201     4.upto(8).each do |n|
202       assert_content(/extra_#{n}[^\d]/i, :count => 2)
203     end
204     1.upto(3).each do |n|
205       assert_no_content(/extra_#{n}[^\d]/i)
206     end
207
208     # Second Page
209     click_on "Older Issues", :match => :first
210     assert_no_content I18n.t("issues.page.user_not_found")
211     assert_no_content I18n.t("issues.page.issues_not_found")
212     4.upto(8).each do |n|
213       assert_no_content(/extra_#{n}[^\d]/i)
214     end
215     1.upto(3).each do |n|
216       assert_content(/extra_#{n}[^\d]/i, :count => 2)
217     end
218
219     # Back to First Page
220     click_on "Newer Issues", :match => :first
221     assert_no_content I18n.t("issues.page.user_not_found")
222     assert_no_content I18n.t("issues.page.issues_not_found")
223     4.upto(8).each do |n|
224       assert_content(/extra_#{n}[^\d]/i, :count => 2)
225     end
226     1.upto(3).each do |n|
227       assert_no_content(/extra_#{n}[^\d]/i)
228     end
229   end
230
231   def test_single_issue_reporters
232     sign_in_as(create(:moderator_user))
233     issue = create(:issue, :assigned_role => "moderator")
234     issue.reports << create(:report, :user => create(:user, :display_name => "Test Name"))
235
236     visit issues_path
237     assert_content issue.reported_user.display_name
238     assert_content issue.reports.first.user.display_name
239   end
240
241   def test_multiple_issue_reporters
242     sign_in_as(create(:moderator_user))
243     issue = create(:issue, :assigned_role => "moderator")
244
245     create_list(:report, 5, :issue => issue)
246
247     visit issues_path
248     0.upto(1).each do |n|
249       assert_no_content issue.reports[n].user.display_name
250     end
251     2.upto(4).each do |n|
252       assert_content issue.reports[n].user.display_name
253     end
254   end
255
256   def test_ordering_issue_reporters
257     sign_in_as(create(:moderator_user))
258     issue = create(:issue, :assigned_role => "moderator")
259
260     create_list(:report, 5, :issue => issue)
261
262     4.downto(0).each do |n|
263       issue.reports << create(:report, :user => issue.reports[n].user)
264     end
265
266     visit issues_path
267     0.upto(2).each do |n|
268       assert_content issue.reports[n].user.display_name
269     end
270     3.upto(4).each do |n|
271       assert_no_content issue.reports[n].user.display_name
272     end
273   end
274
275   def test_view_managed_issue
276     issue = create(:issue, :assigned_role => "moderator")
277     issue.reports << create(:report)
278     moderator_user = create(:moderator_user)
279
280     sign_in_as(moderator_user)
281     visit issues_path
282
283     within_content_body do
284       assert_no_link moderator_user.display_name
285
286       click_on "1 Report"
287     end
288
289     within_content_heading do
290       assert_content "Open Issue ##{issue.id}"
291
292       click_on "Resolve"
293
294       assert_content "Resolved Issue ##{issue.id}"
295     end
296
297     visit issues_path
298
299     within_content_body do
300       assert_link moderator_user.display_name
301     end
302   end
303 end