##// END OF EJS Templates
Convert tests to shoulda...
Eric Davis -
r3651:f484fe855662
parent child
Show More
@@ -1,132 +1,187
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2010 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require "#{File.dirname(__FILE__)}/../test_helper"
19 19
20 20 class IssuesApiTest < ActionController::IntegrationTest
21 21 fixtures :projects,
22 22 :users,
23 23 :roles,
24 24 :members,
25 25 :member_roles,
26 26 :issues,
27 27 :issue_statuses,
28 28 :versions,
29 29 :trackers,
30 30 :projects_trackers,
31 31 :issue_categories,
32 32 :enabled_modules,
33 33 :enumerations,
34 34 :attachments,
35 35 :workflows,
36 36 :custom_fields,
37 37 :custom_values,
38 38 :custom_fields_projects,
39 39 :custom_fields_trackers,
40 40 :time_entries,
41 41 :journals,
42 42 :journal_details,
43 43 :queries
44 44
45 45 def setup
46 46 Setting.rest_api_enabled = '1'
47 47 end
48 48
49 def test_index
49 context "/index.xml" do
50 setup do
50 51 get '/issues.xml'
51 assert_response :success
52 assert_equal 'application/xml', @response.content_type
53 52 end
54 53
55 def test_index_with_filter
54 should_respond_with :success
55 should_respond_with_content_type 'application/xml'
56 end
57
58 context "/index.xml with filter" do
59 setup do
56 60 get '/issues.xml?status_id=5'
57 assert_response :success
58 assert_equal 'application/xml', @response.content_type
61 end
62
63 should_respond_with :success
64 should_respond_with_content_type 'application/xml'
65 should "show only issues with the status_id" do
59 66 assert_tag :tag => 'issues',
60 67 :children => { :count => Issue.visible.count(:conditions => {:status_id => 5}),
61 68 :only => { :tag => 'issue' } }
62 69 end
70 end
63 71
64 def test_show
72 context "/issues/1.xml" do
73 setup do
65 74 get '/issues/1.xml'
66 assert_response :success
67 assert_equal 'application/xml', @response.content_type
68 75 end
69 76
70 def test_create
71 attributes = {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}
72 assert_difference 'Issue.count' do
73 post '/issues.xml', {:issue => attributes}, :authorization => credentials('jsmith')
77 should_respond_with :success
78 should_respond_with_content_type 'application/xml'
79 end
80
81 context "POST /issues.xml" do
82 setup do
83 @issue_count = Issue.count
84 @attributes = {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}
85 post '/issues.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
74 86 end
75 assert_response :created
76 assert_equal 'application/xml', @response.content_type
87
88 should_respond_with :created
89 should_respond_with_content_type 'application/xml'
90
91 should "create an issue with the attributes" do
92 assert_equal Issue.count, @issue_count + 1
93
77 94 issue = Issue.first(:order => 'id DESC')
78 attributes.each do |attribute, value|
95 @attributes.each do |attribute, value|
79 96 assert_equal value, issue.send(attribute)
80 97 end
81 98 end
99 end
82 100
83 def test_create_failure
84 attributes = {:project_id => 1}
85 assert_no_difference 'Issue.count' do
86 post '/issues.xml', {:issue => attributes}, :authorization => credentials('jsmith')
101 context "POST /issues.xml with failure" do
102 setup do
103 @attributes = {:project_id => 1}
104 post '/issues.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
87 105 end
88 assert_response :unprocessable_entity
89 assert_equal 'application/xml', @response.content_type
106
107 should_respond_with :unprocessable_entity
108 should_respond_with_content_type 'application/xml'
109
110 should "have an errors tag" do
90 111 assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"}
91 112 end
113 end
114
115 context "PUT /issues/1.xml" do
116 setup do
117 @issue_count = Issue.count
118 @journal_count = Journal.count
119 @attributes = {:subject => 'API update'}
120
121 put '/issues/1.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
122 end
123
124 should_respond_with :ok
125 should_respond_with_content_type 'application/xml'
92 126
93 def test_update
94 attributes = {:subject => 'API update'}
95 assert_no_difference 'Issue.count' do
96 assert_difference 'Journal.count' do
97 put '/issues/1.xml', {:issue => attributes}, :authorization => credentials('jsmith')
127 should "not create a new issue" do
128 assert_equal Issue.count, @issue_count
98 129 end
130
131 should "create a new journal" do
132 assert_equal Journal.count, @journal_count + 1
99 133 end
100 assert_response :ok
101 assert_equal 'application/xml', @response.content_type
134
135 should "update the issue" do
102 136 issue = Issue.find(1)
103 attributes.each do |attribute, value|
137 @attributes.each do |attribute, value|
104 138 assert_equal value, issue.send(attribute)
105 139 end
106 140 end
107 141
108 def test_update_failure
109 attributes = {:subject => ''}
110 assert_no_difference 'Issue.count' do
111 assert_no_difference 'Journal.count' do
112 put '/issues/1.xml', {:issue => attributes}, :authorization => credentials('jsmith')
113 142 end
143
144 context "PUT /issues/1.xml with failed update" do
145 setup do
146 @attributes = {:subject => ''}
147 @issue_count = Issue.count
148 @journal_count = Journal.count
149
150 put '/issues/1.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
151 end
152
153 should_respond_with :unprocessable_entity
154 should_respond_with_content_type 'application/xml'
155
156 should "not create a new issue" do
157 assert_equal Issue.count, @issue_count
158 end
159
160 should "not create a new journal" do
161 assert_equal Journal.count, @journal_count
114 162 end
115 assert_response :unprocessable_entity
116 assert_equal 'application/xml', @response.content_type
163
164 should "have an errors tag" do
117 165 assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"}
118 166 end
167 end
119 168
120 def test_destroy
121 assert_difference 'Issue.count', -1 do
169 context "DELETE /issues/1.xml" do
170 setup do
171 @issue_count = Issue.count
122 172 delete '/issues/1.xml', {}, :authorization => credentials('jsmith')
123 173 end
124 assert_response :ok
125 assert_equal 'application/xml', @response.content_type
174
175 should_respond_with :ok
176 should_respond_with_content_type 'application/xml'
177
178 should "delete the issue" do
179 assert_equal Issue.count, @issue_count -1
126 180 assert_nil Issue.find_by_id(1)
127 181 end
182 end
128 183
129 184 def credentials(user, password=nil)
130 185 ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user)
131 186 end
132 187 end
General Comments 0
You need to be logged in to leave comments. Login now