main
1require "integration_helper"
2
3describe "select items" do
4 include_context "orm"
5
6 context "when fetching all items" do
7 before :each do
8 @id = connection[:movies].insert(name: 'monsters inc')
9 end
10
11 let(:results) { session.find_all Movie }
12
13 it "should return the correct number of movies" do
14 expect(results.count).to eql(1)
15 end
16
17 it "should return each movie with its name" do
18 expect(results.first.name).to eql('monsters inc')
19 end
20
21 it "should return instances of the target type" do
22 expect(results.first).to be_instance_of(Movie)
23 end
24
25 it "should include the saved movie" do
26 movie = Movie.new.tap { |x| x.id = @id }
27 expect(results).to include(movie)
28 end
29 end
30
31 context "when fetching a single item" do
32 let!(:studio_id) { connection[:studios].insert(name: 'universal') }
33 let!(:movie_id) { connection[:movies].insert(name: 'blood in, blood out', studio_id: studio_id) }
34 let!(:review_id) { connection[:reviews].insert(movie_id: movie_id, description: description) }
35 let!(:other_review_id) { connection[:reviews].insert(movie_id: movie_id + 1, description: 'blah blah') }
36 let(:result) { session.find(Movie, movie_id) }
37 let(:description) { 'wow... that snail is fast.' }
38
39 it "loads the proper type" do
40 expect(result).to be_instance_of(Movie)
41 end
42
43 it "loads the primary key" do
44 expect(result.id).to eql(movie_id)
45 end
46
47 it "loads each mapped column" do
48 expect(result.name).to eql('blood in, blood out')
49 end
50
51 it "loads the belongs_to association" do
52 expect(result.studio).to be_instance_of(Studio)
53 expect(result.studio.name).to eql('universal')
54 end
55
56 it "loads a has_many association" do
57 expect(result.reviews).to_not be_nil
58 expect(result.reviews.first.description).to eql(description)
59 expect(result.reviews.first.description).to eql(description)
60 end
61
62 it "does not load items associated with another parent record" do
63 expect(result.reviews.find { |x| x.id == other_review_id }).to be_nil
64 end
65 end
66end