d42b37ae5bcd3790556eeacf2292602fa74835ab
[rails.git] / test / controllers / issues_controller_test.rb
1 require "test_helper"
2
3 class IssuesControllerTest < ActionController::TestCase
4   fixtures :users, :user_roles
5
6   def test_view_dashboard_without_auth
7     # Access issues_path without login
8     get :index
9     assert_response :redirect
10     assert_redirected_to login_path(:referer => issues_path)
11
12     # Access issues_path as normal user
13     session[:user] = users(:normal_user).id
14     get :index
15     assert_response :redirect
16     assert_redirected_to root_path
17
18     # Access issues_path by admin
19     session[:user] = users(:administrator_user).id
20     get :index
21     assert_response :success
22
23     # Access issues_path by moderator
24     session[:user] = users(:moderator_user).id
25     get :index
26     assert_response :success
27   end
28
29   def test_new_issue_without_login
30     # Test creation of a new issue and a new report without logging in
31     get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 1
32     assert_response :redirect
33     assert_redirected_to login_path(:referer => new_issue_path(:reportable_id => 1, :reportable_type => "User", :reported_user_id => 1))
34   end
35
36   def test_new_issue_after_login
37     # Test creation of a new issue and a new report
38
39     # Login
40     session[:user] = users(:normal_user).id
41
42     assert_equal Issue.count, 0
43
44     # Create an Issue and a report
45     get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
46     assert_response :success
47     assert_difference "Issue.count", 1 do
48       details = "Details of a report"
49       post :create,
50            :report => { :details => details },
51            :report_type => "[OFFENSIVE]",
52            :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
53     end
54     assert_equal Issue.count, 1
55     assert_response :redirect
56     assert_redirected_to root_path
57   end
58
59   def test_new_report_with_incomplete_details
60     # Test creation of a new issue and a new report
61
62     # Login
63     session[:user] = users(:normal_user).id
64
65     assert_equal Issue.count, 0
66
67     # Create an Issue and a report
68     get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
69     assert_response :success
70     assert_difference "Issue.count", 1 do
71       details = "Details of a report"
72       post :create,
73            :report => { :details => details },
74            :report_type => "[OFFENSIVE]",
75            :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
76     end
77     assert_equal Issue.count, 1
78     assert_response :redirect
79     assert_redirected_to root_path
80
81     get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
82     assert_response :success
83
84     # Report without report_type
85     assert_no_difference "Issue.count" do
86       details = "Details of another report under the same issue"
87       post :create,
88            :report => { :details => details },
89            :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
90     end
91     assert_response :redirect
92     assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").reports.count, 1
93
94     # Report without details
95     assert_no_difference "Issue.count" do
96       post :create,
97            :report_type => "[OFFENSIVE]",
98            :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
99     end
100     assert_response :redirect
101     assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").reports.count, 1
102   end
103
104   def test_new_report_with_complete_details
105     # Test creation of a new issue and a new report
106
107     # Login
108     session[:user] = users(:normal_user).id
109
110     assert_equal Issue.count, 0
111
112     # Create an Issue and a report
113     get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
114     assert_response :success
115     assert_difference "Issue.count", 1 do
116       details = "Details of a report"
117       post :create,
118            :report => { :details => details },
119            :report_type => "[OFFENSIVE]",
120            :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
121     end
122     assert_equal Issue.count, 1
123     assert_response :redirect
124     assert_redirected_to root_path
125
126     # Create a report for an existing Issue
127     get :new, :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2
128     assert_response :success
129     assert_no_difference "Issue.count" do
130       details = "Details of another report under the same issue"
131       post :create,
132            :report => { :details => details },
133            :report_type => "[OFFENSIVE]",
134            :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
135     end
136     assert_response :redirect
137     report_count = Issue.find_by_reportable_id_and_reportable_type(1, "User").reports.count
138     assert_equal report_count, 2
139   end
140
141   def test_change_status_by_normal_user
142     # Login as normal user
143     session[:user] = users(:normal_user).id
144
145     # Create Issue
146     test_new_issue_after_login
147     assert_equal Issue.count, 1
148
149     get :resolve, :id => Issue.find_by_reportable_id_and_reportable_type(1, "User").id
150
151     assert_response :redirect
152     assert_redirected_to root_path
153   end
154
155   def test_change_status_by_admin
156     # Login as normal user
157     session[:user] = users(:normal_user).id
158
159     # Create Issue
160     test_new_issue_after_login
161     assert_equal Issue.count, 1
162     assert_response :redirect
163
164     # Login as administrator
165     session[:user] = users(:administrator_user).id
166
167     # Test 'Resolved'
168     get :resolve, :id => Issue.find_by_reportable_id_and_reportable_type(1, "User").id
169     assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").resolved?, true
170     assert_response :redirect
171
172     # Test 'Reopen'
173     get :reopen, :id => Issue.find_by_reportable_id_and_reportable_type(1, "User").id
174     assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").open?, true
175     assert_response :redirect
176
177     # Test 'Ignored'
178     get :ignore, :id => Issue.find_by_reportable_id_and_reportable_type(1, "User").id
179     assert_equal Issue.find_by_reportable_id_and_reportable_type(1, "User").ignored?, true
180     assert_response :redirect
181   end
182
183   def test_search_issues
184     # Login as administrator
185     session[:user] = users(:administrator_user).id
186
187     # No issues against the user
188     get :index, :search_by_user => "test1"
189     assert_response :redirect
190     assert_redirected_to issues_path
191
192     # User doesn't exist
193     get :index, :search_by_user => "test1000"
194     assert_response :redirect
195     assert_redirected_to issues_path
196
197     # Create Issue against user_id:2
198     test_new_issue_after_login
199     assert_equal Issue.count, 1
200     assert_equal Issue.first.reported_user_id, 2
201
202     session[:user] = users(:administrator_user).id
203
204     # Find Issue against user_id:2
205     get :index, :search_by_user => "test2"
206     assert_response :success
207   end
208
209   def test_comment_by_normal_user
210     # Create Issue
211     test_new_issue_after_login
212     assert_equal Issue.count, 1
213
214     get :comment, :id => 1
215     assert_response :redirect
216     assert_redirected_to root_path
217   end
218
219   def test_comment
220     # Create Issue
221     test_new_issue_after_login
222     assert_equal Issue.count, 1
223     @issue = Issue.all.first
224
225     # Login as administrator
226     session[:user] = users(:administrator_user).id
227
228     get :comment, :id => @issue.id, :issue_comment => { :body => "test comment" }
229     assert_response :redirect
230     assert_redirected_to @issue
231   end
232 end