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