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