diff test/unit/member_test.rb @ 1526:404aa68d4227

Merge from live branch
author Chris Cannam
date Thu, 11 Sep 2014 12:46:20 +0100
parents dffacf8a6908
children
line wrap: on
line diff
--- a/test/unit/member_test.rb	Mon Mar 17 08:57:04 2014 +0000
+++ b/test/unit/member_test.rb	Thu Sep 11 12:46:20 2014 +0100
@@ -1,5 +1,5 @@
 # Redmine - project management software
-# Copyright (C) 2006-2012  Jean-Philippe Lang
+# Copyright (C) 2006-2014  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -25,7 +25,6 @@
            :member_roles,
            :members,
            :enabled_modules,
-           :workflows,
            :groups_users,
            :watchers,
            :journals, :journal_details,
@@ -70,7 +69,8 @@
     assert !member.save
 
     # must have one role at least
-    user = User.new(:firstname => "new1", :lastname => "user1", :mail => "test_validate@somenet.foo")
+    user = User.new(:firstname => "new1", :lastname => "user1",
+                    :mail => "test_validate@somenet.foo")
     user.login = "test_validate"
     user.password, user.password_confirmation = "password", "password"
     assert user.save
@@ -85,7 +85,8 @@
   end
 
   def test_validate_member_role
-    user = User.new(:firstname => "new1", :lastname => "user1", :mail => "test_validate@somenet.foo")
+    user = User.new(:firstname => "new1", :lastname => "user1",
+                    :mail => "test_validate@somenet.foo")
     user.login = "test_validate_member_role"
     user.password, user.password_confirmation = "password", "password"
     assert user.save
@@ -106,6 +107,23 @@
     assert_nil category1.assigned_to_id
   end
 
+  def test_destroy_should_trigger_callbacks_only_once
+    Member.class_eval { def destroy_test_callback; end}
+    Member.after_destroy :destroy_test_callback
+
+    m = Member.create!(:user_id => 1, :project_id => 1, :role_ids => [1,3])
+
+    Member.any_instance.expects(:destroy_test_callback).once
+    assert_difference 'Member.count', -1 do
+      assert_difference 'MemberRole.count', -2 do
+        m.destroy
+      end
+    end
+    assert m.destroyed?
+  ensure
+    Member._destroy_callbacks.reject! {|c| c.filter==:destroy_test_callback}
+  end
+
   def test_sort_without_roles
     a = Member.new(:roles => [Role.first])
     b = Member.new
@@ -122,70 +140,4 @@
     assert_equal -1, a <=> b
     assert_equal 1,  b <=> a
   end
-
-  context "removing permissions" do
-    setup do
-      Watcher.delete_all("user_id = 9")
-      user = User.find(9)
-      # public
-      Watcher.create!(:watchable => Issue.find(1), :user => user)
-      # private
-      Watcher.create!(:watchable => Issue.find(4), :user => user)
-      Watcher.create!(:watchable => Message.find(7), :user => user)
-      Watcher.create!(:watchable => Wiki.find(2), :user => user)
-      Watcher.create!(:watchable => WikiPage.find(3), :user => user)
-    end
-
-    context "of user" do
-      setup do
-        @member = Member.create!(:project => Project.find(2), :principal => User.find(9), :role_ids => [1, 2])
-      end
-
-      context "by deleting membership" do
-        should "prune watchers" do
-          assert_difference 'Watcher.count', -4 do
-            @member.destroy
-          end
-        end
-      end
-
-      context "by updating roles" do
-        should "prune watchers" do
-          Role.find(2).remove_permission! :view_wiki_pages
-          member = Member.first(:order => 'id desc')
-          assert_difference 'Watcher.count', -2 do
-            member.role_ids = [2]
-            member.save
-          end
-          assert !Message.find(7).watched_by?(@user)
-        end
-      end
-    end
-
-    context "of group" do
-      setup do
-        group = Group.find(10)
-        @member = Member.create!(:project => Project.find(2), :principal => group, :role_ids => [1, 2])
-        group.users << User.find(9)
-      end
-
-      context "by deleting membership" do
-        should "prune watchers" do
-          assert_difference 'Watcher.count', -4 do
-            @member.destroy
-          end
-        end
-      end
-
-      context "by updating roles" do
-        should "prune watchers" do
-          Role.find(2).remove_permission! :view_wiki_pages
-          assert_difference 'Watcher.count', -2 do
-            @member.role_ids = [2]
-            @member.save
-          end
-        end
-      end
-    end
-  end
 end