##// END OF EJS Templates
Use File#expand_path for require's in script/* for Ruby 1.9.2 compatibility. #4050...
Use File#expand_path for require's in script/* for Ruby 1.9.2 compatibility. #4050 Since Ruby 1.9.2, LOAD_PATH does not include "." directory anymore, so we should use absolute paths instead to ensure both 1.8.x and 1.9.x compatibility. It has been included in railties 2.3.x branch since july 2009, see http://github.com/rails/rails/commit/7a427a83ca4da92c70760007aaf313638a5d8374 git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@4359 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r4243:d5fde17bf5d0
r4245:27049b848dd4
Show More
issues_test.rb
349 lines | 9.5 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 # Redmine - project management software
# Copyright (C) 2006-2010 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Eric Davis
Move all API tests into the ApiTest module to make management easier...
r4243 require "#{File.dirname(__FILE__)}/../../test_helper"
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196
Eric Davis
Move all API tests into the ApiTest module to make management easier...
r4243 class ApiTest::IssuesTest < ActionController::IntegrationTest
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 fixtures :projects,
:users,
:roles,
:members,
:member_roles,
:issues,
:issue_statuses,
:versions,
:trackers,
:projects_trackers,
:issue_categories,
:enabled_modules,
:enumerations,
:attachments,
:workflows,
:custom_fields,
:custom_values,
:custom_fields_projects,
:custom_fields_trackers,
:time_entries,
:journals,
:journal_details,
:queries
def setup
Setting.rest_api_enabled = '1'
end
Eric Davis
Convert tests to shoulda...
r3651
context "/index.xml" do
setup do
get '/issues.xml'
end
should_respond_with :success
should_respond_with_content_type 'application/xml'
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 end
Eric Davis
Added JSON support to the issues API. #1214...
r3652
context "/index.json" do
setup do
get '/issues.json'
end
should_respond_with :success
should_respond_with_content_type 'application/json'
should 'return a valid JSON string' do
assert ActiveSupport::JSON.decode(response.body)
end
end
Eric Davis
Convert tests to shoulda...
r3651 context "/index.xml with filter" do
setup do
get '/issues.xml?status_id=5'
end
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196
Eric Davis
Convert tests to shoulda...
r3651 should_respond_with :success
should_respond_with_content_type 'application/xml'
should "show only issues with the status_id" do
assert_tag :tag => 'issues',
:children => { :count => Issue.visible.count(:conditions => {:status_id => 5}),
:only => { :tag => 'issue' } }
end
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 end
Eric Davis
Convert tests to shoulda...
r3651
Eric Davis
Added JSON support to the issues API. #1214...
r3652 context "/index.json with filter" do
setup do
get '/issues.json?status_id=5'
end
should_respond_with :success
should_respond_with_content_type 'application/json'
should 'return a valid JSON string' do
assert ActiveSupport::JSON.decode(response.body)
end
should "show only issues with the status_id" do
json = ActiveSupport::JSON.decode(response.body)
status_ids_used = json.collect {|j| j['status_id'] }
assert_equal 3, status_ids_used.length
assert status_ids_used.all? {|id| id == 5 }
end
end
Eric Davis
Convert tests to shoulda...
r3651 context "/issues/1.xml" do
setup do
get '/issues/1.xml'
end
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196
Eric Davis
Convert tests to shoulda...
r3651 should_respond_with :success
should_respond_with_content_type 'application/xml'
end
Eric Davis
Added JSON support to the issues API. #1214...
r3652 context "/issues/1.json" do
setup do
get '/issues/1.json'
end
should_respond_with :success
should_respond_with_content_type 'application/json'
should 'return a valid JSON string' do
assert ActiveSupport::JSON.decode(response.body)
end
end
Eric Davis
Convert tests to shoulda...
r3651 context "POST /issues.xml" do
setup do
@issue_count = Issue.count
@attributes = {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}
post '/issues.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 end
Eric Davis
Convert tests to shoulda...
r3651
should_respond_with :created
should_respond_with_content_type 'application/xml'
should "create an issue with the attributes" do
assert_equal Issue.count, @issue_count + 1
issue = Issue.first(:order => 'id DESC')
@attributes.each do |attribute, value|
assert_equal value, issue.send(attribute)
end
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 end
end
Eric Davis
Convert tests to shoulda...
r3651 context "POST /issues.xml with failure" do
setup do
@attributes = {:project_id => 1}
post '/issues.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
end
should_respond_with :unprocessable_entity
should_respond_with_content_type 'application/xml'
should "have an errors tag" do
assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"}
end
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 end
Eric Davis
Added JSON support to the issues API. #1214...
r3652
context "POST /issues.json" do
setup do
@issue_count = Issue.count
@attributes = {:project_id => 1, :subject => 'API test', :tracker_id => 2, :status_id => 3}
post '/issues.json', {:issue => @attributes}, :authorization => credentials('jsmith')
end
should_respond_with :created
should_respond_with_content_type 'application/json'
should "create an issue with the attributes" do
assert_equal Issue.count, @issue_count + 1
issue = Issue.first(:order => 'id DESC')
@attributes.each do |attribute, value|
assert_equal value, issue.send(attribute)
end
end
end
context "POST /issues.json with failure" do
setup do
@attributes = {:project_id => 1}
post '/issues.json', {:issue => @attributes}, :authorization => credentials('jsmith')
end
should_respond_with :unprocessable_entity
should_respond_with_content_type 'application/json'
should "have an errors element" do
json = ActiveSupport::JSON.decode(response.body)
assert_equal "can't be blank", json.first['subject']
end
end
Eric Davis
Convert tests to shoulda...
r3651 context "PUT /issues/1.xml" do
setup do
@issue_count = Issue.count
@journal_count = Journal.count
Eric Davis
Allow setting an issue's notes via params[:issue][:notes]. (XML API)...
r3934 @attributes = {:subject => 'API update', :notes => 'A new note'}
Eric Davis
Convert tests to shoulda...
r3651
put '/issues/1.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 end
Eric Davis
Convert tests to shoulda...
r3651
should_respond_with :ok
should_respond_with_content_type 'application/xml'
should "not create a new issue" do
assert_equal Issue.count, @issue_count
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 end
Eric Davis
Convert tests to shoulda...
r3651
should "create a new journal" do
assert_equal Journal.count, @journal_count + 1
end
Eric Davis
Allow setting an issue's notes via params[:issue][:notes]. (XML API)...
r3934 should "add the note to the journal" do
journal = Journal.last
assert_equal "A new note", journal.notes
end
Eric Davis
Convert tests to shoulda...
r3651 should "update the issue" do
issue = Issue.find(1)
@attributes.each do |attribute, value|
Eric Davis
Allow setting an issue's notes via params[:issue][:notes]. (XML API)...
r3934 assert_equal value, issue.send(attribute) unless attribute == :notes
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 end
end
Eric Davis
Convert tests to shoulda...
r3651
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 end
Eric Davis
Convert tests to shoulda...
r3651
context "PUT /issues/1.xml with failed update" do
setup do
@attributes = {:subject => ''}
@issue_count = Issue.count
@journal_count = Journal.count
put '/issues/1.xml', {:issue => @attributes}, :authorization => credentials('jsmith')
end
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196
Eric Davis
Convert tests to shoulda...
r3651 should_respond_with :unprocessable_entity
should_respond_with_content_type 'application/xml'
should "not create a new issue" do
assert_equal Issue.count, @issue_count
end
should "not create a new journal" do
assert_equal Journal.count, @journal_count
end
should "have an errors tag" do
assert_tag :errors, :child => {:tag => 'error', :content => "Subject can't be blank"}
end
end
Eric Davis
Added JSON support to the issues API. #1214...
r3652 context "PUT /issues/1.json" do
setup do
@issue_count = Issue.count
@journal_count = Journal.count
Eric Davis
Allow setting an issue's notes via params[:issue][:notes]. (XML API)...
r3934 @attributes = {:subject => 'API update', :notes => 'A new note'}
Eric Davis
Added JSON support to the issues API. #1214...
r3652
put '/issues/1.json', {:issue => @attributes}, :authorization => credentials('jsmith')
end
should_respond_with :ok
should_respond_with_content_type 'application/json'
should "not create a new issue" do
assert_equal Issue.count, @issue_count
end
should "create a new journal" do
assert_equal Journal.count, @journal_count + 1
end
Eric Davis
Allow setting an issue's notes via params[:issue][:notes]. (XML API)...
r3934 should "add the note to the journal" do
journal = Journal.last
assert_equal "A new note", journal.notes
end
Eric Davis
Added JSON support to the issues API. #1214...
r3652 should "update the issue" do
issue = Issue.find(1)
@attributes.each do |attribute, value|
Eric Davis
Allow setting an issue's notes via params[:issue][:notes]. (XML API)...
r3934 assert_equal value, issue.send(attribute) unless attribute == :notes
Eric Davis
Added JSON support to the issues API. #1214...
r3652 end
end
Eric Davis
Allow setting an issue's notes via params[:issue][:notes]. (XML API)...
r3934
Eric Davis
Added JSON support to the issues API. #1214...
r3652 end
context "PUT /issues/1.json with failed update" do
setup do
@attributes = {:subject => ''}
@issue_count = Issue.count
@journal_count = Journal.count
put '/issues/1.json', {:issue => @attributes}, :authorization => credentials('jsmith')
end
should_respond_with :unprocessable_entity
should_respond_with_content_type 'application/json'
should "not create a new issue" do
assert_equal Issue.count, @issue_count
end
should "not create a new journal" do
assert_equal Journal.count, @journal_count
end
should "have an errors attribute" do
json = ActiveSupport::JSON.decode(response.body)
assert_equal "can't be blank", json.first['subject']
end
end
Eric Davis
Convert tests to shoulda...
r3651 context "DELETE /issues/1.xml" do
setup do
@issue_count = Issue.count
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 delete '/issues/1.xml', {}, :authorization => credentials('jsmith')
end
Eric Davis
Convert tests to shoulda...
r3651
should_respond_with :ok
should_respond_with_content_type 'application/xml'
should "delete the issue" do
assert_equal Issue.count, @issue_count -1
assert_nil Issue.find_by_id(1)
end
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 end
Eric Davis
Added JSON support to the issues API. #1214...
r3652
context "DELETE /issues/1.json" do
setup do
@issue_count = Issue.count
delete '/issues/1.json', {}, :authorization => credentials('jsmith')
end
should_respond_with :ok
should_respond_with_content_type 'application/json'
should "delete the issue" do
assert_equal Issue.count, @issue_count -1
assert_nil Issue.find_by_id(1)
end
end
Jean-Philippe Lang
XML REST API for issues that provides CRUD operations for Issues (#1214)....
r3196 def credentials(user, password=nil)
ActionController::HttpAuthentication::Basic.encode_credentials(user, password || user)
end
end