3 class IssuesControllerTest < ActionController::TestCase
4 fixtures :users, :user_roles, :issues
7 # cleanup any emails set off by the test
8 ActionMailer::Base.deliveries.clear
11 def test_view_dashboard_without_auth
12 # Access issues_path without login
14 assert_response :redirect
15 assert_redirected_to login_path(:referer => issues_path)
17 # Access issues_path as normal user
18 session[:user] = users(:normal_user).id
20 assert_response :redirect
21 assert_redirected_to root_path
23 # Access issues_path by admin
24 session[:user] = users(:administrator_user).id
26 # this is redirected because there are no issues?!
27 assert_response :redirect
28 assert_redirected_to issues_path
30 # Access issues_path by moderator
31 session[:user] = users(:moderator_user).id
33 # this is redirected because there are no issues?!
34 assert_response :redirect
35 assert_redirected_to issues_path
41 def test_new_issue_without_login
42 # Test creation of a new issue and a new report without logging in
43 get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 1
44 assert_response :redirect
45 assert_redirected_to login_path(:referer => new_issue_path(:reportable_id => 1, :reportable_type => "User", :reported_user_id => 1))
48 def test_new_issue_after_login
49 # Test creation of a new issue and a new report
52 session[:user] = users(:normal_user).id
54 assert_equal Issue.count, 0
56 # Create an Issue and a report
57 get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
58 assert_response :success
59 assert_difference "Issue.count", 1 do
60 details = "Details of a report"
62 :report => { :details => details },
63 :report_type => "[OFFENSIVE]",
64 :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
66 assert_equal Issue.count, 1
67 assert_response :redirect
68 assert_redirected_to root_path
74 def test_new_report_with_incomplete_details
75 # Test creation of a new issue and a new report
78 session[:user] = users(:normal_user).id
80 assert_equal Issue.count, 0
82 # Create an Issue and a report
83 get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
84 assert_response :success
85 assert_difference "Issue.count", 1 do
86 details = "Details of a report"
88 :report => { :details => details },
89 :report_type => "[OFFENSIVE]",
90 :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
92 assert_equal Issue.count, 1
93 assert_response :redirect
94 assert_redirected_to root_path
96 get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
97 assert_response :success
99 # Report without report_type
100 assert_no_difference "Issue.count" do
101 details = "Details of another report under the same issue"
103 :report => { :details => details },
104 :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
106 assert_response :redirect
107 assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").reports.count, 1
109 # Report without details
110 assert_no_difference "Issue.count" do
112 :report_type => "[OFFENSIVE]",
113 :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
115 assert_response :redirect
116 assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").reports.count, 1
119 session.delete(:user)
122 def test_new_report_with_complete_details
123 # Test creation of a new issue and a new report
126 session[:user] = users(:normal_user).id
128 assert_equal Issue.count, 0
130 # Create an Issue and a report
131 get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
132 assert_response :success
133 assert_difference "Issue.count", 1 do
134 details = "Details of a report"
136 :report => { :details => details },
137 :report_type => "[OFFENSIVE]",
138 :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
140 assert_equal Issue.count, 1
141 assert_response :redirect
142 assert_redirected_to root_path
144 # Create a report for an existing Issue
145 get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
146 assert_response :success
147 assert_no_difference "Issue.count" do
148 details = "Details of another report under the same issue"
150 :report => { :details => details },
151 :report_type => "[OFFENSIVE]",
152 :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
154 assert_response :redirect
155 report_count = Issue.find_by_reportable_id_and_reportable_type(1, "User").reports.count
156 assert_equal report_count, 2
159 session.delete(:user)
162 def test_change_status_by_normal_user
163 # Login as normal user
164 session[:user] = users(:normal_user).id
167 test_new_issue_after_login
168 assert_equal Issue.count, 1
170 get :resolve, :id => Issue.find_by_reportable_id_and_reportable_type(1, "User").id
172 assert_response :redirect
173 assert_redirected_to root_path
176 session.delete(:user)
179 def test_change_status_by_admin
180 # Login as normal user
181 session[:user] = users(:normal_user).id
184 test_new_issue_after_login
185 assert_equal Issue.count, 1
186 assert_response :redirect
188 # Login as administrator
189 session[:user] = users(:administrator_user).id
192 get :resolve, :id => Issue.find_by_reportable_id_and_reportable_type(1, "User").id
193 assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").resolved?, true
194 assert_response :redirect
197 get :reopen, :id => Issue.find_by_reportable_id_and_reportable_type(1, "User").id
198 assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").open?, true
199 assert_response :redirect
202 get :ignore, :id => Issue.find_by_reportable_id_and_reportable_type(1, "User").id
203 assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").ignored?, true
204 assert_response :redirect
207 session.delete(:user)
210 def test_search_issues
211 # Login as administrator
212 session[:user] = users(:administrator_user).id
214 # No issues against the user
215 get :index, :search_by_user => "test1"
216 assert_response :redirect
217 assert_redirected_to issues_path
220 get :index, :search_by_user => "test1000"
221 assert_response :redirect
222 assert_redirected_to issues_path
224 # Create Issue against user_id:2
225 test_new_issue_after_login
226 assert_equal Issue.count, 1
227 assert_equal Issue.first.reported_user_id, 2
229 session[:user] = users(:administrator_user).id
231 # Find Issue against user_id:2
232 get :index, :search_by_user => "test2"
233 assert_response :success
236 session.delete(:user)
239 def test_comment_by_normal_user
241 test_new_issue_after_login
242 assert_equal Issue.count, 1
244 get :comment, :id => 1
245 assert_response :redirect
246 assert_redirected_to root_path
251 test_new_issue_after_login
252 assert_equal Issue.count, 1
253 @issue = Issue.all.first
255 # Login as administrator
256 session[:user] = users(:administrator_user).id
258 get :comment, :id => @issue.id, :issue_comment => { :body => "test comment" }
259 assert_response :redirect
260 assert_redirected_to @issue
263 session.delete(:user)