diff --git a/ee/app/services/gitlab_subscriptions/add_on_purchases/base_service.rb b/ee/app/services/gitlab_subscriptions/add_on_purchases/base_service.rb index 9355857a7484c1c14bcb490e20788e61292765fe..b82250a8955916f75eb2fdf73c87e183b5ac2b29 100644 --- a/ee/app/services/gitlab_subscriptions/add_on_purchases/base_service.rb +++ b/ee/app/services/gitlab_subscriptions/add_on_purchases/base_service.rb @@ -11,6 +11,7 @@ def initialize(namespace, add_on, params = {}) @quantity = params[:quantity] @expires_on = params[:expires_on] @purchase_xid = params[:purchase_xid] + @trial = params[:trial] end def execute @@ -19,7 +20,7 @@ def execute private - attr_reader :namespace, :add_on, :quantity, :expires_on, :purchase_xid + attr_reader :namespace, :add_on, :quantity, :expires_on, :purchase_xid, :trial # Override in derived class def add_on_purchase diff --git a/ee/app/services/gitlab_subscriptions/add_on_purchases/update_service.rb b/ee/app/services/gitlab_subscriptions/add_on_purchases/update_service.rb index a1bd7e7389d00fc8602fb7dd0e104c2e674a9214..c25542e1dec29aa982eef5241dc1cd70eb28220d 100644 --- a/ee/app/services/gitlab_subscriptions/add_on_purchases/update_service.rb +++ b/ee/app/services/gitlab_subscriptions/add_on_purchases/update_service.rb @@ -34,7 +34,8 @@ def update_add_on_purchase attributes = { quantity: quantity, expires_on: expires_on, - purchase_xid: purchase_xid + purchase_xid: purchase_xid, + trial: trial }.compact add_on_purchase.update(attributes) diff --git a/ee/lib/api/gitlab_subscriptions/add_on_purchases.rb b/ee/lib/api/gitlab_subscriptions/add_on_purchases.rb index 82ae650add3f87707edadda56f2495d9996a5d78..a9e5b8c8c0b6d812e0e660d59b9e9a3a18cb5fac 100644 --- a/ee/lib/api/gitlab_subscriptions/add_on_purchases.rb +++ b/ee/lib/api/gitlab_subscriptions/add_on_purchases.rb @@ -27,6 +27,7 @@ class AddOnPurchases < ::API::Base requires :quantity, type: Integer, desc: 'The quantity of the purchase' requires :expires_on, type: Date, desc: 'The date when purchase expires on' requires :purchase_xid, type: String, desc: 'The purchase identifier (example: the subscription name)' + optional :trial, type: Boolean, desc: 'Whether the add-on is a trial' end post ":id/subscription_add_on_purchase/:add_on_name" do result = ::GitlabSubscriptions::AddOnPurchases::CreateService.new( @@ -72,6 +73,7 @@ class AddOnPurchases < ::API::Base requires :expires_on, type: Date, desc: 'The date when purchase expires on' optional :quantity, type: Integer, desc: 'The quantity of the purchase' optional :purchase_xid, type: String, desc: 'The purchase identifier (example: the subscription name)' + optional :trial, type: Boolean, desc: 'Whether the add-on is a trial' end put ":id/subscription_add_on_purchase/:add_on_name" do result = ::GitlabSubscriptions::AddOnPurchases::UpdateService.new( diff --git a/ee/lib/ee/api/entities/gitlab_subscriptions/add_on_purchase.rb b/ee/lib/ee/api/entities/gitlab_subscriptions/add_on_purchase.rb index cc753e7f45f77e619b4807c60cd2011320fde99a..295bd4993573f389a7d40764d305b36a734934e2 100644 --- a/ee/lib/ee/api/entities/gitlab_subscriptions/add_on_purchase.rb +++ b/ee/lib/ee/api/entities/gitlab_subscriptions/add_on_purchase.rb @@ -11,6 +11,7 @@ class AddOnPurchase < Grape::Entity expose :quantity, documentation: { type: 'integer', example: 10 } expose :expires_on, documentation: { type: 'date', example: '2023-05-30' } expose :purchase_xid, documentation: { type: 'string', example: 'A-S00000001' } + expose :trial, documentation: { type: 'boolean', example: 'false' } def namespace_name object.namespace.name diff --git a/ee/spec/factories/gitlab_subscriptions/add_on_purchases.rb b/ee/spec/factories/gitlab_subscriptions/add_on_purchases.rb index 96e9a8cebeb002caef0d2ac50e1d6cb0fb95af0d..06b82cb8753746555c753f56d4802a8b09544826 100644 --- a/ee/spec/factories/gitlab_subscriptions/add_on_purchases.rb +++ b/ee/spec/factories/gitlab_subscriptions/add_on_purchases.rb @@ -7,6 +7,7 @@ quantity { 1 } expires_on { 1.year.from_now.to_date } purchase_xid { SecureRandom.hex(16) } + trial { false } trait :active do expires_on { 1.year.from_now.to_date } diff --git a/ee/spec/lib/ee/api/entities/gitlab_subscriptions/add_on_purchase_spec.rb b/ee/spec/lib/ee/api/entities/gitlab_subscriptions/add_on_purchase_spec.rb index 96ff9aeb751c942b9bbd266d796feff344314943..e5242ead5fd84b8df1df3ddbc60b6ea11ceb4a83 100644 --- a/ee/spec/lib/ee/api/entities/gitlab_subscriptions/add_on_purchase_spec.rb +++ b/ee/spec/lib/ee/api/entities/gitlab_subscriptions/add_on_purchase_spec.rb @@ -14,5 +14,6 @@ expect(entity[:quantity]).to eq add_on_purchase.quantity expect(entity[:expires_on]).to eq add_on_purchase.expires_on expect(entity[:purchase_xid]).to eq add_on_purchase.purchase_xid + expect(entity[:trial]).to eq add_on_purchase.trial end end diff --git a/ee/spec/requests/api/gitlab_subscriptions/add_on_purchases_spec.rb b/ee/spec/requests/api/gitlab_subscriptions/add_on_purchases_spec.rb index 46b0189986e0684f6f04103ae84eea6a381bf17c..62fc99c08ffba92a6c0cd870aeb30099accd1bda 100644 --- a/ee/spec/requests/api/gitlab_subscriptions/add_on_purchases_spec.rb +++ b/ee/spec/requests/api/gitlab_subscriptions/add_on_purchases_spec.rb @@ -211,7 +211,8 @@ 'add_on' => add_on.name.titleize, 'quantity' => add_on_purchase.quantity, 'expires_on' => add_on_purchase.expires_on.to_s, - 'purchase_xid' => add_on_purchase.purchase_xid + 'purchase_xid' => add_on_purchase.purchase_xid, + 'trial' => add_on_purchase.trial ) end end @@ -223,7 +224,8 @@ { quantity: 10, expires_on: (Date.current + 1.year).to_s, - purchase_xid: purchase_xid + purchase_xid: purchase_xid, + trial: true } end @@ -272,6 +274,7 @@ add_on_purchase.reload end.to change { add_on_purchase.quantity }.from(5).to(10) .and change { add_on_purchase.expires_on }.from(expires_on).to(params[:expires_on].to_date) + .and change { add_on_purchase.trial }.from(false).to(true) expect(response).to have_gitlab_http_status(:success) expect(json_response).to eq( @@ -280,7 +283,8 @@ 'add_on' => add_on.name.titleize, 'quantity' => params[:quantity], 'expires_on' => params[:expires_on], - 'purchase_xid' => params[:purchase_xid] + 'purchase_xid' => params[:purchase_xid], + 'trial' => params[:trial] ) end @@ -301,7 +305,8 @@ 'add_on' => add_on.name.titleize, 'quantity' => add_on_purchase.quantity, 'expires_on' => params[:expires_on], - 'purchase_xid' => add_on_purchase.purchase_xid + 'purchase_xid' => add_on_purchase.purchase_xid, + 'trial' => add_on_purchase.trial ) end end diff --git a/ee/spec/services/gitlab_subscriptions/add_on_purchases/base_service_spec.rb b/ee/spec/services/gitlab_subscriptions/add_on_purchases/base_service_spec.rb index 15a58d600c4f3192eb0e823547ce043e77ae3503..709783674439a96141155ffbfbc7c0d03b799af3 100644 --- a/ee/spec/services/gitlab_subscriptions/add_on_purchases/base_service_spec.rb +++ b/ee/spec/services/gitlab_subscriptions/add_on_purchases/base_service_spec.rb @@ -11,7 +11,8 @@ { quantity: 10, expires_on: (Date.current + 1.year).to_s, - purchase_xid: 'S-A00000001' + purchase_xid: 'S-A00000001', + trial: false } end @@ -58,7 +59,8 @@ def add_on_purchase add_on: add_on, quantity: quantity, expires_on: expires_on, - purchase_xid: purchase_xid + purchase_xid: purchase_xid, + trial: trial ) end end diff --git a/ee/spec/services/gitlab_subscriptions/add_on_purchases/update_service_spec.rb b/ee/spec/services/gitlab_subscriptions/add_on_purchases/update_service_spec.rb index d7ba464054312cb9e6a4fdbc8a80bb1369a6a0a4..de31c20eaf513280fe02bc84030980251affafe7 100644 --- a/ee/spec/services/gitlab_subscriptions/add_on_purchases/update_service_spec.rb +++ b/ee/spec/services/gitlab_subscriptions/add_on_purchases/update_service_spec.rb @@ -12,7 +12,8 @@ { quantity: 10, expires_on: (Date.current + 1.year).to_s, - purchase_xid: purchase_xid + purchase_xid: purchase_xid, + trial: true } end @@ -28,7 +29,8 @@ add_on: add_on, quantity: 5, expires_on: expires_on, - purchase_xid: purchase_xid + purchase_xid: purchase_xid, + trial: false ) end @@ -44,6 +46,7 @@ add_on_purchase.reload end.to change { add_on_purchase.quantity }.from(5).to(10) .and change { add_on_purchase.expires_on }.from(expires_on).to(params[:expires_on].to_date) + .and change { add_on_purchase.trial }.from(false).to(true) end context 'when passing in the add-on purchase record' do