spec/extensions/auto_validations_spec.rb in sequel-3.47.0 vs spec/extensions/auto_validations_spec.rb in sequel-3.48.0
- old
+ new
@@ -5,21 +5,23 @@
db = Sequel.mock(:fetch=>{:v=>1})
def db.schema_parse_table(*) true; end
def db.schema(t, *)
t = t.first_source if t.is_a?(Sequel::Dataset)
return [] if t != :test
- [[:id, {:primary_key=>true, :type=>:integer}],
+ [[:id, {:primary_key=>true, :type=>:integer, :allow_null=>false}],
[:name, {:primary_key=>false, :type=>:string, :allow_null=>false}],
[:num, {:primary_key=>false, :type=>:integer, :allow_null=>true}],
- [:d, {:primary_key=>false, :type=>:date, :allow_null=>false}]]
+ [:d, {:primary_key=>false, :type=>:date, :allow_null=>false}],
+ [:nnd, {:primary_key=>false, :type=>:string, :allow_null=>false, :ruby_default=>'nnd'}]]
end
+ def db.supports_index_parsing?() true end
def db.indexes(t, *)
return [] if t != :test
{:a=>{:columns=>[:name, :num], :unique=>true}, :b=>{:columns=>[:num], :unique=>false}}
end
@c = Class.new(Sequel::Model(db[:test]))
- @c.send(:def_column_accessor, :id, :name, :num, :d)
+ @c.send(:def_column_accessor, :id, :name, :num, :d, :nnd)
@c.raise_on_typecast_failure = false
@c.plugin :auto_validations
@m = @c.new
db.sqls
end
@@ -39,13 +41,27 @@
@m.set(:d=>Date.today, :num=>1)
@m.valid?.should be_false
@m.errors.should == {[:name, :num]=>["is already taken"]}
end
+ it "should support :not_null=>:presence option" do
+ @c.plugin :auto_validations, :not_null=>:presence
+ @m.set(:d=>Date.today, :num=>'')
+ @m.valid?.should be_false
+ @m.errors.should == {:name=>["is not present"]}
+ end
+
+ it "should automatically validate explicit nil values for columns with not nil defaults" do
+ @m.set(:d=>Date.today, :name=>1, :nnd=>nil)
+ @m.id = nil
+ @m.valid?.should be_false
+ @m.errors.should == {:id=>["is not present"], :nnd=>["is not present"]}
+ end
+
it "should allow skipping validations by type" do
@c = Class.new(@c)
@m = @c.new
- @c.skip_auto_validations(:presence)
+ @c.skip_auto_validations(:not_null)
@m.valid?.should be_true
@m.set(:d=>'/', :num=>'a', :name=>'1')
@m.valid?.should be_false
@m.errors.should == {:d=>["is not a valid date"], :num=>["is not a valid integer"]}