diff --git a/app/models/namespace_onboarding_action.rb b/app/models/namespace_onboarding_action.rb index 7c3ab051d938998b4664f3b8c72eb393c1abac81..a2558ae5a0b4d05116d52b540f4401f9dcbee401 100644 --- a/app/models/namespace_onboarding_action.rb +++ b/app/models/namespace_onboarding_action.rb @@ -1,10 +1,13 @@ # frozen_string_literal: true class NamespaceOnboardingAction < ApplicationRecord - belongs_to :namespace + belongs_to :namespace, optional: false + + validates :action, presence: true ACTIONS = { - subscription_created: 1 + subscription_created: 1, + git_write: 2 }.freeze enum action: ACTIONS diff --git a/app/services/post_receive_service.rb b/app/services/post_receive_service.rb index 79b613f6a8811e7c0b331090e24ab2e6d8eea2f9..bd9588844ad407688f0cf5915b248f64e87310df 100644 --- a/app/services/post_receive_service.rb +++ b/app/services/post_receive_service.rb @@ -40,6 +40,8 @@ def execute response.add_basic_message(redirect_message) response.add_basic_message(project_created_message) + + record_onboarding_progress end response @@ -90,6 +92,10 @@ def broadcast_message banner&.message end + + def record_onboarding_progress + NamespaceOnboardingAction.create_action(project.namespace, :git_write) + end end PostReceiveService.prepend_if_ee('EE::PostReceiveService') diff --git a/spec/models/namespace_onboarding_action_spec.rb b/spec/models/namespace_onboarding_action_spec.rb index 40ff965c13403a8fe61be6e96be2b6a37371e63c..70dcb989b323f4c3becce318d3b0c13cb01487c6 100644 --- a/spec/models/namespace_onboarding_action_spec.rb +++ b/spec/models/namespace_onboarding_action_spec.rb @@ -5,7 +5,13 @@ RSpec.describe NamespaceOnboardingAction do let(:namespace) { build(:namespace) } - it { is_expected.to belong_to :namespace } + describe 'associations' do + it { is_expected.to belong_to(:namespace).required } + end + + describe 'validations' do + it { is_expected.to validate_presence_of(:action) } + end describe '.completed?' do let(:action) { :subscription_created } diff --git a/spec/services/post_receive_service_spec.rb b/spec/services/post_receive_service_spec.rb index 7c4b7f51cc305a4961f00bf440b564acf59b9343..4e303bfc20a7ea7b32dc9152cd8e8c8f455f2d41 100644 --- a/spec/services/post_receive_service_spec.rb +++ b/spec/services/post_receive_service_spec.rb @@ -45,6 +45,12 @@ it 'does not return error' do expect(subject).to be_empty end + + it 'does not record a namespace onboarding progress action' do + expect(NamespaceOnboardingAction).not_to receive(:create_action) + + subject + end end context 'when repository is nil' do @@ -80,6 +86,13 @@ expect(response.reference_counter_decreased).to be(true) end + + it 'records a namespace onboarding progress action' do + expect(NamespaceOnboardingAction).to receive(:create_action) + .with(project.namespace, :git_write) + + subject + end end context 'with Project' do