From 946ea280a2d1e7b3407451bca06bbf0650fa72de Mon Sep 17 00:00:00 2001 From: Alex Buijs Date: Tue, 1 Dec 2020 18:18:09 +0100 Subject: [PATCH] Add git write namespace onboarding action For tracking onboarding progress --- app/models/namespace_onboarding_action.rb | 7 +++++-- app/services/post_receive_service.rb | 6 ++++++ spec/models/namespace_onboarding_action_spec.rb | 8 +++++++- spec/services/post_receive_service_spec.rb | 13 +++++++++++++ 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/models/namespace_onboarding_action.rb b/app/models/namespace_onboarding_action.rb index 7c3ab051d93899..a2558ae5a0b4d0 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 79b613f6a8811e..bd9588844ad407 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 40ff965c13403a..70dcb989b323f4 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 7c4b7f51cc305a..4e303bfc20a7ea 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 -- GitLab