Skip to content

Commit ece607a

Browse files
authored
Merge pull request Netflix#326 from gorenje/spec_for_has_one_through
added spec for has_one-through relationship
2 parents 935fc05 + 9bff454 commit ece607a

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

spec/lib/extensions/active_record_spec.rb

+82
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,85 @@ class Account < ActiveRecord::Base
7171
File.delete(@db_file) if File.exist?(@db_file)
7272
end
7373
end
74+
75+
describe 'active record has_one through' do
76+
# Setup DB
77+
before(:all) do
78+
@db_file = "test_two.db"
79+
80+
# Open a database
81+
db = SQLite3::Database.new @db_file
82+
83+
# Create tables
84+
db.execute_batch <<-SQL
85+
create table forests (
86+
id int primary key,
87+
name varchar(30)
88+
);
89+
90+
create table trees (
91+
id int primary key,
92+
forest_id int,
93+
name varchar(30),
94+
95+
FOREIGN KEY (forest_id) REFERENCES forests(id)
96+
);
97+
98+
create table fruits (
99+
id int primary key,
100+
tree_id int,
101+
name varchar(30),
102+
103+
FOREIGN KEY (tree_id) REFERENCES trees(id)
104+
);
105+
SQL
106+
107+
# Insert records
108+
db.execute_batch <<-SQL
109+
insert into forests values (1, 'sherwood');
110+
insert into trees values (2, 1,'pine');
111+
insert into fruits values (3, 2, 'pine nut');
112+
113+
insert into fruits(id,name) values (4,'apple');
114+
SQL
115+
end
116+
117+
# Setup Active Record
118+
before(:all) do
119+
class Forest < ActiveRecord::Base
120+
has_many :trees
121+
end
122+
123+
class Tree < ActiveRecord::Base
124+
belongs_to :forest
125+
end
126+
127+
class Fruit < ActiveRecord::Base
128+
belongs_to :tree
129+
has_one :forest, through: :tree
130+
end
131+
132+
ActiveRecord::Base.establish_connection(
133+
:adapter => 'sqlite3',
134+
:database => @db_file
135+
)
136+
end
137+
138+
context 'revenue' do
139+
it 'has an forest_id' do
140+
expect(Fruit.find(3).respond_to?(:forest_id)).to be true
141+
expect(Fruit.find(3).forest_id).to eq 1
142+
expect(Fruit.find(3).forest.name).to eq "sherwood"
143+
end
144+
145+
it 'has nil if tree id not available' do
146+
expect(Fruit.find(4).respond_to?(:tree_id)).to be true
147+
expect(Fruit.find(4).forest_id).to eq nil
148+
end
149+
end
150+
151+
# Clean up DB
152+
after(:all) do
153+
File.delete(@db_file) if File.exist?(@db_file)
154+
end
155+
end

0 commit comments

Comments
 (0)