diff options
Diffstat (limited to 'activerecord/test')
| -rw-r--r-- | activerecord/test/cases/associations/join_model_test.rb | 8 | ||||
| -rw-r--r-- | activerecord/test/cases/associations/nested_has_many_through_associations_test.rb | 43 | ||||
| -rw-r--r-- | activerecord/test/fixtures/books.yml | 2 | ||||
| -rw-r--r-- | activerecord/test/models/author.rb | 14 | ||||
| -rw-r--r-- | activerecord/test/models/book.rb | 2 | ||||
| -rw-r--r-- | activerecord/test/schema/schema.rb | 1 | 
6 files changed, 58 insertions, 12 deletions
diff --git a/activerecord/test/cases/associations/join_model_test.rb b/activerecord/test/cases/associations/join_model_test.rb index f131dc01f6..0b1a3db1e4 100644 --- a/activerecord/test/cases/associations/join_model_test.rb +++ b/activerecord/test/cases/associations/join_model_test.rb @@ -394,14 +394,6 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase      end    end -  def test_has_many_through_has_many_through -    assert_raise(ActiveRecord::HasManyThroughSourceAssociationMacroError) { authors(:david).tags } -  end - -  def test_has_many_through_habtm -    assert_raise(ActiveRecord::HasManyThroughSourceAssociationMacroError) { authors(:david).post_categories } -  end -    def test_eager_load_has_many_through_has_many      author = Author.find :first, :conditions => ['name = ?', 'David'], :include => :comments, :order => 'comments.id'      SpecialComment.new; VerySpecialComment.new diff --git a/activerecord/test/cases/associations/nested_has_many_through_associations_test.rb b/activerecord/test/cases/associations/nested_has_many_through_associations_test.rb new file mode 100644 index 0000000000..36de709ffc --- /dev/null +++ b/activerecord/test/cases/associations/nested_has_many_through_associations_test.rb @@ -0,0 +1,43 @@ +require "cases/helper" +require 'models/author' +require 'models/post' +require 'models/person' +require 'models/reference' +require 'models/job' +require 'models/reader' +require 'models/comment' +require 'models/tag' +require 'models/tagging' +require 'models/owner' +require 'models/pet' +require 'models/toy' +require 'models/contract' +require 'models/company' +require 'models/developer' +require 'models/subscriber' +require 'models/book' +require 'models/subscription' + +class NestedHasManyThroughAssociationsTest < ActiveRecord::TestCase +  fixtures :authors, :books, :posts, :subscriptions, :subscribers, :tags, :taggings + +  def test_has_many_through_a_has_many_through_association_on_source_reflection +    author = authors(:david) +    assert_equal [tags(:general), tags(:general)], author.tags +  end + +  def test_has_many_through_a_has_many_through_association_on_through_reflection +    author = authors(:david) +    assert_equal [subscribers(:first), subscribers(:second), subscribers(:second)], author.subscribers +  end + +  def test_distinct_has_many_through_a_has_many_through_association_on_source_reflection +    author = authors(:david) +    assert_equal [tags(:general)], author.distinct_tags +  end + +  def test_distinct_has_many_through_a_has_many_through_association_on_through_reflection +    author = authors(:david) +    assert_equal [subscribers(:first), subscribers(:second)], author.distinct_subscribers +  end +end
\ No newline at end of file diff --git a/activerecord/test/fixtures/books.yml b/activerecord/test/fixtures/books.yml index 473663ff5b..fb48645456 100644 --- a/activerecord/test/fixtures/books.yml +++ b/activerecord/test/fixtures/books.yml @@ -1,7 +1,9 @@  awdr: +  author_id: 1    id: 1    name: "Agile Web Development with Rails"  rfr: +  author_id: 1    id: 2    name: "Ruby for Rails" diff --git a/activerecord/test/models/author.rb b/activerecord/test/models/author.rb index 34bfd2d881..94810e2f34 100644 --- a/activerecord/test/models/author.rb +++ b/activerecord/test/models/author.rb @@ -83,14 +83,20 @@ class Author < ActiveRecord::Base    has_many :author_favorites    has_many :favorite_authors, :through => :author_favorites, :order => 'name' -  has_many :tagging,  :through => :posts # through polymorphic has_one -  has_many :taggings, :through => :posts, :source => :taggings # through polymorphic has_many -  has_many :tags,     :through => :posts # through has_many :through +  has_many :tagging,         :through => :posts # through polymorphic has_one +  has_many :taggings,        :through => :posts, :source => :taggings # through polymorphic has_many +  has_many :tags,            :through => :posts # through has_many :through (on source reflection + polymorphic) +  has_many :distinct_tags,   :through => :posts, :source => :tags, :select => "DISTINCT tags.*", :order => "tags.name"    has_many :post_categories, :through => :posts, :source => :categories +  has_many :books +  has_many :subscriptions,        :through => :books +  has_many :subscribers,          :through => :subscriptions # through has_many :through (on through reflection) +  has_many :distinct_subscribers, :through => :subscriptions, :source => :subscriber, :select => "DISTINCT subscribers.*", :order => "subscribers.nick" +    has_one :essay, :primary_key => :name, :as => :writer -  belongs_to :author_address, :dependent => :destroy +  belongs_to :author_address,       :dependent => :destroy    belongs_to :author_address_extra, :dependent => :delete, :class_name => "AuthorAddress"    scope :relation_include_posts, includes(:posts) diff --git a/activerecord/test/models/book.rb b/activerecord/test/models/book.rb index 1e030b4f59..d27d0af77c 100644 --- a/activerecord/test/models/book.rb +++ b/activerecord/test/models/book.rb @@ -1,4 +1,6 @@  class Book < ActiveRecord::Base +  has_many :authors +    has_many :citations, :foreign_key => 'book1_id'    has_many :references, :through => :citations, :source => :reference_of, :uniq => true diff --git a/activerecord/test/schema/schema.rb b/activerecord/test/schema/schema.rb index ea62833d81..dbd5da45eb 100644 --- a/activerecord/test/schema/schema.rb +++ b/activerecord/test/schema/schema.rb @@ -71,6 +71,7 @@ ActiveRecord::Schema.define do    end    create_table :books, :force => true do |t| +    t.integer :author_id      t.column :name, :string    end  | 
