|
require 'test/unit'
|
|
|
|
require 'rubygems'
|
|
require 'active_record'
|
|
|
|
$:.unshift File.dirname(__FILE__) + '/../lib'
|
|
require File.dirname(__FILE__) + '/../init'
|
|
|
|
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
|
|
|
|
class Article < ActiveRecord::Base
|
|
validates_presence_of :subject
|
|
|
|
before_save :tweak_body
|
|
|
|
def tweak_body
|
|
self.body = "I've been tweaked"
|
|
end
|
|
|
|
end
|
|
|
|
class ArticleTest < Test::Unit::TestCase
|
|
|
|
def setup
|
|
ActiveRecord::Schema.define(:version => 1) do
|
|
create_table :articles do |t|
|
|
t.string :subject
|
|
t.string :body
|
|
t.timestamps
|
|
end
|
|
end
|
|
quick_art = Article.new({:subject => "I like turtles", :body => "They are my favorite"})
|
|
quick_art.skip_callbacks = true
|
|
quick_art.save
|
|
end
|
|
|
|
def teardown
|
|
ActiveRecord::Base.connection.tables.each do |table|
|
|
ActiveRecord::Base.connection.drop_table(table)
|
|
end
|
|
end
|
|
|
|
def test_has_skip_callbacks
|
|
assert Article.new.skip_callbacks.nil?
|
|
end
|
|
|
|
def test_create_without_callbacks
|
|
assert_difference('Article.count', 1) do
|
|
article = Article.new
|
|
article.skip_callbacks = true
|
|
article.subject = "This is a test"
|
|
assert article.save
|
|
assert article.body.nil?
|
|
end
|
|
end
|
|
|
|
def test_create_with_callbacks
|
|
assert_difference('Article.count', 1) do
|
|
article = Article.new
|
|
article.subject = "This is a test"
|
|
assert article.save
|
|
assert_equal article.body, "I've been tweaked"
|
|
end
|
|
end
|
|
|
|
def test_create_invalid_without_callbacks
|
|
assert_difference('Article.count', 0) do
|
|
article = Article.new
|
|
article.skip_callbacks = true
|
|
assert !article.save
|
|
assert article.body.nil?
|
|
end
|
|
end
|
|
|
|
def test_create_invalid_with_callback
|
|
assert_difference('Article.count', 0) do
|
|
article = Article.new
|
|
assert !article.save
|
|
assert article.body.nil?
|
|
end
|
|
end
|
|
|
|
def test_update_without_callbacks
|
|
article = Article.find(:first)
|
|
article.skip_callbacks = true
|
|
article.subject = "This is a test"
|
|
assert article.save
|
|
assert_equal article.body, "They are my favorite"
|
|
end
|
|
|
|
def test_update_with_callbacks
|
|
article = Article.find(:first)
|
|
article.subject = "This is a test"
|
|
assert article.save
|
|
assert_equal article.body, "I've been tweaked"
|
|
end
|
|
|
|
def test_update_invalid_without_callbacks
|
|
article = Article.find(:first)
|
|
article.skip_callbacks = true
|
|
article.subject = nil
|
|
assert !article.save
|
|
assert_equal article.body, "They are my favorite"
|
|
end
|
|
|
|
def test_update_invalid_with_callback
|
|
article = Article.find(:first)
|
|
article.subject = nil
|
|
assert !article.save
|
|
assert_equal article.body, "They are my favorite"
|
|
end
|
|
|
|
end
|