]> git.openstreetmap.org Git - rails.git/blob - test/controllers/issues_controller_test.rb
3a38ea812ce240af4165592b3c5cc44f99d2057b
[rails.git] / test / controllers / issues_controller_test.rb
1 require "test_helper"
2
3 class IssuesControllerTest < ActionController::TestCase
4   teardown do
5     # cleanup any emails set off by the test
6     ActionMailer::Base.deliveries.clear
7   end
8
9   def test_view_dashboard_without_auth
10     # Access issues_path without login
11     get :index
12     assert_response :redirect
13     assert_redirected_to login_path(:referer => issues_path)
14
15     # Access issues_path as normal user
16     session[:user] = create(:user).id
17     get :index
18     assert_response :redirect
19     assert_redirected_to root_path
20
21     # Access issues_path by admin
22     session[:user] = create(:administrator_user).id
23     get :index
24     assert_response :success
25
26     # Access issues_path by moderator
27     session[:user] = create(:moderator_user).id
28     get :index
29     assert_response :success
30   end
31
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))
37   end
38
39   def test_new_issue_after_login
40     # Test creation of a new issue and a new report
41     target_user = create(:user)
42
43     # Login
44     session[:user] = create(:user).id
45
46     assert_equal Issue.count, 0
47
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"
53       post :create,
54            :params => {
55              :report => { :details => details },
56              :report_type => "[OFFENSIVE]",
57              :issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
58            }
59     end
60     assert_equal Issue.count, 1
61     assert_response :redirect
62     assert_redirected_to root_path
63   end
64
65   def test_new_report_with_incomplete_details
66     # Test creation of a new issue and a new report
67     target_user = create(:user)
68
69     # Login
70     session[:user] = create(:user).id
71
72     assert_equal Issue.count, 0
73
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"
79       post :create,
80            :params => {
81              :report => { :details => details },
82              :report_type => "[OFFENSIVE]",
83              :issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
84            }
85     end
86     assert_equal Issue.count, 1
87     assert_response :redirect
88     assert_redirected_to root_path
89
90     get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
91     assert_response :success
92
93     # Report without report_type
94     assert_no_difference "Issue.count" do
95       details = "Details of another report under the same issue"
96       post :create,
97            :params => {
98              :report => { :details => details },
99              :issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
100            }
101     end
102     assert_response :redirect
103     assert_equal Issue.find_by(:reportable_id => target_user.id, :reportable_type => "User").reports.count, 1
104
105     # Report without details
106     assert_no_difference "Issue.count" do
107       post :create,
108            :params => {
109              :report_type => "[OFFENSIVE]",
110              :issue => { :reportable_id => 1, :reportable_type => "User", :reported_user_id => 2 }
111            }
112     end
113     assert_response :redirect
114     assert_equal Issue.find_by(:reportable_id => target_user.id, :reportable_type => "User").reports.count, 1
115   end
116
117   def test_new_report_with_complete_details
118     # Test creation of a new issue and a new report
119     target_user = create(:user)
120
121     # Login
122     session[:user] = create(:user).id
123
124     assert_equal Issue.count, 0
125
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"
131       post :create,
132            :params => {
133              :report => { :details => details },
134              :report_type => "[OFFENSIVE]",
135              :issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
136            }
137     end
138     assert_equal Issue.count, 1
139     assert_response :redirect
140     assert_redirected_to root_path
141
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"
147       post :create,
148            :params => {
149              :report => { :details => details },
150              :report_type => "[OFFENSIVE]",
151              :issue => { :reportable_id => target_user.id, :reportable_type => "User", :reported_user_id => target_user.id }
152            }
153     end
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
157   end
158
159   def test_change_status_by_normal_user
160     target_user = create(:user)
161     issue = create(:issue, :reportable => target_user, :reported_user => target_user)
162
163     # Login as normal user
164     session[:user] = create(:user).id
165
166     assert_equal Issue.count, 1
167
168     get :resolve, :params => { :id => issue.id }
169
170     assert_response :redirect
171     assert_redirected_to root_path
172   end
173
174   def test_change_status_by_admin
175     target_user = create(:user)
176     issue = create(:issue, :reportable => target_user, :reported_user => target_user)
177
178     # Login as administrator
179     session[:user] = create(:administrator_user).id
180
181     # Test 'Resolved'
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
185
186     # Test 'Reopen'
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
190
191     # Test 'Ignored'
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
195   end
196
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
203
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
208
209     # User doesn't exist
210     get :index, :params => { :search_by_user => "test1000" }
211     assert_response :redirect
212     assert_redirected_to issues_path
213
214     # Find Issue against bad_user
215     get :index, :params => { :search_by_user => bad_user.display_name }
216     assert_response :success
217   end
218 end