Commit 5d7b46d5 authored by charlie ablett's avatar charlie ablett Committed by Paul Slaughter

Port CE changes from EE

- DB migration of board milestone values
- issue finder & spec updates
parent bea3d730
...@@ -55,7 +55,7 @@ export default class MilestoneSelect { ...@@ -55,7 +55,7 @@ export default class MilestoneSelect {
const $sidebarCollapsedValue = $block.find('.sidebar-collapsed-icon'); const $sidebarCollapsedValue = $block.find('.sidebar-collapsed-icon');
const $value = $block.find('.value'); const $value = $block.find('.value');
const $loading = $block.find('.block-loading').fadeOut(); const $loading = $block.find('.block-loading').fadeOut();
selectedMilestoneDefault = showAny ? '' : null; selectedMilestoneDefault = showAny ? __('Any Milestone') : null;
selectedMilestoneDefault = selectedMilestoneDefault =
showNo && defaultNo ? __('No Milestone') : selectedMilestoneDefault; showNo && defaultNo ? __('No Milestone') : selectedMilestoneDefault;
selectedMilestone = $dropdown.data('selected') || selectedMilestoneDefault; selectedMilestone = $dropdown.data('selected') || selectedMilestoneDefault;
...@@ -74,14 +74,16 @@ export default class MilestoneSelect { ...@@ -74,14 +74,16 @@ export default class MilestoneSelect {
if (showAny) { if (showAny) {
extraOptions.push({ extraOptions.push({
id: null, id: null,
name: null, // eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings
name: 'Any',
title: __('Any Milestone'), title: __('Any Milestone'),
}); });
} }
if (showNo) { if (showNo) {
extraOptions.push({ extraOptions.push({
id: -1, id: -1,
name: __('No Milestone'), // eslint-disable-next-line @gitlab/i18n/no-non-i18n-strings
name: 'None',
title: __('No Milestone'), title: __('No Milestone'),
}); });
} }
......
...@@ -484,22 +484,19 @@ class IssuableFinder ...@@ -484,22 +484,19 @@ class IssuableFinder
# rubocop: disable CodeReuse/ActiveRecord # rubocop: disable CodeReuse/ActiveRecord
def by_milestone(items) def by_milestone(items)
if milestones? return items unless milestones?
if filter_by_no_milestone? return items if filter_by_any_milestone?
items = items.left_joins_milestones.where(milestone_id: [-1, nil])
elsif filter_by_any_milestone? if filter_by_no_milestone?
items = items.any_milestone items.left_joins_milestones.where(milestone_id: nil)
elsif filter_by_upcoming_milestone? elsif filter_by_upcoming_milestone?
upcoming_ids = Milestone.upcoming_ids(projects, related_groups) upcoming_ids = Milestone.upcoming_ids(projects, related_groups)
items = items.left_joins_milestones.where(milestone_id: upcoming_ids) items.left_joins_milestones.where(milestone_id: upcoming_ids)
elsif filter_by_started_milestone? elsif filter_by_started_milestone?
items = items.left_joins_milestones.merge(Milestone.started) items.left_joins_milestones.merge(Milestone.started)
else else
items = items.with_milestone(params[:milestone_title]) items.with_milestone(params[:milestone_title])
end
end end
items
end end
# rubocop: enable CodeReuse/ActiveRecord # rubocop: enable CodeReuse/ActiveRecord
......
...@@ -4,8 +4,8 @@ class Milestone < ApplicationRecord ...@@ -4,8 +4,8 @@ class Milestone < ApplicationRecord
# Represents a "No Milestone" state used for filtering Issues and Merge # Represents a "No Milestone" state used for filtering Issues and Merge
# Requests that have no milestone assigned. # Requests that have no milestone assigned.
MilestoneStruct = Struct.new(:title, :name, :id) MilestoneStruct = Struct.new(:title, :name, :id)
None = MilestoneStruct.new('No Milestone', 'No Milestone', 0) None = MilestoneStruct.new('No Milestone', 'No Milestone', -1)
Any = MilestoneStruct.new('Any Milestone', '', -1) Any = MilestoneStruct.new('Any Milestone', '', nil)
Upcoming = MilestoneStruct.new('Upcoming', '#upcoming', -2) Upcoming = MilestoneStruct.new('Upcoming', '#upcoming', -2)
Started = MilestoneStruct.new('Started', '#started', -3) Started = MilestoneStruct.new('Started', '#started', -3)
......
---
title: For milestone filters, treat Any as No Filter (using null). Use -1 for No Milestone
merge_request:
author:
type: changed
# frozen_string_literal: true
class DefaultMilestoneToNil < ActiveRecord::Migration[5.1]
DOWNTIME = false
def up
execute(update_board_milestones_query)
end
def down
# no-op
end
private
# Only 105 records to update, as of 2019/07/18
def update_board_milestones_query
<<~HEREDOC
UPDATE boards
SET milestone_id = NULL
WHERE boards.milestone_id = -1
HEREDOC
end
end
...@@ -113,13 +113,13 @@ describe IssuesFinder do ...@@ -113,13 +113,13 @@ describe IssuesFinder do
let(:params) { { milestone_title: 'Any' } } let(:params) { { milestone_title: 'Any' } }
it 'returns issues with any assigned milestone' do it 'returns issues with any assigned milestone' do
expect(issues).to contain_exactly(issue1) expect(issues).to contain_exactly(issue1, issue2, issue3, issue4)
end end
it 'returns issues with any assigned milestone (deprecated)' do it 'returns issues with any assigned milestone (deprecated)' do
params[:milestone_title] = Milestone::Any.title params[:milestone_title] = Milestone::Any.title
expect(issues).to contain_exactly(issue1) expect(issues).to contain_exactly(issue1, issue2, issue3, issue4)
end end
end end
......
...@@ -389,7 +389,7 @@ describe API::Issues do ...@@ -389,7 +389,7 @@ describe API::Issues do
it 'returns an array of issues with any milestone' do it 'returns an array of issues with any milestone' do
get api("#{base_url}/issues", user), params: { milestone: any_milestone_title } get api("#{base_url}/issues", user), params: { milestone: any_milestone_title }
expect_paginated_array_response([issue.id, closed_issue.id]) expect_paginated_array_response([issue.id, confidential_issue.id, closed_issue.id])
end end
context 'without sort params' do context 'without sort params' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment