require File.join(File.dirname(__FILE__), 'CONFIG.rb') require 'rubygems' require 'facets' require 'test/unit' require 'og' require 'glue/timestamped' class TC_DeletesRelationship < Test::Unit::TestCase # :nodoc: all include Og class Item property :name, String has_one Category has_one Tag has_many Picture has_many :figures joins_many User end ###### # Single ###### class Category property :name, String belongs_to Item end class Tag property :name, String refers_to Item end ###### # Many ###### class Picture property :name, String belongs_to Item end class Figure property :name, String refers_to Item end ###### # Many Many ###### class User property :name, String many_to_many Item end $og1.manage_classes(Item, Tag, Category, Picture, Figure, User) def setup @conn = $og1.conn @i = Item.create_with(:name => 'Copter') @c = Category.create_with(:name => 'blabla') @t = Tag.create_with(:name => 'blabla') @p1 = Picture.create_with(:name => 'blabla1') @p2 = Picture.create_with(:name => 'blabla2') @f1 = Figure.create_with(:name => 'blabla1') @f2 = Figure.create_with(:name => 'blabla2') @u = User.create_with(:name => 'George') @i.category = @c; @c.save @i.tag = @t; @t.save @i.pictures << @p1 @p2.item = @i @i.figures << @f1 @f1.item = @i @i.add_user @u end def teardown [Tag, Item, Category, Picture, Figure, User].map {|x| x.delete_all } @conn.exec("DELETE FROM #{Og::JoinsMany::OgTempJ_ogj_tc_deletesrelationship_item_tc_deletesrelationship_user::OGTABLE}") end def test_setup assert_equal 1, Item.count, 'There should be 1 Item' assert_equal 1, Category.count assert_equal 1, Tag.count assert_equal 2, Picture.count assert_equal 2, Figure.count assert_equal @t, @i.tag assert_equal @c, @i.category end def test_relationship_intact assert_equal @i.oid, @t.instance_variable_get('@item_oid') assert_equal @i.oid, @c.instance_variable_get('@item_oid') end def test_descendants assert_equal [ [Og::JoinsMany::OgTempJ_ogj_tc_deletesrelationship_item_tc_deletesrelationship_user, "item_oid"], [Category, "item_oid"], [Picture, "item_oid"]], Item.ann.self.descendants end ###### # Single ###### def test_deletes_category @i.delete assert_equal 0, Category.count, "Category should be deleted" end def test_no_deletes_tag @i.delete assert_equal 1, Tag.count, 'Tag shouldn\'t be deleted' end ###### # Many ###### def test_deletes_picture @i.delete assert_equal 0, Picture.count, "Pictures should be deleted" end def test_no_deletes_figure @i.delete assert_equal 2, Figure.count, 'Figures shouldn\'t be deleted' end ##### # Many Many ##### def test_deletes_rel_in_join_table @i.delete tbl = Og::JoinsMany::OgTempJ_ogj_tc_deletesrelationship_item_tc_deletesrelationship_user::OGTABLE n = @conn.query("SELECT COUNT(*) FROM #{tbl}").first_value.to_i assert_equal 0, n; end ##### # Bug Reports ##### def test_jo_category_foreign_key_na assert_not_nil @i.category assert_equal @i.pk, @i.category.item_oid end end