From abeb782a9417a8738dbfee60b36c88539fefec47 Mon Sep 17 00:00:00 2001
From: Vijay Hawoldar <vhawoldar@gitlab.com>
Date: Tue, 28 Feb 2023 17:30:10 +0000
Subject: [PATCH] Adjust GitlabSubscription scope params

In order to effectively refresh subscriptions once per day we look for
subscriptions that have not been refreshed in over 18 hours to account
for the last enqueued job.
---
 ee/app/models/gitlab_subscription.rb       | 4 +++-
 ee/spec/models/gitlab_subscription_spec.rb | 8 ++++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/ee/app/models/gitlab_subscription.rb b/ee/app/models/gitlab_subscription.rb
index 87674076fec00..08ef366f03815 100644
--- a/ee/app/models/gitlab_subscription.rb
+++ b/ee/app/models/gitlab_subscription.rb
@@ -44,8 +44,10 @@ class GitlabSubscription < ApplicationRecord
   end
 
   scope :requiring_seat_refresh, -> (limit) do
+    # look for subscriptions that have not been refreshed in more than
+    # 18 hours (catering for 6-hourly refresh schedule)
     with_a_paid_hosted_plan
-      .where("last_seat_refresh_at < ? OR last_seat_refresh_at IS NULL", 24.hours.ago)
+      .where("last_seat_refresh_at < ? OR last_seat_refresh_at IS NULL", 18.hours.ago)
       .limit(limit)
   end
 
diff --git a/ee/spec/models/gitlab_subscription_spec.rb b/ee/spec/models/gitlab_subscription_spec.rb
index ae18d252b9d45..68f78972bd6b1 100644
--- a/ee/spec/models/gitlab_subscription_spec.rb
+++ b/ee/spec/models/gitlab_subscription_spec.rb
@@ -68,10 +68,12 @@
       let_it_be(:ultimate_subscription) { create(:gitlab_subscription, hosted_plan: ultimate_plan, last_seat_refresh_at: nil) }
       let_it_be(:ultimate_subscription_12_hours) { create(:gitlab_subscription, hosted_plan: ultimate_plan, last_seat_refresh_at: 12.hours.ago) }
       let_it_be(:ultimate_subscription_2_days) { create(:gitlab_subscription, hosted_plan: ultimate_plan, last_seat_refresh_at: 2.days.ago) }
+      let_it_be(:ultimate_subscription_24_hours) { create(:gitlab_subscription, hosted_plan: ultimate_plan, last_seat_refresh_at: 24.hours.ago) }
 
       let_it_be(:premium_subscription) { create(:gitlab_subscription, hosted_plan: premium_plan, last_seat_refresh_at: nil) }
       let_it_be(:premium_subscription_12_hours) { create(:gitlab_subscription, hosted_plan: premium_plan, last_seat_refresh_at: 12.hours.ago) }
       let_it_be(:premium_subscription_2_days) { create(:gitlab_subscription, hosted_plan: premium_plan, last_seat_refresh_at: 2.days.ago) }
+      let_it_be(:premium_subscription_24_hours) { create(:gitlab_subscription, hosted_plan: premium_plan, last_seat_refresh_at: 24.hours.ago) }
 
       let_it_be(:free_subscription) { create(:gitlab_subscription, :free, last_seat_refresh_at: 2.days.ago) }
       let_it_be(:trial_subscription) { create(:gitlab_subscription, hosted_plan: ultimate_plan, trial: true, last_seat_refresh_at: 2.days.ago) }
@@ -80,11 +82,13 @@
         matching_subscriptions = [
           ultimate_subscription,
           ultimate_subscription_2_days,
+          ultimate_subscription_24_hours,
           premium_subscription,
-          premium_subscription_2_days
+          premium_subscription_2_days,
+          premium_subscription_24_hours
         ]
 
-        expect(described_class.requiring_seat_refresh(4))
+        expect(described_class.requiring_seat_refresh(6))
           .to match_array(matching_subscriptions)
       end
 
-- 
GitLab