From 1b54d02dabd56e13abe090993e741dc4337818da Mon Sep 17 00:00:00 2001 From: Alexandru Croitor Date: Thu, 23 May 2019 17:16:21 +0300 Subject: Remove deprecated dashboard & group milestone pages Replaces legacy GroupMilestone, DashboardMilestone, GlobalMilestone models with Group model. Replaces dynamic milestones pages with corresponding project or group milestone pages. Other code cleanup related to dynamic milestone pages https://gitlab.com/gitlab-org/gitlab-ce/issues/39545 --- app/controllers/dashboard/milestones_controller.rb | 30 +-- app/controllers/groups/milestones_controller.rb | 61 +----- app/controllers/projects/milestones_controller.rb | 2 +- app/finders/milestones_finder.rb | 6 +- app/helpers/milestones_helper.rb | 21 --- app/models/concerns/milestoneish.rb | 16 -- app/models/dashboard_group_milestone.rb | 21 --- app/models/dashboard_milestone.rb | 15 -- app/models/global_milestone.rb | 102 ---------- app/models/group_milestone.rb | 43 ----- .../dashboard/milestones/_milestone.html.haml | 1 - app/views/dashboard/milestones/show.html.haml | 5 - app/views/groups/milestones/_milestone.html.haml | 2 - app/views/groups/milestones/index.html.haml | 5 +- app/views/groups/milestones/show.html.haml | 1 - app/views/projects/milestones/_milestone.html.haml | 1 - app/views/shared/milestones/_milestone.html.haml | 46 ++--- app/views/shared/milestones/_tabs.html.haml | 16 +- app/views/shared/milestones/_top.html.haml | 37 +--- .../39545-cleanup-dynamic-milestone-pages.yml | 5 + config/routes/dashboard.rb | 8 +- config/routes/group.rb | 8 +- .../dashboard/milestones_controller_spec.rb | 26 +-- .../groups/milestones_controller_spec.rb | 120 ++---------- spec/features/dashboard/milestone_tabs_spec.rb | 40 ---- spec/features/groups/milestone_spec.rb | 35 ++-- spec/features/groups/milestones_sorting_spec.rb | 17 +- spec/features/milestone_spec.rb | 14 -- spec/models/global_milestone_spec.rb | 207 --------------------- spec/models/group_milestone_spec.rb | 57 ------ .../shared_examples/milestone_tabs_examples.rb | 10 +- spec/views/shared/milestones/_top.html.haml.rb | 16 -- 32 files changed, 98 insertions(+), 896 deletions(-) delete mode 100644 app/models/dashboard_group_milestone.rb delete mode 100644 app/models/dashboard_milestone.rb delete mode 100644 app/models/global_milestone.rb delete mode 100644 app/models/group_milestone.rb delete mode 100644 app/views/dashboard/milestones/show.html.haml create mode 100644 changelogs/unreleased/39545-cleanup-dynamic-milestone-pages.yml delete mode 100644 spec/features/dashboard/milestone_tabs_spec.rb delete mode 100644 spec/models/global_milestone_spec.rb delete mode 100644 spec/models/group_milestone_spec.rb diff --git a/app/controllers/dashboard/milestones_controller.rb b/app/controllers/dashboard/milestones_controller.rb index 912036da0ea..d2606fcde35 100644 --- a/app/controllers/dashboard/milestones_controller.rb +++ b/app/controllers/dashboard/milestones_controller.rb @@ -1,48 +1,32 @@ # frozen_string_literal: true class Dashboard::MilestonesController < Dashboard::ApplicationController - include MilestoneActions - before_action :projects before_action :groups, only: :index - before_action :milestone, only: [:show, :merge_requests, :participants, :labels] def index respond_to do |format| format.html do @milestone_states = Milestone.states_count(@projects.select(:id), @groups.select(:id)) - @milestones = Kaminari.paginate_array(milestones).page(params[:page]) + @milestones = milestones.page(params[:page]) end format.json do - render json: milestones + render json: milestones.to_json(only: [:id, :title], methods: :name) end end end - def show - end - private - def group_milestones - DashboardGroupMilestone.build_collection(groups, params) - end - - # See [#39545](https://gitlab.com/gitlab-org/gitlab-ce/issues/39545) for info about the deprecation of dynamic milestones - def dynamic_milestones - DashboardMilestone.build_collection(@projects, params) - end - def milestones - @milestones = group_milestones + dynamic_milestones - end - - def milestone - @milestone = DashboardMilestone.build(@projects, params[:title]) - render_404 unless @milestone + MilestonesFinder.new(search_params).execute end def groups @groups ||= GroupsFinder.new(current_user, all_available: false).execute end + + def search_params + params.permit(:state, :search_title).merge(group_ids: groups.map(&:id), project_ids: projects) + end end diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb index 7ed4384089b..3c8a99131d4 100644 --- a/app/controllers/groups/milestones_controller.rb +++ b/app/controllers/groups/milestones_controller.rb @@ -1,20 +1,18 @@ # frozen_string_literal: true class Groups::MilestonesController < Groups::ApplicationController - include MilestoneActions - before_action :group_projects - before_action :milestone, only: [:edit, :show, :update, :merge_requests, :participants, :labels, :destroy] + before_action :milestone, only: [:edit, :show, :update, :destroy] before_action :authorize_admin_milestones!, only: [:edit, :new, :create, :update, :destroy] def index respond_to do |format| format.html do @milestone_states = Milestone.states_count(group_projects, [group]) - @milestones = Kaminari.paginate_array(milestones).page(params[:page]) + @milestones = milestones.page(params[:page]) end format.json do - render json: milestones.map { |m| m.for_display.slice(:id, :title, :name) } + render json: milestones.to_json(only: [:id, :title], methods: :name) end end end @@ -27,7 +25,7 @@ class Groups::MilestonesController < Groups::ApplicationController @milestone = Milestones::CreateService.new(group, current_user, milestone_params).execute if @milestone.persisted? - redirect_to milestone_path + redirect_to milestone_path(@milestone) else render "new" end @@ -37,23 +35,15 @@ class Groups::MilestonesController < Groups::ApplicationController end def edit - render_404 if @milestone.legacy_group_milestone? end def update - # Keep this compatible with legacy group milestones where we have to update - # all projects milestones states at once. - milestones, update_params = get_milestones_for_update - milestones.each do |milestone| - Milestones::UpdateService.new(milestone.parent, current_user, update_params).execute(milestone) - end + Milestones::UpdateService.new(@milestone.parent, current_user, milestone_params).execute(@milestone) - redirect_to milestone_path + redirect_to milestone_path(@milestone) end def destroy - return render_404 if @milestone.legacy_group_milestone? - Milestones::DestroyService.new(group, current_user).execute(@milestone) respond_to do |format| @@ -64,14 +54,6 @@ class Groups::MilestonesController < Groups::ApplicationController private - def get_milestones_for_update - if @milestone.legacy_group_milestone? - [@milestone.milestones, legacy_milestone_params] - else - [[@milestone], milestone_params] - end - end - def authorize_admin_milestones! return render_404 unless can?(current_user, :admin_milestone, group) end @@ -80,41 +62,18 @@ class Groups::MilestonesController < Groups::ApplicationController params.require(:milestone).permit(:title, :description, :start_date, :due_date, :state_event) end - def legacy_milestone_params - params.require(:milestone).permit(:state_event) - end - - def milestone_path - if @milestone.legacy_group_milestone? - group_milestone_path(group, @milestone.safe_title, title: @milestone.title) - else - group_milestone_path(group, @milestone.iid) - end - end - def milestones - milestones = MilestonesFinder.new(search_params).execute - - @sort = params[:sort] || 'due_date_asc' - MilestoneArray.sort(milestones + legacy_milestones, @sort) - end - - def legacy_milestones - GroupMilestone.build_collection(group, group_projects, params) + MilestonesFinder.new(search_params).execute end def milestone - @milestone = - if params[:title] - GroupMilestone.build(group, group_projects, params[:title]) - else - group.milestones.find_by_iid(params[:id]) - end + @milestone = group.milestones.find_by_iid(params[:id]) render_404 unless @milestone end def search_params - params.permit(:state, :search_title).merge(group_ids: group.id) + @sort = params[:sort] || 'due_date_asc' + params.permit(:state, :search_title).merge(sort: @sort, group_ids: group.id, project_ids: group_projects) end end diff --git a/app/controllers/projects/milestones_controller.rb b/app/controllers/projects/milestones_controller.rb index f6f61b6e5fb..06bcedb5e3a 100644 --- a/app/controllers/projects/milestones_controller.rb +++ b/app/controllers/projects/milestones_controller.rb @@ -32,7 +32,7 @@ class Projects::MilestonesController < Projects::ApplicationController @milestones = @milestones.page(params[:page]) end format.json do - render json: @milestones.to_json(methods: :name) + render json: @milestones.to_json(only: [:id, :title], methods: :name) end end end diff --git a/app/finders/milestones_finder.rb b/app/finders/milestones_finder.rb index 77b55cbb838..441d4d16978 100644 --- a/app/finders/milestones_finder.rb +++ b/app/finders/milestones_finder.rb @@ -56,10 +56,8 @@ class MilestonesFinder Milestone.filter_by_state(items, params[:state]) end - # rubocop: disable CodeReuse/ActiveRecord def order(items) - order_statement = Gitlab::Database.nulls_last_order('due_date', 'ASC') - items.reorder(order_statement).order('title ASC') + sort_by = params[:sort].presence || 'due_date_asc' + items.sort_by_attribute(sort_by).order('title ASC') # rubocop: disable CodeReuse/ActiveRecord end - # rubocop: enable CodeReuse/ActiveRecord end diff --git a/app/helpers/milestones_helper.rb b/app/helpers/milestones_helper.rb index c1a04640688..017efd68e06 100644 --- a/app/helpers/milestones_helper.rb +++ b/app/helpers/milestones_helper.rb @@ -226,27 +226,6 @@ module MilestonesHelper end end - def group_milestone_route(milestone, params = {}) - params = nil if params.empty? - - if milestone.legacy_group_milestone? - group_milestone_path(@group, milestone.safe_title, title: milestone.title, milestone: params) - else - group_milestone_path(@group, milestone.iid, milestone: params) - end - end - - def group_or_project_milestone_path(milestone) - params = - if milestone.group_milestone? - { milestone: { title: milestone.title } } - else - { title: milestone.title } - end - - milestone_path(milestone.milestone, params) - end - def can_admin_project_milestones? strong_memoize(:can_admin_project_milestones) do can?(current_user, :admin_milestone, @project) diff --git a/app/models/concerns/milestoneish.rb b/app/models/concerns/milestoneish.rb index 3deb86da6cf..743cdbed04d 100644 --- a/app/models/concerns/milestoneish.rb +++ b/app/models/concerns/milestoneish.rb @@ -83,22 +83,6 @@ module Milestoneish due_date && due_date.past? end - def group_milestone? - false - end - - def project_milestone? - false - end - - def legacy_group_milestone? - false - end - - def dashboard_milestone? - false - end - def total_issue_time_spent @total_issue_time_spent ||= issues.joins(:timelogs).sum(:time_spent) end diff --git a/app/models/dashboard_group_milestone.rb b/app/models/dashboard_group_milestone.rb deleted file mode 100644 index ec52f1ed370..00000000000 --- a/app/models/dashboard_group_milestone.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true -# Dashboard Group Milestones are milestones that allow us to pull more info out for the UI that the Milestone object doesn't allow for -class DashboardGroupMilestone < GlobalMilestone - extend ::Gitlab::Utils::Override - - attr_reader :group_name - - def initialize(milestone) - super - - @group_name = milestone.group.full_name - end - - def self.build_collection(groups, params) - milestones = Milestone.of_groups(groups.select(:id)) - .reorder_by_due_date_asc - .order_by_name_asc - milestones = milestones.search_title(params[:search_title]) if params[:search_title].present? - Milestone.filter_by_state(milestones, params[:state]).map { |m| new(m) } - end -end diff --git a/app/models/dashboard_milestone.rb b/app/models/dashboard_milestone.rb deleted file mode 100644 index 9b377b70e5b..00000000000 --- a/app/models/dashboard_milestone.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -class DashboardMilestone < GlobalMilestone - attr_reader :project_name - - def initialize(milestone) - super - - @project_name = milestone.project.full_name - end - - def project_milestone? - true - end -end diff --git a/app/models/global_milestone.rb b/app/models/global_milestone.rb deleted file mode 100644 index 59f5a7703e2..00000000000 --- a/app/models/global_milestone.rb +++ /dev/null @@ -1,102 +0,0 @@ -# frozen_string_literal: true -# Global Milestones are milestones that can be shared across multiple projects -class GlobalMilestone - include Milestoneish - - STATE_COUNT_HASH = { opened: 0, closed: 0, all: 0 }.freeze - - attr_reader :milestone - alias_attribute :name, :title - - delegate :title, :state, :due_date, :start_date, :participants, :project, - :group, :expires_at, :closed?, :iid, :group_milestone?, :safe_title, - :milestoneish_id, :parent, to: :milestone - - def to_hash - { - name: title, - title: title, - group_name: group&.full_name, - project_name: project&.full_name - } - end - - def for_display - @milestone - end - - def self.build_collection(projects, params) - items = Milestone.of_projects(projects) - .reorder_by_due_date_asc - .order_by_name_asc - items = items.search_title(params[:search_title]) if params[:search_title].present? - - Milestone.filter_by_state(items, params[:state]).map { |m| new(m) } - end - - # necessary for legacy milestones - def self.build(projects, title) - milestones = Milestone.of_projects(projects).where(title: title) - return if milestones.blank? - - new(milestones.first) - end - - def self.states_count(projects, group = nil) - legacy_group_milestones_count = legacy_group_milestone_states_count(projects) - group_milestones_count = group_milestones_states_count(group) - - legacy_group_milestones_count.merge(group_milestones_count) do |k, legacy_group_milestones_count, group_milestones_count| - legacy_group_milestones_count + group_milestones_count - end - end - - def self.group_milestones_states_count(group) - return STATE_COUNT_HASH unless group - - counts_by_state = Milestone.of_groups(group).count_by_state - - { - opened: counts_by_state['active'] || 0, - closed: counts_by_state['closed'] || 0, - all: counts_by_state.values.sum - } - end - - def self.legacy_group_milestone_states_count(projects) - return STATE_COUNT_HASH unless projects - - # We need to reorder(nil) on the projects, because the controller passes them in sorted. - relation = Milestone.of_projects(projects.reorder(nil)).count_by_state - - { - opened: relation['active'] || 0, - closed: relation['closed'] || 0, - all: relation.values.sum - } - end - - def initialize(milestone) - @milestone = milestone - end - - def active? - state == 'active' - end - - def closed? - state == 'closed' - end - - def issues - @issues ||= Issue.of_milestones(milestone).includes(:project, :assignees, :labels) - end - - def merge_requests - @merge_requests ||= MergeRequest.of_milestones(milestone).includes(:target_project, :assignee, :labels) - end - - def labels - @labels ||= GlobalLabel.build_collection(milestone.labels).sort_by!(&:title) - end -end diff --git a/app/models/group_milestone.rb b/app/models/group_milestone.rb deleted file mode 100644 index 97cb26c6ea9..00000000000 --- a/app/models/group_milestone.rb +++ /dev/null @@ -1,43 +0,0 @@ -# frozen_string_literal: true -# Group Milestones are milestones that can be shared among many projects within the same group -class GroupMilestone < GlobalMilestone - attr_reader :group, :milestones - - def self.build_collection(group, projects, params) - params = - { state: params[:state], search_title: params[:search_title] } - - project_milestones = Milestone.of_projects(projects) - project_milestones = project_milestones.search_title(params[:search_title]) if params[:search_title].present? - child_milestones = Milestone.filter_by_state(project_milestones, params[:state]) - grouped_milestones = child_milestones.group_by(&:title) - - grouped_milestones.map do |title, grouped| - new(title, grouped, group) - end - end - - def self.build(group, projects, title) - child_milestones = Milestone.of_projects(projects).where(title: title) - return if child_milestones.blank? - - new(title, child_milestones, group) - end - - def initialize(title, milestones, group) - @milestones = milestones - @group = group - end - - def milestone - @milestone ||= milestones.find { |m| m.description.present? } || milestones.first - end - - def issues_finder_params - { group_id: group.id } - end - - def legacy_group_milestone? - true - end -end diff --git a/app/views/dashboard/milestones/_milestone.html.haml b/app/views/dashboard/milestones/_milestone.html.haml index 89212eb6bf9..4921de32f65 100644 --- a/app/views/dashboard/milestones/_milestone.html.haml +++ b/app/views/dashboard/milestones/_milestone.html.haml @@ -1,5 +1,4 @@ = render 'shared/milestones/milestone', - milestone_path: group_or_project_milestone_path(milestone), issues_path: issues_dashboard_path(milestone_title: milestone.title), merge_requests_path: merge_requests_dashboard_path(milestone_title: milestone.title), milestone: milestone, diff --git a/app/views/dashboard/milestones/show.html.haml b/app/views/dashboard/milestones/show.html.haml deleted file mode 100644 index 2129920afd2..00000000000 --- a/app/views/dashboard/milestones/show.html.haml +++ /dev/null @@ -1,5 +0,0 @@ -- header_title "Milestones", dashboard_milestones_path - -= render 'shared/milestones/top', milestone: @milestone -= render 'shared/milestones/tabs', milestone: @milestone, show_full_project_name: true -= render 'shared/milestones/sidebar', milestone: @milestone, affix_offset: 51 diff --git a/app/views/groups/milestones/_milestone.html.haml b/app/views/groups/milestones/_milestone.html.haml index bae8997e24c..b73626dab81 100644 --- a/app/views/groups/milestones/_milestone.html.haml +++ b/app/views/groups/milestones/_milestone.html.haml @@ -1,6 +1,4 @@ - = render 'shared/milestones/milestone', - milestone_path: group_milestone_route(milestone), issues_path: issues_group_path(@group, milestone_title: milestone.title), merge_requests_path: merge_requests_group_path(@group, milestone_title: milestone.title), milestone: milestone diff --git a/app/views/groups/milestones/index.html.haml b/app/views/groups/milestones/index.html.haml index b6fb908c8f6..6fbfdc6ce0f 100644 --- a/app/views/groups/milestones/index.html.haml +++ b/app/views/groups/milestones/index.html.haml @@ -16,5 +16,8 @@ .nothing-here-block No milestones to show - else - @milestones.each do |milestone| - = render 'milestone', milestone: milestone + - if milestone.project + = render 'projects/milestones/milestone', milestone: milestone + - else + = render 'milestone', milestone: milestone = paginate @milestones, theme: "gitlab" diff --git a/app/views/groups/milestones/show.html.haml b/app/views/groups/milestones/show.html.haml index 23b1a22240f..8711f8583de 100644 --- a/app/views/groups/milestones/show.html.haml +++ b/app/views/groups/milestones/show.html.haml @@ -1,4 +1,3 @@ = render "header_title" = render 'shared/milestones/top', milestone: @milestone, group: @group -= render 'shared/milestones/tabs', milestone: @milestone, show_project_name: true if @milestone.legacy_group_milestone? = render 'shared/milestones/sidebar', milestone: @milestone, affix_offset: 102 diff --git a/app/views/projects/milestones/_milestone.html.haml b/app/views/projects/milestones/_milestone.html.haml index bc82b45f902..00937c5bf73 100644 --- a/app/views/projects/milestones/_milestone.html.haml +++ b/app/views/projects/milestones/_milestone.html.haml @@ -1,5 +1,4 @@ = render 'shared/milestones/milestone', - milestone_path: project_milestone_path(milestone.project, milestone), issues_path: project_issues_path(milestone.project, milestone_title: milestone.title), merge_requests_path: project_merge_requests_path(milestone.project, milestone_title: milestone.title), milestone: milestone diff --git a/app/views/shared/milestones/_milestone.html.haml b/app/views/shared/milestones/_milestone.html.haml index e99aa3f1ee4..e5521f3a3a4 100644 --- a/app/views/shared/milestones/_milestone.html.haml +++ b/app/views/shared/milestones/_milestone.html.haml @@ -6,27 +6,21 @@ .row .col-sm-6 .append-bottom-5 - %strong= link_to truncate(milestone.title, length: 100), milestone_path + %strong= link_to truncate(milestone.title, length: 100), milestone_path(milestone) - if @group = " - #{milestone_type}" - - if @project || milestone.is_a?(GlobalMilestone) || milestone.group_milestone? - - if milestone.due_date || milestone.start_date - .milestone-range.append-bottom-5 - = milestone_date_range(milestone) - %div - = render('shared/milestone_expired', milestone: milestone) - - if milestone.group_milestone? - .label-badge.label-badge-blue.d-inline-block - = milestone.group.full_name - - if milestone.legacy_group_milestone? - .projects - - link_to milestone_path(milestone.milestone) do - %span.label-badge.label-badge-blue.d-inline-block.append-bottom-5 - = dashboard ? milestone.project.full_name : milestone.project.name - - if milestone.project - .label-badge.label-badge-gray.d-inline-block - = milestone.project.full_name + - if milestone.due_date || milestone.start_date + .milestone-range.append-bottom-5 + = milestone_date_range(milestone) + %div + = render('shared/milestone_expired', milestone: milestone) + - if milestone.group_milestone? + .label-badge.label-badge-blue.d-inline-block + = milestone.group.full_name + - if milestone.project + .label-badge.label-badge-gray.d-inline-block + = milestone.project.full_name .col-sm-4.milestone-progress = milestone_progress_bar(milestone) @@ -49,16 +43,12 @@ container: 'body', toggle: 'modal' } } = sprite_icon('level-up', size: 14) - - = link_to 'Close Milestone', project_milestone_path(@project, milestone, milestone: {state_event: :close }), method: :put, remote: true, class: "btn btn-sm btn-close btn-grouped" - - unless milestone.active? - = link_to 'Reopen Milestone', project_milestone_path(@project, milestone, milestone: {state_event: :activate }), method: :put, class: "btn btn-grouped btn-reopen" - - if @group - - if can?(current_user, :admin_milestone, @group) - - if milestone.closed? - = link_to 'Reopen Milestone', group_milestone_route(milestone, {state_event: :activate }), method: :put, class: "btn btn-sm btn-grouped btn-reopen" - - else - = link_to 'Close Milestone', group_milestone_route(milestone, {state_event: :close }), method: :put, class: "btn btn-sm btn-grouped btn-close" - if dashboard .label-badge.label-badge-gray = milestone_type + - else + - if can?(current_user, :admin_milestone, milestone.parent) + - if milestone.closed? + = link_to 'Reopen Milestone', milestone_path(milestone, milestone: {state_event: :activate }), method: :put, class: "btn btn-sm btn-grouped btn-reopen" + - else + = link_to 'Close Milestone', milestone_path(milestone, milestone: {state_event: :close }), method: :put, class: "btn btn-sm btn-grouped btn-close" diff --git a/app/views/shared/milestones/_tabs.html.haml b/app/views/shared/milestones/_tabs.html.haml index b877f66c71e..8db34da10fb 100644 --- a/app/views/shared/milestones/_tabs.html.haml +++ b/app/views/shared/milestones/_tabs.html.haml @@ -1,4 +1,5 @@ -- issues_accessible = milestone.is_a?(GlobalMilestone) || can?(current_user, :read_issue, @project) +- issues_accessible = can?(current_user, :read_issue, @project) +- mr_active_css_class = 'active' unless issues_accessible .scrolling-tabs-container.inner-page-scroll-tabs.is-smaller .fade-left= icon('angle-left') @@ -9,15 +10,10 @@ = link_to '#tab-issues', class: 'nav-link active', 'data-toggle' => 'tab', 'data-show' => '.tab-issues-buttons' do Issues %span.badge.badge-pill= milestone.issues_visible_to_user(current_user).size - %li.nav-item - = link_to '#tab-merge-requests', class: 'nav-link', 'data-toggle' => 'tab', 'data-endpoint': milestone_merge_request_tab_path(milestone) do - Merge Requests - %span.badge.badge-pill= milestone.merge_requests_visible_to_user(current_user).size - - else - %li.nav-item - = link_to '#tab-merge-requests', class: 'nav-link active', 'data-toggle' => 'tab', 'data-endpoint': milestone_merge_request_tab_path(milestone) do - Merge Requests - %span.badge.badge-pill= milestone.merge_requests.size + %li.nav-item + = link_to '#tab-merge-requests', class: "nav-link #{mr_active_css_class}", 'data-toggle' => 'tab', 'data-endpoint': milestone_merge_request_tab_path(milestone) do + Merge Requests + %span.badge.badge-pill= milestone.merge_requests.size %li.nav-item = link_to '#tab-participants', class: 'nav-link', 'data-toggle' => 'tab', 'data-endpoint': milestone_participants_tab_path(milestone) do Participants diff --git a/app/views/shared/milestones/_top.html.haml b/app/views/shared/milestones/_top.html.haml index 43503e1d08a..cbb2c6c0656 100644 --- a/app/views/shared/milestones/_top.html.haml +++ b/app/views/shared/milestones/_top.html.haml @@ -1,8 +1,7 @@ - page_title milestone.title -- @breadcrumb_link = dashboard_milestone_path(milestone.safe_title, title: milestone.title) +- @breadcrumb_link = milestone_path(milestone) - group = local_assigns[:group] -- is_dynamic_milestone = milestone.legacy_group_milestone? || milestone.dashboard_milestone? .detail-page-header.milestone-page-header .status-box{ class: "status-box-#{milestone.closed? ? 'closed' : 'open'}" } @@ -28,18 +27,14 @@ = link_to edit_group_milestone_path(group, milestone), class: "btn btn btn-grouped" do Edit - if milestone.active? - = link_to 'Close Milestone', group_milestone_route(milestone, {state_event: :close }), method: :put, class: "btn btn-grouped btn-close" + = link_to 'Close Milestone', milestone_path(milestone, milestone: {state_event: :close }), method: :put, class: "btn btn-grouped btn-close" - else - = link_to 'Reopen Milestone', group_milestone_route(milestone, {state_event: :activate }), method: :put, class: "btn btn-grouped btn-reopen" - - - unless is_dynamic_milestone - = render 'shared/milestones/delete_button' + = link_to 'Reopen Milestone', milestone_path(milestone, milestone: {state_event: :activate }), method: :put, class: "btn btn-grouped btn-reopen" + = render 'shared/milestones/delete_button' %a.btn.btn-default.btn-grouped.float-right.d-block.d-sm-none.js-sidebar-toggle{ href: "#" } = icon('angle-double-left') -= render 'shared/milestones/deprecation_message' if is_dynamic_milestone - .detail-page-description.milestone-detail %h2.title = markdown_field(milestone, :title) @@ -55,29 +50,7 @@ = render_if_exists 'shared/milestones/burndown', milestone: @milestone, project: @project -- if is_dynamic_milestone - .table-holder - %table.table - %thead - %tr - %th Project - %th Open issues - %th State - %th Due date - %tr - %td - - project_name = group ? milestone.project.name : milestone.project.full_name - = link_to project_name, milestone_path(milestone.milestone) - %td - = milestone.milestone.issues_visible_to_user(current_user).opened.count - %td - - if milestone.closed? - Closed - - else - Open - %td - = milestone.expires_at -- elsif milestone.group_milestone? +- if milestone.group_milestone? %br View = link_to 'Issues', issues_group_path(@group, milestone_title: milestone.title) diff --git a/changelogs/unreleased/39545-cleanup-dynamic-milestone-pages.yml b/changelogs/unreleased/39545-cleanup-dynamic-milestone-pages.yml new file mode 100644 index 00000000000..ba00d69cecf --- /dev/null +++ b/changelogs/unreleased/39545-cleanup-dynamic-milestone-pages.yml @@ -0,0 +1,5 @@ +--- +title: Remove deprecated dashboard & group milestone pages +merge_request: 28668 +author: +type: removed diff --git a/config/routes/dashboard.rb b/config/routes/dashboard.rb index f1e8c2b9d82..7e29a36f020 100644 --- a/config/routes/dashboard.rb +++ b/config/routes/dashboard.rb @@ -5,13 +5,7 @@ resource :dashboard, controller: 'dashboard', only: [] do get :activity scope module: :dashboard do - resources :milestones, only: [:index, :show] do - member do - get :merge_requests - get :participants - get :labels - end - end + resources :milestones, only: [:index] resources :labels, only: [:index] resources :groups, only: [:index] diff --git a/config/routes/group.rb b/config/routes/group.rb index 2cf9eb82447..6550bd991ee 100644 --- a/config/routes/group.rb +++ b/config/routes/group.rb @@ -45,13 +45,7 @@ constraints(::Constraints::GroupUrlConstrainer.new) do post :toggle_subscription, on: :member end - resources :milestones, constraints: { id: %r{[^/]+} } do - member do - get :merge_requests - get :participants - get :labels - end - end + resources :milestones, constraints: { id: %r{[^/]+} } resource :avatar, only: [:destroy] diff --git a/spec/controllers/dashboard/milestones_controller_spec.rb b/spec/controllers/dashboard/milestones_controller_spec.rb index 67939aa4e6a..5a5ff835549 100644 --- a/spec/controllers/dashboard/milestones_controller_spec.rb +++ b/spec/controllers/dashboard/milestones_controller_spec.rb @@ -8,12 +8,7 @@ describe Dashboard::MilestonesController do let(:user) { create(:user) } let(:project_milestone) { create(:milestone, project: project) } let(:group_milestone) { create(:milestone, group: group) } - let(:milestone) do - DashboardMilestone.build( - [project], - project_milestone.title - ) - end + let(:milestone) { create(:milestone, group: group) } let(:issue) { create(:issue, project: project, milestone: project_milestone) } let(:group_issue) { create(:issue, milestone: group_milestone, project: create(:project, group: group)) } @@ -28,22 +23,6 @@ describe Dashboard::MilestonesController do group.add_developer(user) end - it_behaves_like 'milestone tabs' - - describe "#show" do - render_views - - def view_milestone - get :show, params: { id: milestone.safe_title, title: milestone.title } - end - - it 'shows milestone page' do - view_milestone - - expect(response).to have_gitlab_http_status(200) - end - end - describe "#index" do let(:public_group) { create(:group, :public) } let!(:public_milestone) { create(:milestone, group: public_group) } @@ -57,8 +36,7 @@ describe Dashboard::MilestonesController do expect(response).to have_gitlab_http_status(200) expect(json_response.size).to eq(2) - expect(json_response.map { |i| i["name"] }).to match_array([group_milestone.name, project_milestone.name]) - expect(json_response.map { |i| i["group_name"] }.compact).to match_array(group.name) + expect(json_response.map { |i| i["title"] }).to match_array([group_milestone.title, project_milestone.title]) end it 'returns closed group and project milestones to which the user belongs' do diff --git a/spec/controllers/groups/milestones_controller_spec.rb b/spec/controllers/groups/milestones_controller_spec.rb index bf164aeed38..48a77ac43c1 100644 --- a/spec/controllers/groups/milestones_controller_spec.rb +++ b/spec/controllers/groups/milestones_controller_spec.rb @@ -8,15 +8,7 @@ describe Groups::MilestonesController do let!(:project2) { create(:project, group: group) } let(:user) { create(:user) } let(:title) { '肯定不是中文的问题' } - let(:milestone) do - project_milestone = create(:milestone, project: project) - - GroupMilestone.build( - group, - [project], - project_milestone.title - ) - end + let(:milestone) { create(:milestone, project: project) } let(:milestone_path) { group_milestone_path(group, milestone.safe_title, title: milestone.title) } let(:milestone_params) do @@ -67,17 +59,16 @@ describe Groups::MilestonesController do context 'as JSON' do let!(:milestone) { create(:milestone, group: group, title: 'group milestone') } - let!(:legacy_milestone1) { create(:milestone, project: project, title: 'legacy') } - let!(:legacy_milestone2) { create(:milestone, project: project2, title: 'legacy') } + let!(:project_milestone1) { create(:milestone, project: project, title: 'same name') } + let!(:project_milestone2) { create(:milestone, project: project2, title: 'same name') } - it 'lists legacy group milestones and group milestones' do + it 'lists project and group milestones' do get :index, params: { group_id: group.to_param }, format: :json milestones = json_response - expect(milestones.count).to eq(2) - expect(milestones.first["title"]).to eq("group milestone") - expect(milestones.second["title"]).to eq("legacy") + expect(milestones.count).to eq(3) + expect(milestones.collect { |m| m['title'] }).to match_array(['same name', 'same name', 'group milestone']) expect(response).to have_gitlab_http_status(200) expect(response.content_type).to eq 'application/json' end @@ -91,31 +82,18 @@ describe Groups::MilestonesController do end describe '#show' do - let(:milestone1) { create(:milestone, project: project, title: 'legacy') } - let(:milestone2) { create(:milestone, project: project, title: 'legacy') } - let(:group_milestone) { create(:milestone, group: group) } + render_views - context 'when there is a title parameter' do - it 'searches for a legacy group milestone' do - expect(GroupMilestone).to receive(:build) - expect(Milestone).not_to receive(:find_by_iid) + let!(:group_milestone) { create(:milestone, group: group) } - get :show, params: { group_id: group.to_param, id: title, title: milestone1.safe_title } - end - end + it 'renders for a group milestone' do + get :show, params: { group_id: group.to_param, id: group_milestone.iid } - context 'when there is not a title parameter' do - it 'searches for a group milestone' do - expect(GlobalMilestone).not_to receive(:build) - expect(Milestone).to receive(:find_by_iid) - - get :show, params: { group_id: group.to_param, id: group_milestone.id } - end + expect(response).to have_gitlab_http_status(200) + expect(response.body).to include(group_milestone.title) end end - it_behaves_like 'milestone tabs' - describe "#create" do it "creates group milestone with Chinese title" do post :create, @@ -150,34 +128,6 @@ describe Groups::MilestonesController do expect(response).to redirect_to(group_milestone_path(group, milestone.iid)) expect(milestone.title).to eq("title changed") end - - context "legacy group milestones" do - let!(:milestone1) { create(:milestone, project: project, title: 'legacy milestone', description: "old description") } - let!(:milestone2) { create(:milestone, project: project2, title: 'legacy milestone', description: "old description") } - - it "updates only group milestones state" do - milestone_params[:title] = "title changed" - milestone_params[:description] = "description changed" - milestone_params[:state_event] = "close" - - put :update, - params: { - id: milestone1.title.to_slug.to_s, - group_id: group.to_param, - milestone: milestone_params, - title: milestone1.title - } - - expect(response).to redirect_to(group_milestone_path(group, milestone1.safe_title, title: milestone1.title)) - - [milestone1, milestone2].each do |milestone| - milestone.reload - expect(milestone.title).to eq("legacy milestone") - expect(milestone.description).to eq("old description") - expect(milestone.state).to eq("closed") - end - end - end end describe "#destroy" do @@ -236,52 +186,6 @@ describe Groups::MilestonesController do end end end - - context 'when requesting a redirected path' do - let(:redirect_route) { group.redirect_routes.create(path: 'old-path') } - - it 'redirects to the canonical path' do - get :merge_requests, params: { group_id: redirect_route.path, id: title } - - expect(response).to redirect_to(merge_requests_group_milestone_path(group.to_param, title)) - expect(controller).to set_flash[:notice].to(group_moved_message(redirect_route, group)) - end - - context 'when the old group path is a substring of the scheme or host' do - let(:redirect_route) { group.redirect_routes.create(path: 'http') } - - it 'does not modify the requested host' do - get :merge_requests, params: { group_id: redirect_route.path, id: title } - - expect(response).to redirect_to(merge_requests_group_milestone_path(group.to_param, title)) - expect(controller).to set_flash[:notice].to(group_moved_message(redirect_route, group)) - end - end - - context 'when the old group path is substring of groups' do - # I.e. /groups/oups should not become /grfoo/oups - let(:redirect_route) { group.redirect_routes.create(path: 'oups') } - - it 'does not modify the /groups part of the path' do - get :merge_requests, params: { group_id: redirect_route.path, id: title } - - expect(response).to redirect_to(merge_requests_group_milestone_path(group.to_param, title)) - expect(controller).to set_flash[:notice].to(group_moved_message(redirect_route, group)) - end - end - - context 'when the old group path is substring of groups plus the new path' do - # I.e. /groups/oups/oup should not become /grfoos - let(:redirect_route) { group.redirect_routes.create(path: 'oups/oup') } - - it 'does not modify the /groups part of the path' do - get :merge_requests, params: { group_id: redirect_route.path, id: title } - - expect(response).to redirect_to(merge_requests_group_milestone_path(group.to_param, title)) - expect(controller).to set_flash[:notice].to(group_moved_message(redirect_route, group)) - end - end - end end end diff --git a/spec/features/dashboard/milestone_tabs_spec.rb b/spec/features/dashboard/milestone_tabs_spec.rb deleted file mode 100644 index 21de7c2f06f..00000000000 --- a/spec/features/dashboard/milestone_tabs_spec.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'spec_helper' - -describe 'Dashboard milestone tabs', :js do - let(:user) { create(:user) } - let(:project) { create(:project) } - let!(:label) { create(:label, project: project) } - let(:project_milestone) { create(:milestone, project: project) } - let(:milestone) do - DashboardMilestone.build( - [project], - project_milestone.title - ) - end - let!(:merge_request) { create(:labeled_merge_request, source_project: project, target_project: project, milestone: project_milestone, labels: [label]) } - - before do - project.add_maintainer(user) - sign_in(user) - - visit dashboard_milestone_path(milestone.safe_title, title: milestone.title) - end - - it 'loads merge requests async' do - click_link 'Merge Requests' - - expect(page).to have_selector('.milestone-merge_requests-list') - end - - it 'loads participants async' do - click_link 'Participants' - - expect(page).to have_selector('#tab-participants .bordered-list') - end - - it 'loads labels async' do - click_link 'Labels' - - expect(page).to have_selector('#tab-labels .bordered-list') - end -end diff --git a/spec/features/groups/milestone_spec.rb b/spec/features/groups/milestone_spec.rb index d57eb87ca77..95d947854c5 100644 --- a/spec/features/groups/milestone_spec.rb +++ b/spec/features/groups/milestone_spec.rb @@ -100,11 +100,9 @@ describe 'Group milestones' do expect(find('.top-area .all .badge').text).to eq("6") end - it 'lists legacy group milestones and group milestones' do - legacy_milestone = GroupMilestone.build_collection(group, group.projects, { state: 'active' }).first - + it 'lists group and project milestones' do expect(page).to have_selector("#milestone_#{active_group_milestone.id}", count: 1) - expect(page).to have_selector("#milestone_#{legacy_milestone.milestone.id}", count: 1) + expect(page).to have_selector("#milestone_#{active_project_milestone2.id}", count: 1) end it 'shows milestone detail and supports its edit' do @@ -123,23 +121,30 @@ describe 'Group milestones' do expect(page).to have_content('v1.0') expect(page).to have_content('v1.1') expect(page).to have_content('GL-113') + expect(page).to have_link( + 'v1.0', + href: project_milestone_path(project, active_project_milestone1) + ) expect(page).to have_link( '1 Issue', - href: issues_group_path(group, milestone_title: 'v1.0') + href: project_issues_path(project, milestone_title: 'v1.0') ) expect(page).to have_link( '0 Merge Requests', - href: merge_requests_group_path(group, milestone_title: 'v1.0') + href: project_merge_requests_path(project, milestone_title: 'v1.0') + ) + expect(page).to have_link( + 'GL-113', + href: group_milestone_path(group, active_group_milestone) + ) + expect(page).to have_link( + '0 Issues', + href: issues_group_path(group, milestone_title: 'GL-113') + ) + expect(page).to have_link( + '0 Merge Requests', + href: merge_requests_group_path(group, milestone_title: 'GL-113') ) - end - - it 'renders group milestone details' do - click_link 'v1.0' - - expect(page).to have_content('expires on Aug 20, 2114') - expect(page).to have_content('v1.0') - expect(page).to have_content('Issues 1 Open: 1 Closed: 0') - expect(page).to have_link(issue.title, href: project_issue_path(issue.project, issue)) end describe 'labels' do diff --git a/spec/features/groups/milestones_sorting_spec.rb b/spec/features/groups/milestones_sorting_spec.rb index 7bc015ea28f..633849b3c56 100644 --- a/spec/features/groups/milestones_sorting_spec.rb +++ b/spec/features/groups/milestones_sorting_spec.rb @@ -22,21 +22,12 @@ describe 'Milestones sorting', :js do # assert default sorting within '.milestones' do - expect(page.all('ul.content-list > li').first.text).to include('v2.0') - expect(page.all('ul.content-list > li')[1].text).to include('v3.0') - expect(page.all('ul.content-list > li').last.text).to include('v1.0') + expect(page.all('ul.content-list > li strong > a').map(&:text)).to eq(['v2.0', 'v2.0', 'v3.0', 'v1.0', 'v1.0']) end click_button 'Due soon' - sort_options = find('ul.dropdown-menu-sort li').all('a').collect(&:text) - - expect(sort_options[0]).to eq('Due soon') - expect(sort_options[1]).to eq('Due later') - expect(sort_options[2]).to eq('Start soon') - expect(sort_options[3]).to eq('Start later') - expect(sort_options[4]).to eq('Name, ascending') - expect(sort_options[5]).to eq('Name, descending') + expect(find('ul.dropdown-menu-sort li').all('a').map(&:text)).to eq(['Due soon', 'Due later', 'Start soon', 'Start later', 'Name, ascending', 'Name, descending']) click_link 'Due later' @@ -44,9 +35,7 @@ describe 'Milestones sorting', :js do # assert descending sorting within '.milestones' do - expect(page.all('ul.content-list > li').first.text).to include('v1.0') - expect(page.all('ul.content-list > li')[1].text).to include('v3.0') - expect(page.all('ul.content-list > li').last.text).to include('v2.0') + expect(page.all('ul.content-list > li strong > a').map(&:text)).to eq(['v1.0', 'v1.0', 'v3.0', 'v2.0', 'v2.0']) end end end diff --git a/spec/features/milestone_spec.rb b/spec/features/milestone_spec.rb index adac59b89ef..749f9a59209 100644 --- a/spec/features/milestone_spec.rb +++ b/spec/features/milestone_spec.rb @@ -109,20 +109,6 @@ describe 'Milestone' do end end - describe 'deprecation popover', :js do - it 'opens deprecation popover' do - milestone = create(:milestone, project: project) - - visit group_milestone_path(group, milestone, title: milestone.title) - - expect(page).to have_selector('.milestone-deprecation-message') - - find('.milestone-deprecation-message .js-popover-link').click - - expect(page).to have_selector('.popover') - end - end - describe 'reopen closed milestones' do before do create(:milestone, :closed, project: project) diff --git a/spec/models/global_milestone_spec.rb b/spec/models/global_milestone_spec.rb deleted file mode 100644 index 9d901d01a52..00000000000 --- a/spec/models/global_milestone_spec.rb +++ /dev/null @@ -1,207 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe GlobalMilestone do - let(:user) { create(:user) } - let(:user2) { create(:user) } - let(:group) { create(:group) } - let(:project1) { create(:project, group: group) } - let(:project2) { create(:project, path: 'gitlab-ci', group: group) } - let(:project3) { create(:project, path: 'cookbook-gitlab', group: group) } - - describe '.build_collection' do - let(:milestone1_due_date) { 2.weeks.from_now.to_date } - - let!(:milestone1_project1) do - create( - :milestone, - title: "Milestone v1.2", - project: project1, - due_date: milestone1_due_date - ) - end - - let!(:milestone1_project2) do - create( - :milestone, - title: "Milestone v1.2", - project: project2, - due_date: milestone1_due_date - ) - end - - let!(:milestone1_project3) do - create( - :milestone, - title: "Milestone v1.2", - project: project3, - due_date: milestone1_due_date - ) - end - - let!(:milestone2_project1) do - create( - :milestone, - title: "VD-123", - project: project1, - due_date: nil - ) - end - - let!(:milestone2_project2) do - create( - :milestone, - title: "VD-123", - project: project2, - due_date: nil - ) - end - - let!(:milestone2_project3) do - create( - :milestone, - title: "VD-123", - project: project3, - due_date: nil - ) - end - - let!(:projects) do - [ - project1, - project2, - project3 - ] - end - - let!(:global_milestones) { described_class.build_collection(projects, {}) } - - context 'when building a collection of milestones' do - it 'has all project milestones' do - expect(global_milestones.count).to eq(6) - end - - it 'has all project milestones titles' do - expect(global_milestones.map(&:title)).to match_array(['Milestone v1.2', 'Milestone v1.2', 'Milestone v1.2', 'VD-123', 'VD-123', 'VD-123']) - end - - it 'has all project milestones' do - expect(global_milestones.size).to eq(6) - end - - it 'sorts collection by due date' do - expect(global_milestones.map(&:due_date)).to eq [milestone1_due_date, milestone1_due_date, milestone1_due_date, nil, nil, nil] - end - - it 'filters milestones by search_title when params[:search_title] is present' do - global_milestones = described_class.build_collection(projects, { search_title: 'v1.2' }) - - expect(global_milestones.map(&:title)).to match_array(['Milestone v1.2', 'Milestone v1.2', 'Milestone v1.2']) - end - end - - context 'when adding new milestones' do - it 'does not add more queries' do - control_count = ActiveRecord::QueryRecorder.new do - described_class.build_collection(projects, {}) - end.count - - create_list(:milestone, 3, project: project3) - - expect do - described_class.build_collection(projects, {}) - end.not_to exceed_all_query_limit(control_count) - end - end - end - - describe '.states_count' do - context 'when the projects have milestones' do - before do - create(:closed_milestone, title: 'Active Group Milestone', project: project3) - create(:active_milestone, title: 'Active Group Milestone', project: project1) - create(:active_milestone, title: 'Active Group Milestone', project: project2) - create(:closed_milestone, title: 'Closed Group Milestone', project: project1) - create(:closed_milestone, title: 'Closed Group Milestone', project: project2) - create(:closed_milestone, title: 'Closed Group Milestone', project: project3) - create(:closed_milestone, title: 'Closed Group Milestone 4', group: group) - end - - it 'returns the quantity of global milestones and group milestones in each possible state' do - expected_count = { opened: 2, closed: 5, all: 7 } - - count = described_class.states_count(Project.all, group) - - expect(count).to eq(expected_count) - end - - it 'returns the quantity of global milestones in each possible state' do - expected_count = { opened: 2, closed: 4, all: 6 } - - count = described_class.states_count(Project.all) - - expect(count).to eq(expected_count) - end - end - - context 'when the projects do not have milestones' do - before do - project1 - end - - it 'returns 0 as the quantity of global milestones in each state' do - expected_count = { opened: 0, closed: 0, all: 0 } - - count = described_class.states_count(Project.all) - - expect(count).to eq(expected_count) - end - end - end - - describe '#initialize' do - let(:milestone1_project1) { create(:milestone, title: "Milestone v1.2", project: project1) } - subject(:global_milestone) { described_class.new(milestone1_project1) } - - it 'has exactly one group milestone' do - expect(global_milestone.title).to eq('Milestone v1.2') - end - - it 'has all project milestones with the same title' do - expect(global_milestone.milestone).to eq(milestone1_project1) - end - end - - describe '#safe_title' do - let(:milestone) { create(:milestone, title: "git / test", project: project1) } - - it 'strips out slashes and spaces' do - global_milestone = described_class.new(milestone) - - expect(global_milestone.safe_title).to eq('git-test') - end - end - - describe '#state' do - context 'when at least one milestone is active' do - it 'returns active' do - title = 'Active Group Milestone' - - global_milestone = described_class.new(create(:active_milestone, title: title)) - - expect(global_milestone.state).to eq('active') - end - end - - context 'when all milestones are closed' do - it 'returns closed' do - title = 'Closed Group Milestone' - - global_milestone = described_class.new(create(:closed_milestone, title: title)) - - expect(global_milestone.state).to eq('closed') - end - end - end -end diff --git a/spec/models/group_milestone_spec.rb b/spec/models/group_milestone_spec.rb deleted file mode 100644 index 01856870fe0..00000000000 --- a/spec/models/group_milestone_spec.rb +++ /dev/null @@ -1,57 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe GroupMilestone do - let(:group) { create(:group) } - let(:project) { create(:project, group: group) } - let(:project_milestone) do - create(:milestone, title: "Milestone v1.2", project: project) - end - - describe '.build' do - it 'returns milestone with group assigned' do - milestone = described_class.build( - group, - [project], - project_milestone.title - ) - - expect(milestone.group).to eq group - end - end - - describe '.build_collection' do - let(:group) { create(:group) } - let(:project1) { create(:project, group: group) } - let(:project2) { create(:project, path: 'gitlab-ci', group: group) } - let(:project3) { create(:project, path: 'cookbook-gitlab', group: group) } - - let!(:projects) do - [ - project1, - project2, - project3 - ] - end - - it 'returns array of milestones, each with group assigned' do - milestones = described_class.build_collection(group, [project], {}) - expect(milestones).to all(have_attributes(group: group)) - end - - context 'when adding new milestones' do - it 'does not add more queries' do - control_count = ActiveRecord::QueryRecorder.new do - described_class.build_collection(group, projects, {}) - end.count - - create(:milestone, title: 'This title', project: project1) - - expect do - described_class.build_collection(group, projects, {}) - end.not_to exceed_all_query_limit(control_count) - end - end - end -end diff --git a/spec/support/shared_examples/milestone_tabs_examples.rb b/spec/support/shared_examples/milestone_tabs_examples.rb index 8b757586941..d43ac12cf6b 100644 --- a/spec/support/shared_examples/milestone_tabs_examples.rb +++ b/spec/support/shared_examples/milestone_tabs_examples.rb @@ -1,14 +1,6 @@ shared_examples 'milestone tabs' do def go(path, extra_params = {}) - params = - case milestone - when DashboardMilestone - { id: milestone.safe_title, title: milestone.title } - when GroupMilestone - { group_id: group.to_param, id: milestone.safe_title, title: milestone.title } - else - { namespace_id: project.namespace.to_param, project_id: project, id: milestone.iid } - end + params = { namespace_id: project.namespace.to_param, project_id: project, id: milestone.iid } get path, params: params.merge(extra_params) end diff --git a/spec/views/shared/milestones/_top.html.haml.rb b/spec/views/shared/milestones/_top.html.haml.rb index 516d81c87ac..045d7e6dcad 100644 --- a/spec/views/shared/milestones/_top.html.haml.rb +++ b/spec/views/shared/milestones/_top.html.haml.rb @@ -9,22 +9,6 @@ describe 'shared/milestones/_top.html.haml' do allow(milestone).to receive(:milestones) { [] } end - it 'renders a deprecation message for a legacy milestone' do - allow(milestone).to receive(:legacy_group_milestone?) { true } - - render 'shared/milestones/top', milestone: milestone - - expect(rendered).to have_css('.milestone-deprecation-message') - end - - it 'renders a deprecation message for a dashboard milestone' do - allow(milestone).to receive(:dashboard_milestone?) { true } - - render 'shared/milestones/top', milestone: milestone - - expect(rendered).to have_css('.milestone-deprecation-message') - end - it 'does not render a deprecation message for a non-legacy and non-dashboard milestone' do assign :group, group -- cgit v1.2.1