diff --git a/app/models/issue.rb b/app/models/issue.rb index 3fc57757d361ab4538c2742a68eaf27a085bd483..e2ea54f8cfd83e0cd3fc9cd90889b3e227d46a9e 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -406,7 +406,11 @@ def next_object_by_relative_position(ignoring: nil, order: :asc) end def relative_positioning_parent_projects - project.group&.root_ancestor&.all_projects&.select(:id) || Project.id_in(project).select(:id) + if namespace.parent&.user_namespace? + Project.id_in(namespace.project).select(:id) + else + namespace.root_ancestor&.all_projects&.select(:id) + end end def self.relative_positioning_query_base(issue) @@ -571,7 +575,7 @@ def check_repositioning_allowed! end def blocked_for_repositioning? - resource_parent.root_namespace&.issue_repositioning_disabled? + namespace.root_ancestor&.issue_repositioning_disabled? end # `from` argument can be a Namespace or Project. diff --git a/app/services/issues/create_service.rb b/app/services/issues/create_service.rb index bc965cf1ec9d0bfc041b2e020c198fd489fd47c1..3d0aee0518747e00c25d8c3b3ed85607e8df64f1 100644 --- a/app/services/issues/create_service.rb +++ b/app/services/issues/create_service.rb @@ -29,7 +29,7 @@ def execute(skip_system_notes: false) # it can be set also from quick actions [:issue_type, :work_item_type, :work_item_type_id].each { |attribute| params.delete(attribute) } - handle_move_between_ids(@issue) + handle_move_between_ids(@issue) if @issue.valid? @add_related_issue ||= params.delete(:add_related_issue) filter_resolve_discussion_params diff --git a/app/services/work_items/reorder_service.rb b/app/services/work_items/reorder_service.rb index 0a7d92247aadc819698e38fbaf7ca372f2ec9a71..d3eab94430701a8cf5c926c862df0359ccefb541 100644 --- a/app/services/work_items/reorder_service.rb +++ b/app/services/work_items/reorder_service.rb @@ -11,7 +11,6 @@ def initialize(current_user:, params:) def execute(work_item) return unauthorized_error(work_item) unless current_user.can?(:update_work_item, work_item) - return non_project_work_item_error(work_item) if work_item.project.blank? return missing_arguments_error(work_item) unless move_between_ids ::WorkItems::UpdateService.new( @@ -36,13 +35,6 @@ def success(work_item) }) end - def non_project_work_item_error(work_item) - error( - work_item, - message: 'Only project work items are supported at this moment' - ) - end - def unauthorized_error(work_item) error( work_item, diff --git a/ee/spec/services/ee/work_items/reorder_service_spec.rb b/ee/spec/services/ee/work_items/reorder_service_spec.rb index 069b2b89ef224f91e417c4ddca873157dabc0370..6b11821bd4efa328e89d3e13378785f6e794e7dd 100644 --- a/ee/spec/services/ee/work_items/reorder_service_spec.rb +++ b/ee/spec/services/ee/work_items/reorder_service_spec.rb @@ -32,12 +32,10 @@ context 'with a non-project level work item' do let(:params) { { move_after_id: item1.id, move_before_id: item2.id } } - it 'does not update the position' do + it 'reorders correctly' do expect { service_result } - .not_to change { non_project_work_item.relative_position } - - expect(service_result[:errors]) - .to eq(["Only project work items are supported at this moment"]) + .to change { non_project_work_item.relative_position } + .to be_between(item1.relative_position, item2.relative_position) end end end