]> git.openstreetmap.org Git - rails.git/blob - test/controllers/reports_controller_test.rb
Refactored and added new test
[rails.git] / test / controllers / reports_controller_test.rb
1 require "test_helper"
2
3 class ReportsControllerTest < ActionController::TestCase
4   def test_new_report_without_login
5     target_user = create(:user)
6     get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User" }
7     assert_response :redirect
8     assert_redirected_to login_path(:referer => new_report_path(:reportable_id => target_user.id, :reportable_type => "User"))
9   end
10
11   def test_new_report_after_login
12     target_user = create(:user)
13
14     session[:user] = create(:user).id
15
16     # Create an Issue and a report
17     get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User" }
18     assert_response :success
19     assert_difference "Issue.count", 1 do
20       details = "Details of a report"
21       category = "other"
22       post :create,
23            :params => {
24              :report => {
25                :details => details,
26                :category => category,
27                :issue => { :reportable_id => target_user.id, :reportable_type => "User" }
28              }
29            }
30     end
31     assert_response :redirect
32     assert_redirected_to user_path(target_user.display_name)
33   end
34
35   def test_new_report_with_incomplete_details
36     # Test creation of a new issue and a new report
37     target_user = create(:user)
38
39     # Login
40     session[:user] = create(:user).id
41
42     # Create an Issue and a report
43     get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User" }
44     assert_response :success
45     assert_difference "Issue.count", 1 do
46       details = "Details of a report"
47       category = "other"
48       post :create,
49            :params => {
50              :report => {
51                :details => details,
52                :category => category,
53                :issue => { :reportable_id => target_user.id, :reportable_type => "User" }
54              }
55            }
56     end
57     assert_response :redirect
58     assert_redirected_to user_path(target_user.display_name)
59
60     issue = Issue.last
61
62     assert_equal 1, issue.reports.count
63
64     get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User" }
65     assert_response :success
66
67     # Report without details
68     assert_no_difference "Issue.count" do
69       category = "other"
70       post :create,
71            :params => {
72              :report => {
73                :category => category,
74                :issue => { :reportable_id => 1, :reportable_type => "User" }
75              }
76            }
77     end
78     assert_response :redirect
79
80     assert_equal 1, issue.reports.count
81   end
82
83   def test_new_report_with_complete_details
84     # Test creation of a new issue and a new report
85     target_user = create(:user)
86
87     # Login
88     session[:user] = create(:user).id
89
90     # Create an Issue and a report
91     get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User" }
92     assert_response :success
93     assert_difference "Issue.count", 1 do
94       details = "Details of a report"
95       category = "other"
96       post :create,
97            :params => {
98              :report => {
99                :details => details,
100                :category => category,
101                :issue => { :reportable_id => target_user.id, :reportable_type => "User" }
102              }
103            }
104     end
105     assert_response :redirect
106     assert_redirected_to user_path(target_user.display_name)
107
108     issue = Issue.last
109
110     assert_equal 1, issue.reports.count
111
112     # Create a report for an existing Issue
113     get :new, :params => { :reportable_id => target_user.id, :reportable_type => "User" }
114     assert_response :success
115     assert_no_difference "Issue.count" do
116       details = "Details of another report under the same issue"
117       category = "other"
118       post :create,
119            :params => {
120              :report => {
121                :details => details,
122                :category => category,
123                :issue => { :reportable_id => target_user.id, :reportable_type => "User" }
124              }
125            }
126     end
127     assert_response :redirect
128
129     assert_equal 2, issue.reports.count
130   end
131 end