Sha256: b2467e2f41dada5c86162c5db760ae39e1c3fe2cede6d431155e8826f6acb243

Contents?: true

Size: 1.96 KB

Versions: 1

Compression:

Stored size: 1.96 KB

Contents

require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'spec_helper'))
require 'pp'
describe "OneToMany" do
  before(:all) do
    class Team
      include DataMapper::Resource

      def self.default_repository_name; ADAPTER end

      property :id, Serial
      property :name, String
      property :class_type, Discriminator

      has n, :players
    end

    class BaseballTeam < Team
    end

    class Player
      include DataMapper::Resource

      def self.default_repository_name; ADAPTER end

      property :id, Serial
      property :name, String

      belongs_to :team
    end

    [Team, Player].each { |k| k.auto_migrate!(ADAPTER) }

    Team.create(:name => "Cowboys")
    BaseballTeam.create(:name => "Giants")
  end

  it "unsaved parent model should accept array of hashes for association" do
    players = [{ :name => "Brett Favre" }, { :name => "Reggie White" }]

    team = Team.new(:name => "Packers", :players => players)
    team.players.zip(players) do |player, values|
      player.should be_an_instance_of(Player)
      values.each { |k, v| player.send(k).should == v }
    end

    players = team.players
    team.save

    repository(ADAPTER) do
      Team.get(3).players.should == players
    end
  end

  it "saved parent model should accept array of hashes for association" do
    players = [{ :name => "Troy Aikman" }, { :name => "Chad Hennings" }]

    team = Team.get(1)
    team.players = players
    team.players.zip(players) do |player, values|
      player.should be_an_instance_of(Player)
      values.each { |k, v| player.send(k).should == v }
    end

    players = team.players
    team.save

    repository(ADAPTER) do
      Team.get(1).players.should == players
    end
  end

  describe "STI" do
    it "should work" do
      repository(ADAPTER) do
        Player.create(:name => "Barry Bonds", :team => BaseballTeam.first)
      end
      repository(ADAPTER) do
        Player.first.team.should == BaseballTeam.first
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dm-core-0.9.3 spec/integration/associations/one_to_many_spec.rb