aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/CHANGELOG2
-rw-r--r--actionpack/lib/action_controller/assertions.rb7
-rw-r--r--actionpack/test/controller/action_pack_assertions_test.rb52
-rw-r--r--actionpack/test/controller/active_record_assertions_test.rb3
4 files changed, 61 insertions, 3 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index bc925e9c70..74adda0f54 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Added assert_vaild. Reports the proper AR error messages as fail message when the passed record is invalid [Tobias Luetke]
+
* Add temporary support for passing locals to render using string keys [Nicholas Seckar]
* Clean up error pages by providing better backtraces [Nicholas Seckar]
diff --git a/actionpack/lib/action_controller/assertions.rb b/actionpack/lib/action_controller/assertions.rb
index e5f03fd71a..b29a2864a7 100644
--- a/actionpack/lib/action_controller/assertions.rb
+++ b/actionpack/lib/action_controller/assertions.rb
@@ -283,6 +283,13 @@ module Test #:nodoc:
assert_block(full_message) { expected_dom != actual_dom }
end
end
+
+ # ensures that the passed record is valid by active record standards. returns the error messages if not
+ def assert_valid(record)
+ clean_backtrace do
+ assert record.valid?, record.errors.full_messages
+ end
+ end
def clean_backtrace(&block)
begin
diff --git a/actionpack/test/controller/action_pack_assertions_test.rb b/actionpack/test/controller/action_pack_assertions_test.rb
index 917ae330b6..6d5ade98bf 100644
--- a/actionpack/test/controller/action_pack_assertions_test.rb
+++ b/actionpack/test/controller/action_pack_assertions_test.rb
@@ -77,6 +77,41 @@ class ActionPackAssertionsController < ActionController::Base
def raise_on_post
raise "post" if @request.post?
render_text "request method: #{@request.env['REQUEST_METHOD']}"
+ end
+
+ def get_valid_record
+ @record = Class.new do
+ def valid?
+ true
+ end
+
+ def errors
+ Class.new do
+ def full_messages; '...stuff...'; end
+ end.new
+ end
+
+ end.new
+
+ render :nothing => true
+ end
+
+
+ def get_invalid_record
+ @record = Class.new do
+
+ def valid?
+ false
+ end
+
+ def errors
+ Class.new do
+ def full_messages; '...stuff...'; end
+ end.new
+ end
+ end.new
+
+ render :nothing => true
end
# 911
@@ -420,6 +455,21 @@ class ActionPackAssertionsControllerTest < Test::Unit::TestCase
get :redirect_to_fellow_controller
assert_redirected_to :controller => 'admin/user'
+ end
+
+ def test_assert_valid
+ get :get_valid_record
+ assert_valid assigns('record')
+ end
+
+ def test_assert_valid_failing
+ get :get_invalid_record
+
+ begin
+ assert_valid assigns('record')
+ assert false
+ rescue Test::Unit::AssertionFailedError => e
+ end
end
end
@@ -437,4 +487,4 @@ class ActionPackHeaderTest < Test::Unit::TestCase
process :hello_xml_world
assert_equal('application/pdf', @controller.headers['Content-Type'])
end
-end
+end \ No newline at end of file
diff --git a/actionpack/test/controller/active_record_assertions_test.rb b/actionpack/test/controller/active_record_assertions_test.rb
index d4cbda80e9..a60df5a668 100644
--- a/actionpack/test/controller/active_record_assertions_test.rb
+++ b/actionpack/test/controller/active_record_assertions_test.rb
@@ -75,8 +75,7 @@ class ActiveRecordAssertionsController < ActionController::Base
# the safety dance......
def rescue_action(e) raise; end
end
-
-
+
class ActiveRecordAssertionsControllerTest < Test::Unit::TestCase
def setup
@request = ActionController::TestRequest.new