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