1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
require File.join(File.dirname(__FILE__), '../../lib/sequel_core')
require File.join(File.dirname(__FILE__), '../spec_helper.rb')
unless defined?(INFORMIX_DB)
INFORMIX_DB = Sequel.connect('informix://localhost/mydb')
end
if INFORMIX_DB.table_exists?(:test)
INFORMIX_DB.drop_table :test
end
INFORMIX_DB.create_table :test do
text :name
integer :value
index :value
end
context "A Informix database" do
specify "should provide disconnect functionality" do
INFORMIX_DB.execute("select user from dual")
INFORMIX_DB.pool.size.should == 1
INFORMIX_DB.disconnect
INFORMIX_DB.pool.size.should == 0
end
end
context "A Informix dataset" do
setup do
@d = INFORMIX_DB[:test]
@d.delete # remove all records
end
specify "should return the correct record count" do
@d.count.should == 0
@d << {:name => 'abc', :value => 123}
@d << {:name => 'abc', :value => 456}
@d << {:name => 'def', :value => 789}
@d.count.should == 3
end
specify "should return the correct records" do
@d.to_a.should == []
@d << {:name => 'abc', :value => 123}
@d << {:name => 'abc', :value => 456}
@d << {:name => 'def', :value => 789}
@d.order(:value).to_a.should == [
{:name => 'abc', :value => 123},
{:name => 'abc', :value => 456},
{:name => 'def', :value => 789}
]
end
specify "should update records correctly" do
@d << {:name => 'abc', :value => 123}
@d << {:name => 'abc', :value => 456}
@d << {:name => 'def', :value => 789}
@d.filter(:name => 'abc').update(:value => 530)
# the third record should stay the same
# floating-point precision bullshit
@d[:name => 'def'][:value].should == 789
@d.filter(:value => 530).count.should == 2
end
specify "should delete records correctly" do
@d << {:name => 'abc', :value => 123}
@d << {:name => 'abc', :value => 456}
@d << {:name => 'def', :value => 789}
@d.filter(:name => 'abc').delete
@d.count.should == 1
@d.first[:name].should == 'def'
end
specify "should be able to literalize booleans" do
proc {@d.literal(true)}.should_not raise_error
proc {@d.literal(false)}.should_not raise_error
end
specify "should support transactions" do
INFORMIX_DB.transaction do
@d << {:name => 'abc', :value => 1}
end
@d.count.should == 1
end
specify "should support #first and #last" do
@d << {:name => 'abc', :value => 123}
@d << {:name => 'abc', :value => 456}
@d << {:name => 'def', :value => 789}
@d.order(:value).first.should == {:name => 'abc', :value => 123}
@d.order(:value).last.should == {:name => 'def', :value => 789}
end
end
|