test/og/tc_join.rb in og-0.29.0 vs test/og/tc_join.rb in og-0.30.0
- old
+ new
@@ -11,20 +11,27 @@
class TC_Join < Test::Unit::TestCase # :nodoc: all
include Og
class Category
property :title, String
+ joins_many Article
+ joins_many :third_join, Article, :table => :ogj_article_category_third
+ joins_many :fourth_join, Article, :table => :ogj_article_category_fourth
def initialize(title)
@title = title
end
end
class Article
property :title, String
- joins_many Category, :through => ArticleToCategory
+ joins_many :first_join, Category, :through => ArticleToCategory
+ joins_many :second_join, Category, :through => ArticleToCategory
+ joins_many :third_join, Category, :table => :ogj_article_category_third
+ joins_many :fourth_join, Category, :table => :ogj_article_category_fourth
+ joins_many Category
def initialize(title)
@title = title
end
end
@@ -42,20 +49,80 @@
end
def test_all
c1 = Category.create('tech')
c2 = Category.create('funny')
+ c3 = Category.create('finance')
a = Article.create('a1')
- a.categories.push(c1, :hits =>3, :rate => 2.3)
- a.categories.push(c2, :rate => 1.2)
-
- join = a.category_join_data(c1)
+ a2 = Article.create('a2')
+ a3 = Article.create('a2')
+
+ # Put the categories into seperate relations
+
+ a.first_join.push(c1, :hits =>3, :rate => 2.3)
+ a.second_join.push(c2, :rate => 1.2)
+ a.third_join << c1
+ a.fourth_join << c2
+ a2.third_join << c1
+ a3.fourth_join << c1
+
+ a.categories << c3
+
+ # ++ Join Through Tests
+
+ # Test that each relationship appears where it should
+
+ join = a.first_join_join_data(c1)
assert_equal 2.3, join.rate
assert_equal 3, join.hits
- join = a.category_join_data(c2)
+ join = a.second_join_join_data(c2)
assert_equal 1.2, join.rate
assert_equal nil, join.hits
+
+ # This feature should be available but I cannot think
+ # of the best way to implement it right now.
+
+ # Test that each relationship does not appears where
+ # it should not.
+
+ # join = a.second_join_join_data(c1)
+ # assert_nil(join)
+
+ # join = a.first_join_join_data(c2)
+ # assert_nil(join)
+
+ # join = a.first_join_join_data(c3)
+ # assert_nil(join)
+
+ # -- Join Through Tests
+
+ # ++ Tripple join table tests
+
+ # Test each relationship appears where it should
+
+ assert(a.third_join.include?(c1), "c1 does not appear in third join relationship")
+ assert(a.fourth_join.include?(c2), "c2 does not appear in fourth join relationship")
+ assert(a.categories.include?(c3), "c3 does not appear in categories (un-named) join relationship")
+
+ # Tests the same thing backwards
+
+ assert(c3.articles.include?(a), "article does not appear in c3 (reverse join broken)")
+ assert(c1.third_join.include?(a2), "a2 does not appear in c1.third_join (reverse join broken)")
+ assert(c1.fourth_join.include?(a3), "a3 does not appear in c1.fourth_join (reverse join broken)")
+ assert(!c1.third_join.include?(a3), "a3 appears in c1.third_join (reverse join broken)")
+
+ # Test that each relationship does not appears where
+ # it should not.
+
+ assert(!a.third_join.include?(c2), "c2 appears in third join relationship")
+ assert(!a.third_join.include?(c3), "c3 appears in third join relationship")
+ assert(!a.fourth_join.include?(c1), "c1 appears in fourth join relationship")
+ assert(!a.fourth_join.include?(c3), "c3 appears in fourth join relationship")
+ assert(!a.categories.include?(c1), "c1 appears in categories (un-named) join relationship")
+ assert(!a.categories.include?(c2), "c2 appears in categories (un-named) join relationship")
+
+ # -- Tripple join table tests
end
end