1 # frozen_string_literal: true
3 require "application_system_test_case"
5 class IssuesTest < ApplicationSystemTestCase
8 def test_view_issues_not_logged_in
11 within_content_heading do
12 assert_content "Log In"
16 def test_view_issues_normal_user
17 sign_in_as(create(:user))
20 assert_content "Forbidden"
23 def test_view_no_issues
24 sign_in_as(create(:moderator_user))
27 assert_content I18n.t("issues.page.issues_not_found")
31 sign_in_as(create(:moderator_user))
32 issues = create_list(:issue, 3, :assigned_role => "moderator")
35 assert_content issues.first.reported_user.display_name
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**")
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"
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")
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
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")
72 assert_content reportable_title(anonymous_note)
74 visit issue_path(issue)
75 assert_content reportable_title(anonymous_note)
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")
83 sign_in_as(create(:administrator_user))
85 # No issues against the user
87 fill_in "search_by_user", :with => good_user.display_name
89 assert_no_content I18n.t("issues.page.user_not_found")
90 assert_content I18n.t("issues.page.issues_not_found")
94 fill_in "search_by_user", :with => "Nonexistent User"
96 assert_content I18n.t("issues.page.user_not_found")
97 assert_no_content I18n.t("issues.page.issues_not_found")
99 # Find Issue against bad_user
101 fill_in "search_by_user", :with => bad_user.display_name
103 assert_no_content I18n.t("issues.page.user_not_found")
104 assert_no_content I18n.t("issues.page.issues_not_found")
108 issue = create(:issue, :assigned_role => "moderator")
109 sign_in_as(create(:moderator_user))
111 visit issue_path(issue)
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"
119 assert_equal("test comment", issue.comments.first.body)
122 def test_reassign_issue_to_moderators
123 issue = create(:issue, :assigned_role => "administrator")
124 sign_in_as(create(:administrator_user))
126 visit issue_path(issue)
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"
133 assert_content "and the issue was reassigned"
134 assert_current_path issues_path(:status => "open")
137 assert_equal "moderator", issue.assigned_role
140 def test_reassign_issue_to_administrators
141 issue = create(:issue, :assigned_role => "moderator")
142 sign_in_as(create(:moderator_user))
144 visit issue_path(issue)
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"
151 assert_content "and the issue was reassigned"
152 assert_current_path issues_path(:status => "open")
155 assert_equal "administrator", issue.assigned_role
158 def test_reassign_issue_as_super_user
159 issue = create(:issue)
160 sign_in_as(create(:super_user))
162 visit issue_path(issue)
164 fill_in :issue_comment_body, :with => "reassigning to moderators"
165 check "Reassign Issue to Moderators"
166 click_on "Add Comment"
168 assert_content "and the issue was reassigned"
169 assert_current_path issue_path(issue)
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")
178 user = create(:administrator_user)
179 create(:user_role, :user => user, :role => "moderator")
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)
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")
194 sign_in_as(create(:administrator_user))
196 visit issues_path(:limit => 5)
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)
204 1.upto(3).each do |n|
205 assert_no_content(/extra_#{n}[^\d]/i)
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)
215 1.upto(3).each do |n|
216 assert_content(/extra_#{n}[^\d]/i, :count => 2)
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)
226 1.upto(3).each do |n|
227 assert_no_content(/extra_#{n}[^\d]/i)
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"))
237 assert_content issue.reported_user.display_name
238 assert_content issue.reports.first.user.display_name
241 def test_multiple_issue_reporters
242 sign_in_as(create(:moderator_user))
243 issue = create(:issue, :assigned_role => "moderator")
245 create_list(:report, 5, :issue => issue)
248 0.upto(1).each do |n|
249 assert_no_content issue.reports[n].user.display_name
251 2.upto(4).each do |n|
252 assert_content issue.reports[n].user.display_name
256 def test_ordering_issue_reporters
257 sign_in_as(create(:moderator_user))
258 issue = create(:issue, :assigned_role => "moderator")
260 create_list(:report, 5, :issue => issue)
262 4.downto(0).each do |n|
263 issue.reports << create(:report, :user => issue.reports[n].user)
267 0.upto(2).each do |n|
268 assert_content issue.reports[n].user.display_name
270 3.upto(4).each do |n|
271 assert_no_content issue.reports[n].user.display_name
275 def test_view_managed_issue
276 issue = create(:issue, :assigned_role => "moderator")
277 issue.reports << create(:report)
278 moderator_user = create(:moderator_user)
280 sign_in_as(moderator_user)
283 within_content_body do
284 assert_no_link moderator_user.display_name
289 within_content_heading do
290 assert_content "Open Issue ##{issue.id}"
294 assert_content "Resolved Issue ##{issue.id}"
299 within_content_body do
300 assert_link moderator_user.display_name