From db045dbbf60b53dbe013ef25554fd013baf88134 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Wed, 24 Nov 2004 01:04:44 +0000 Subject: Initial git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- .../controller/active_record_assertions_test.rb | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 actionpack/test/controller/active_record_assertions_test.rb (limited to 'actionpack/test/controller/active_record_assertions_test.rb') diff --git a/actionpack/test/controller/active_record_assertions_test.rb b/actionpack/test/controller/active_record_assertions_test.rb new file mode 100644 index 0000000000..53106aaee7 --- /dev/null +++ b/actionpack/test/controller/active_record_assertions_test.rb @@ -0,0 +1,119 @@ +path_to_ar = File.dirname(__FILE__) + '/../../../activerecord' + +if Object.const_defined?("ActiveRecord") || File.exist?(path_to_ar) +# This test is very different than the others. It requires ActiveRecord to +# run. There's a bunch of stuff we are assuming here: +# +# 1. activerecord exists as a sibling directory to actionpack +# (i.e., actionpack/../activerecord) +# 2. you've created the appropriate database to run the active_record unit tests +# 3. you set the appropriate database connection below + +driver_to_use = 'native_sqlite' + +$: << path_to_ar + '/lib/' +$: << path_to_ar + '/test/' +require 'active_record' unless Object.const_defined?("ActiveRecord") +require "connections/#{driver_to_use}/connection" +require 'fixtures/company' + +# ----------------------------------------------------------------------------- + +# add some validation rules to trip up the assertions +class Company + def validate + errors.add_on_empty('name') + errors.add('rating', 'rating should not be 2') if rating == 2 + errors.add_to_base('oh oh') if rating == 3 + end +end + +# ----------------------------------------------------------------------------- + +require File.dirname(__FILE__) + '/../abstract_unit' + +# a controller class to handle the AR assertions +class ActiveRecordAssertionsController < ActionController::Base + # fail with 1 bad column + def nasty_columns_1 + @company = Company.new + @company.name = "B" + @company.rating = 2 + render_text "snicker...." + end + + # fail with 2 bad column + def nasty_columns_2 + @company = Company.new + @company.name = "" + @company.rating = 2 + render_text "double snicker...." + end + + # this will pass validation + def good_company + @company = Company.new + @company.name = "A" + @company.rating = 69 + render_text "Goodness Gracious!" + end + + # this will fail validation + def bad_company + @company = Company.new + render_text "Who's Bad?" + end + + # the safety dance...... + def rescue_action(e) raise; end +end + +# ----------------------------------------------------------------------------- + +ActiveRecordAssertionsController.template_root = File.dirname(__FILE__) + "/../fixtures/" + +# The test case to try the AR assertions +class ActiveRecordAssertionsControllerTest < Test::Unit::TestCase + # set it up + def setup + @request = ActionController::TestRequest.new + @response = ActionController::TestResponse.new + @controller = ActiveRecordAssertionsController.new + end + + # test for 1 bad apple column + def test_some_invalid_columns + process :nasty_columns_1 + assert_success + assert_invalid_record 'company' + assert_invalid_column_on_record 'company', 'rating' + assert_valid_column_on_record 'company', 'name' + assert_valid_column_on_record 'company', ['name','id'] + end + + # test for 2 bad apples columns + def test_all_invalid_columns + process :nasty_columns_2 + assert_success + assert_invalid_record 'company' + assert_invalid_column_on_record 'company', 'rating' + assert_invalid_column_on_record 'company', 'name' + assert_invalid_column_on_record 'company', ['name','rating'] + end + + # ensure we have no problems with an ActiveRecord + def test_valid_record + process :good_company + assert_success + assert_valid_record 'company' + end + + # ensure we have problems with an ActiveRecord + def test_invalid_record + process :bad_company + assert_success + assert_invalid_record 'company' + end +end + +end \ No newline at end of file -- cgit v1.2.3