From aeda40eb8c38e0be2ee90413dfa6e47bb28d648f Mon Sep 17 00:00:00 2001
From: Maxime Orefice <morefice@gitlab.com>
Date: Thu, 17 Oct 2024 15:29:02 +0200
Subject: [PATCH] Add upcoming_milestones helper

This commit introduces a new method to get upcoming milestones from
a given date. This will be used to schedule migration in n+3 milestone.
---
 keeps/helpers/milestones.rb           |  4 ++++
 spec/keeps/helpers/milestones_spec.rb | 13 +++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/keeps/helpers/milestones.rb b/keeps/helpers/milestones.rb
index dee9f8e13cf6c..c4c0691855692 100644
--- a/keeps/helpers/milestones.rb
+++ b/keeps/helpers/milestones.rb
@@ -15,6 +15,10 @@ def past_milestone(milestones_ago:)
         milestones[current_milestone_index + milestones_ago].version
       end
 
+      def upcoming_milestones
+        milestones.select { |milestone| Date.parse(milestone.date).future? }.reverse
+      end
+
       private
 
       def current_milestone
diff --git a/spec/keeps/helpers/milestones_spec.rb b/spec/keeps/helpers/milestones_spec.rb
index 991f15abd457f..dc8b793d89b42 100644
--- a/spec/keeps/helpers/milestones_spec.rb
+++ b/spec/keeps/helpers/milestones_spec.rb
@@ -124,4 +124,17 @@
       it { is_expected.to eq(true) }
     end
   end
+
+  describe '#upcoming_milestone', time_travel_to: '2024-04-17' do
+    subject(:upcoming_milestones) { described_class.new.upcoming_milestones }
+
+    it 'returns milestones in the future' do
+      expected_milestones = [
+        described_class::Milestone.new(version: '16.11', date: '2024-04-18'),
+        described_class::Milestone.new(version: '17.0', date: '2024-05-16')
+      ]
+
+      expect(upcoming_milestones).to contain_exactly(*expected_milestones)
+    end
+  end
 end
-- 
GitLab