3 class IssuesControllerTest < ActionController::TestCase
5 # cleanup any emails set off by the test
6 ActionMailer::Base.deliveries.clear
9 def test_view_dashboard_without_auth
10 # Access issues_path without login
12 assert_response :redirect
13 assert_redirected_to login_path(:referer => issues_path)
15 # Access issues_path as normal user
16 session[:user] = create(:user).id
18 assert_response :redirect
19 assert_redirected_to root_path
21 # Access issues_path by admin
22 session[:user] = create(:administrator_user).id
24 assert_response :success
26 # Access issues_path by moderator
27 session[:user] = create(:moderator_user).id
29 assert_response :success
32 def test_new_issue_without_login
33 # Test creation of a new issue and a new report without logging in
34 get :new, :params => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 1 }
35 assert_response :redirect
36 assert_redirected_to login_path(:referer => new_issue_path(:reportable_id => 1, :reportable_type => "User", :reported_user_id => 1))
39 def test_new_issue_after_login
40 # Test creation of a new issue and a new report
41 target_user = create(:user)
44 session[:user] = create(:user).id
46 assert_equal Issue.count, 0
48 # Create an Issue and a report
49 get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
50 assert_response :success
51 assert_difference "Issue.count", 1 do
52 details = "Details of a report"
55 :report => { :details => details },
56 :report_type => "[OFFENSIVE]",
57 :issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
60 assert_equal Issue.count, 1
61 assert_response :redirect
62 assert_redirected_to root_path
65 def test_new_report_with_incomplete_details
66 # Test creation of a new issue and a new report
67 target_user = create(:user)
70 session[:user] = create(:user).id
72 assert_equal Issue.count, 0
74 # Create an Issue and a report
75 get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
76 assert_response :success
77 assert_difference "Issue.count", 1 do
78 details = "Details of a report"
81 :report => { :details => details },
82 :report_type => "[OFFENSIVE]",
83 :issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
86 assert_equal Issue.count, 1
87 assert_response :redirect
88 assert_redirected_to root_path
90 get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
91 assert_response :success
93 # Report without report_type
94 assert_no_difference "Issue.count" do
95 details = "Details of another report under the same issue"
98 :report => { :details => details },
99 :issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
102 assert_response :redirect
103 assert_equal Issue.find_by(:reportable_id => target_user.id, :reportable_type => "User").reports.count, 1
105 # Report without details
106 assert_no_difference "Issue.count" do
109 :report_type => "[OFFENSIVE]",
110 :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
113 assert_response :redirect
114 assert_equal Issue.find_by(:reportable_id => target_user.id, :reportable_type => "User").reports.count, 1
117 def test_new_report_with_complete_details
118 # Test creation of a new issue and a new report
119 target_user = create(:user)
122 session[:user] = create(:user).id
124 assert_equal Issue.count, 0
126 # Create an Issue and a report
127 get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
128 assert_response :success
129 assert_difference "Issue.count", 1 do
130 details = "Details of a report"
133 :report => { :details => details },
134 :report_type => "[OFFENSIVE]",
135 :issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
138 assert_equal Issue.count, 1
139 assert_response :redirect
140 assert_redirected_to root_path
142 # Create a report for an existing Issue
143 get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
144 assert_response :success
145 assert_no_difference "Issue.count" do
146 details = "Details of another report under the same issue"
149 :report => { :details => details },
150 :report_type => "[OFFENSIVE]",
151 :issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
154 assert_response :redirect
155 report_count = Issue.find_by(:reportable_id => target_user.id, :reportable_type => "User").reports.count
156 assert_equal report_count, 2
159 def test_change_status_by_normal_user
160 target_user = create(:user)
161 issue = create(:issue, :reportable => target_user, :reported_user => target_user)
163 # Login as normal user
164 session[:user] = create(:user).id
166 assert_equal Issue.count, 1
168 get :resolve, :params => { :id => issue.id }
170 assert_response :redirect
171 assert_redirected_to root_path
174 def test_change_status_by_admin
175 target_user = create(:user)
176 issue = create(:issue, :reportable => target_user, :reported_user => target_user)
178 # Login as administrator
179 session[:user] = create(:administrator_user).id
182 get :resolve, :params => { :id => issue.id }
183 assert_equal Issue.find_by(:reportable_id => target_user.id, :reportable_type => "User").resolved?, true
184 assert_response :redirect
187 get :reopen, :params => { :id => issue.id }
188 assert_equal Issue.find_by(:reportable_id => target_user.id, :reportable_type => "User").open?, true
189 assert_response :redirect
192 get :ignore, :params => { :id => issue.id }
193 assert_equal Issue.find_by(:reportable_id => target_user, :reportable_type => "User").ignored?, true
194 assert_response :redirect
197 def test_search_issues
198 good_user = create(:user)
199 bad_user = create(:user)
200 create(:issue, :reportable => bad_user, :reported_user => bad_user, :issue_type => "administrator")
201 # Login as administrator
202 session[:user] = create(:administrator_user).id
204 # No issues against the user
205 get :index, :params => { :search_by_user => good_user.display_name }
206 assert_response :redirect
207 assert_redirected_to issues_path
210 get :index, :params => { :search_by_user => "test1000" }
211 assert_response :redirect
212 assert_redirected_to issues_path
214 # Find Issue against bad_user
215 get :index, :params => { :search_by_user => bad_user.display_name }
216 assert_response :success