0
@@ -294,4 +294,156 @@ describe DataMapper::Associations::ManyToMany::Proxy do
0
+ describe "with renamed associations" do
0
+ include DataMapper::Resource
0
+ def self.default_repository_name; ADAPTER end
0
+ property :name, String
0
+ has n, :tunes, :through => Resource, :class_name => 'Song'
0
+ include DataMapper::Resource
0
+ def self.default_repository_name; ADAPTER end
0
+ property :title, String
0
+ has n, :performers, :through => Resource, :class_name => 'Singer'
0
+ [ Singer, Song, SingerSong ].each { |k| k.auto_migrate! }
0
+ song_1 = Song.create(:title => "Dubliners")
0
+ song_2 = Song.create(:title => "Portrait of the Artist as a Young Man")
0
+ song_3 = Song.create(:title => "Ulysses")
0
+ singer_1 = Singer.create(:name => "Jon Doe")
0
+ singer_2 = Singer.create(:name => "Jane Doe")
0
+ SingerSong.create(:song => song_1, :singer => singer_1)
0
+ SingerSong.create(:song => song_2, :singer => singer_1)
0
+ SingerSong.create(:song => song_1, :singer => singer_2)
0
+ @association = @parent.performers
0
+ it "should provide #replace" do
0
+ @association.should respond_to(:replace)
0
+ it "should correctly link records" do
0
+ Song.get(1).should have(2).performers
0
+ Song.get(2).should have(1).performers
0
+ Song.get(3).should have(0).performers
0
+ Singer.get(1).should have(2).tunes
0
+ Singer.get(2).should have(1).tunes
0
+ it "should be able to have associated objects manually added" do
0
+ song.should have(0).performers
0
+ be = SingerSong.new(:song_id => song.id, :singer_id => 2)
0
+ song.singer_songs << be
0
+ song.reload.should have(1).performers
0
+ it "should automatically added necessary through class" do
0
+ song.should have(0).performers
0
+ song.performers << Singer.get(1)
0
+ song.performers << Singer.new(:name => "Jimmy John")
0
+ song.reload.should have(2).performers
0
+ it "should react correctly to a new record" do
0
+ song = Song.new(:title => "Finnegan's Wake")
0
+ singer = Singer.get(2)
0
+ song.should have(0).performers
0
+ singer.should have(1).tunes
0
+ song.performers << singer
0
+ song.reload.should have(1).performers
0
+ singer.reload.should have(2).tunes
0
+ it "should be able to delete intermediate model" do
0
+ song.should have(2).singer_songs
0
+ song.should have(2).performers
0
+ be = SingerSong.get(1,1)
0
+ song.singer_songs.delete(be)
0
+ song.should have(1).singer_songs
0
+ song.should have(1).performers
0
+ it "should be clearable" do
0
+ repository(ADAPTER) do
0
+ song.should have(1).singer_songs
0
+ song.should have(1).performers
0
+ song.should have(0).singer_songs
0
+ song.should have(0).performers
0
+ repository(ADAPTER) do
0
+ Song.get(2).should have(0).performers
0
+ it "should be able to delete one object" do
0
+ song.should have(2).singer_songs
0
+ song.should have(2).performers
0
+ editor = song.performers.first
0
+ song.performers.delete(editor)
0
+ song.should have(1).singer_songs
0
+ song.should have(1).performers
0
+ editor.reload.tunes.should_not include(song)
0
+ it "should be destroyable" do
0
+ pending "cannot destroy a collection yet" do
0
+ song.should have(1).performers
0
+ song.performers.destroy
0
+ song.should have(0).performers