added spec for has_one-through relationship
This commit is contained in:
parent
92bcab0a3f
commit
9bff454806
@ -71,3 +71,85 @@ describe 'active record' do
|
||||
File.delete(@db_file) if File.exist?(@db_file)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'active record has_one through' do
|
||||
# Setup DB
|
||||
before(:all) do
|
||||
@db_file = "test_two.db"
|
||||
|
||||
# Open a database
|
||||
db = SQLite3::Database.new @db_file
|
||||
|
||||
# Create tables
|
||||
db.execute_batch <<-SQL
|
||||
create table forests (
|
||||
id int primary key,
|
||||
name varchar(30)
|
||||
);
|
||||
|
||||
create table trees (
|
||||
id int primary key,
|
||||
forest_id int,
|
||||
name varchar(30),
|
||||
|
||||
FOREIGN KEY (forest_id) REFERENCES forests(id)
|
||||
);
|
||||
|
||||
create table fruits (
|
||||
id int primary key,
|
||||
tree_id int,
|
||||
name varchar(30),
|
||||
|
||||
FOREIGN KEY (tree_id) REFERENCES trees(id)
|
||||
);
|
||||
SQL
|
||||
|
||||
# Insert records
|
||||
db.execute_batch <<-SQL
|
||||
insert into forests values (1, 'sherwood');
|
||||
insert into trees values (2, 1,'pine');
|
||||
insert into fruits values (3, 2, 'pine nut');
|
||||
|
||||
insert into fruits(id,name) values (4,'apple');
|
||||
SQL
|
||||
end
|
||||
|
||||
# Setup Active Record
|
||||
before(:all) do
|
||||
class Forest < ActiveRecord::Base
|
||||
has_many :trees
|
||||
end
|
||||
|
||||
class Tree < ActiveRecord::Base
|
||||
belongs_to :forest
|
||||
end
|
||||
|
||||
class Fruit < ActiveRecord::Base
|
||||
belongs_to :tree
|
||||
has_one :forest, through: :tree
|
||||
end
|
||||
|
||||
ActiveRecord::Base.establish_connection(
|
||||
:adapter => 'sqlite3',
|
||||
:database => @db_file
|
||||
)
|
||||
end
|
||||
|
||||
context 'revenue' do
|
||||
it 'has an forest_id' do
|
||||
expect(Fruit.find(3).respond_to?(:forest_id)).to be true
|
||||
expect(Fruit.find(3).forest_id).to eq 1
|
||||
expect(Fruit.find(3).forest.name).to eq "sherwood"
|
||||
end
|
||||
|
||||
it 'has nil if tree id not available' do
|
||||
expect(Fruit.find(4).respond_to?(:tree_id)).to be true
|
||||
expect(Fruit.find(4).forest_id).to eq nil
|
||||
end
|
||||
end
|
||||
|
||||
# Clean up DB
|
||||
after(:all) do
|
||||
File.delete(@db_file) if File.exist?(@db_file)
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user