From 1b911e51f9625082a5e61ca62a78db284383c1d2 2017-01-31 18:15:32 From: Jean-Philippe Lang Date: 2017-01-31 18:15:32 Subject: [PATCH] Time entry queries should be copied and deleted too. git-svn-id: http://svn.redmine.org/redmine/trunk@16320 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/project.rb b/app/models/project.rb index 967c82c..f071010 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -40,7 +40,7 @@ class Project < ActiveRecord::Base has_many :versions, :dependent => :destroy belongs_to :default_version, :class_name => 'Version' has_many :time_entries, :dependent => :destroy - has_many :queries, :class_name => 'IssueQuery', :dependent => :delete_all + has_many :queries, :dependent => :delete_all has_many :documents, :dependent => :destroy has_many :news, lambda {includes(:author)}, :dependent => :destroy has_many :issue_categories, lambda {order("#{IssueCategory.table_name}.name")}, :dependent => :delete_all @@ -1055,12 +1055,12 @@ class Project < ActiveRecord::Base # Copies queries from +project+ def copy_queries(project) project.queries.each do |query| - new_query = IssueQuery.new + new_query = query.class.new new_query.attributes = query.attributes.dup.except("id", "project_id", "sort_criteria", "user_id", "type") new_query.sort_criteria = query.sort_criteria if query.sort_criteria new_query.project = self new_query.user_id = query.user_id - new_query.role_ids = query.role_ids if query.visibility == IssueQuery::VISIBILITY_ROLES + new_query.role_ids = query.role_ids if query.visibility == ::Query::VISIBILITY_ROLES self.queries << new_query end end diff --git a/test/fixtures/queries.yml b/test/fixtures/queries.yml index b92079a..4e58dc6 100644 --- a/test/fixtures/queries.yml +++ b/test/fixtures/queries.yml @@ -162,4 +162,24 @@ queries_009: --- - - priority - desc +queries_010: + id: 10 + type: TimeEntryQuery + project_id: 1 + visibility: 2 + name: My spent time + filters: | + --- + user_id: + :values: + - "me" + :operator: = + + user_id: 1 + column_names: + group_by: + sort_criteria: | + --- + - - spent_on + - desc diff --git a/test/unit/project_copy_test.rb b/test/unit/project_copy_test.rb index 9370beb..0b2c1e6 100644 --- a/test/unit/project_copy_test.rb +++ b/test/unit/project_copy_test.rb @@ -235,17 +235,28 @@ class ProjectCopyTest < ActiveSupport::TestCase assert_equal [1, 2], member.role_ids.sort end - test "#copy should copy project specific queries" do - assert @project.valid? - assert @project.queries.empty? - assert @project.copy(@source_project) + def test_copy_should_copy_project_specific_issue_queries + source = Project.generate! + target = Project.new(:name => 'Copy Test', :identifier => 'copy-test') + IssueQuery.generate!(:project => source, :user => User.find(2)) + assert target.copy(source) - assert_equal @source_project.queries.size, @project.queries.size - @project.queries.each do |query| - assert query - assert_equal @project, query.project - end - assert_equal @source_project.queries.map(&:user_id).sort, @project.queries.map(&:user_id).sort + assert_equal 1, target.queries.size + query = target.queries.first + assert_kind_of IssueQuery, query + assert_equal 2, query.user_id + end + + def test_copy_should_copy_project_specific_time_entry_queries + source = Project.generate! + target = Project.new(:name => 'Copy Test', :identifier => 'copy-test') + TimeEntryQuery.generate!(:project => source, :user => User.find(2)) + assert target.copy(source) + + assert_equal 1, target.queries.size + query = target.queries.first + assert_kind_of TimeEntryQuery, query + assert_equal 2, query.user_id end def test_copy_should_copy_queries_roles_visibility