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