From: Jean-Philippe Lang Date: Mon, 7 Dec 2009 19:28:47 +0000 (+0000) Subject: Fixes Project#shared_versions for descendants sharing (#465). X-Git-Tag: 0.9.0~132 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=5266e328c029405ab132f4fb99a5ba9bc1d6ba67;p=redmine.git Fixes Project#shared_versions for descendants sharing (#465). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3130 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/project.rb b/app/models/project.rb index 77de59f44..593e60c9e 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -340,8 +340,8 @@ class Project < ActiveRecord::Base " OR (#{Project.table_name}.status = #{Project::STATUS_ACTIVE} AND (" + " #{Version.table_name}.sharing = 'system'" + " OR (#{Project.table_name}.lft >= #{root.lft} AND #{Project.table_name}.rgt <= #{root.rgt} AND #{Version.table_name}.sharing = 'tree')" + - " OR (#{Project.table_name}.lft < #{lft} AND #{Project.table_name}.rgt > #{rgt} AND #{Version.table_name}.sharing = 'hierarchy')" + - " OR (#{Project.table_name}.lft > #{lft} AND #{Project.table_name}.rgt < #{rgt} AND #{Version.table_name}.sharing IN ('hierarchy', 'descendants'))" + + " OR (#{Project.table_name}.lft < #{lft} AND #{Project.table_name}.rgt > #{rgt} AND #{Version.table_name}.sharing IN ('hierarchy', 'descendants'))" + + " OR (#{Project.table_name}.lft > #{lft} AND #{Project.table_name}.rgt < #{rgt} AND #{Version.table_name}.sharing = 'hierarchy')" + "))") end diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb index cbf9ce54f..748065ae7 100644 --- a/test/unit/project_test.rb +++ b/test/unit/project_test.rb @@ -317,6 +317,56 @@ class ProjectTest < ActiveSupport::TestCase assert_equal [1,2], parent.rolled_up_trackers.collect(&:id) end + + def test_shared_versions_none_sharing + p = Project.find(5) + v = Version.create!(:name => 'none_sharing', :project => p, :sharing => 'none') + assert p.shared_versions.include?(v) + assert !p.children.first.shared_versions.include?(v) + assert !p.root.shared_versions.include?(v) + assert !p.siblings.first.shared_versions.include?(v) + assert !p.root.siblings.first.shared_versions.include?(v) + end + + def test_shared_versions_descendants_sharing + p = Project.find(5) + v = Version.create!(:name => 'descendants_sharing', :project => p, :sharing => 'descendants') + assert p.shared_versions.include?(v) + assert p.children.first.shared_versions.include?(v) + assert !p.root.shared_versions.include?(v) + assert !p.siblings.first.shared_versions.include?(v) + assert !p.root.siblings.first.shared_versions.include?(v) + end + + def test_shared_versions_hierarchy_sharing + p = Project.find(5) + v = Version.create!(:name => 'hierarchy_sharing', :project => p, :sharing => 'hierarchy') + assert p.shared_versions.include?(v) + assert p.children.first.shared_versions.include?(v) + assert p.root.shared_versions.include?(v) + assert !p.siblings.first.shared_versions.include?(v) + assert !p.root.siblings.first.shared_versions.include?(v) + end + + def test_shared_versions_tree_sharing + p = Project.find(5) + v = Version.create!(:name => 'tree_sharing', :project => p, :sharing => 'tree') + assert p.shared_versions.include?(v) + assert p.children.first.shared_versions.include?(v) + assert p.root.shared_versions.include?(v) + assert p.siblings.first.shared_versions.include?(v) + assert !p.root.siblings.first.shared_versions.include?(v) + end + + def test_shared_versions_system_sharing + p = Project.find(5) + v = Version.create!(:name => 'system_sharing', :project => p, :sharing => 'system') + assert p.shared_versions.include?(v) + assert p.children.first.shared_versions.include?(v) + assert p.root.shared_versions.include?(v) + assert p.siblings.first.shared_versions.include?(v) + assert p.root.siblings.first.shared_versions.include?(v) + end def test_shared_versions parent = Project.find(1)