module SimpleModelTests
def test_valid_should_return_true_with_valid_data
model = @model_class.new
@valid_data.each { |key, value| model.send("#{key}=".to_sym, value) }
assert model.valid?
assert_equal 0, model.errors.count
end
def test_valid_should_return_false_and_add_errors_with_invalid_data
@invalid_patches.each do |key, value|
invalid_data = @valid_data.dup
invalid_data[key] = value
model = @model_class.new
invalid_data.each { |invalid_key, invalid_value| model.send("#{invalid_key}=".to_sym, invalid_value) }
assert !model.valid?, "invalid_data[#{key.inspect}] == #{value.inspect}, errors: #{model.errors.full_messages.join('; ')}"
if key.to_s =~ /^(.*)_id$/ and model.respond_to?($1.to_sym) then
assert_not_nil model.errors.on($1.to_sym), "invalid_data[#{$1.to_sym.inspect}] == #{value.inspect}"
else
assert_not_nil model.errors.on(key), "invalid_data[#{key.inspect}] == #{value.inspect}"
end
end
end
def test_create_should_work_correctly
return if not @model_class.new.respond_to?(:save)
old_count = @model_class.count
model = @model_class.new
@valid_data.each { |key, value| model.send("#{key}=".to_sym, value) }
assert model.save, "errors: #{model.errors.full_messages.join('; ')}"
assert model.reload
assert_equal old_count+1, @model_class.count
end
def test_update_should_work_correctly
return if not @model_class.new.respond_to?(:update)
model = @model_class.find(:first, :order => 'id ASC')
@valid_data.each { |key, value| model.send("#{key}=".to_sym, value) }
assert model.save, "errors: #{model.errors.full_messages.join('; ')}"
assert model.reload
@valid_data.each do |key, value|
case value
when Float then
assert_in_delta value, model.send(key), 0.01
else
assert_equal value, model.send(key)
end
end
end
def test_destroy_should_work_correctly
return if not @model_class.new.respond_to?(:destroy)
old_count = @model_class.count
model = @model_class.find(:first)
id = model.id
model.destroy
assert_raises(ActiveRecord::RecordNotFound) { @model_class.find(id) }
assert_equal old_count-1, @model_class.count
end
end