diff --git a/.rubocop_todo/rails/strong_params.yml b/.rubocop_todo/rails/strong_params.yml index 1ec833b7a5030d4d351810f28e722bc900db8ec2..b56b15f36acd7c996001913d7dbc9da1a769a23a 100644 --- a/.rubocop_todo/rails/strong_params.yml +++ b/.rubocop_todo/rails/strong_params.yml @@ -237,7 +237,6 @@ Rails/StrongParams: - 'ee/app/controllers/concerns/ee/analytics/cycle_analytics/stage_actions.rb' - 'ee/app/controllers/concerns/ee/analytics/cycle_analytics/value_stream_actions.rb' - 'ee/app/controllers/concerns/ee/issuable_collections.rb' - - 'ee/app/controllers/concerns/ee/onboarding/status.rb' - 'ee/app/controllers/concerns/epic_relations.rb' - 'ee/app/controllers/concerns/insights_actions.rb' - 'ee/app/controllers/country_states_controller.rb' diff --git a/.rubocop_todo/rspec/be_eq.yml b/.rubocop_todo/rspec/be_eq.yml index a6470c8c591c5281fe36c298fd7776b4a98a3775..51c5f437b18f2b3bf434e473b40848f01143ccda 100644 --- a/.rubocop_todo/rspec/be_eq.yml +++ b/.rubocop_todo/rspec/be_eq.yml @@ -574,7 +574,6 @@ RSpec/BeEq: - 'spec/controllers/application_controller_spec.rb' - 'spec/controllers/autocomplete_controller_spec.rb' - 'spec/controllers/concerns/internal_redirect_spec.rb' - - 'spec/controllers/concerns/onboarding/status_spec.rb' - 'spec/controllers/concerns/routable_actions_spec.rb' - 'spec/controllers/dashboard_controller_spec.rb' - 'spec/controllers/groups/application_controller_spec.rb' diff --git a/app/controllers/concerns/onboarding/redirectable.rb b/app/controllers/concerns/onboarding/redirectable.rb index 15c1847ebe473d15d35cd87b324cde336ef8cf23..cf25d33c62e1e72396190fab81f03d38a69ce3f8 100644 --- a/app/controllers/concerns/onboarding/redirectable.rb +++ b/app/controllers/concerns/onboarding/redirectable.rb @@ -7,9 +7,9 @@ module Redirectable private def after_sign_up_path - if onboarding_status.single_invite? - flash[:notice] = helpers.invite_accepted_notice(onboarding_status.last_invited_member) - polymorphic_path(onboarding_status.last_invited_member_source) + if onboarding_status_presenter.single_invite? + flash[:notice] = helpers.invite_accepted_notice(onboarding_status_presenter.last_invited_member) + polymorphic_path(onboarding_status_presenter.last_invited_member_source) else # Invites will come here if there is more than 1. path_for_signed_in_user @@ -21,9 +21,9 @@ def path_for_signed_in_user end def last_member_source_path - return dashboard_projects_path unless onboarding_status.last_invited_member_source.present? + return dashboard_projects_path unless onboarding_status_presenter.last_invited_member_source.present? - polymorphic_path(onboarding_status.last_invited_member_source) + polymorphic_path(onboarding_status_presenter.last_invited_member_source) end end end diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb index d6a39f19a3def9f3075effd2b4edaf0f0b74c647..551134c9d5caf2387b2d156083601160e1b1e1f9 100644 --- a/app/controllers/omniauth_callbacks_controller.rb +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -385,11 +385,11 @@ def perform_registration_tasks(_user, _provider) store_location_for(:user, after_sign_up_path) end - def onboarding_status - Onboarding::Status + def onboarding_status_presenter + Onboarding::StatusPresenter .new(request.env.fetch('omniauth.params', {}).deep_symbolize_keys, session['user_return_to'], @user) end - strong_memoize_attr :onboarding_status + strong_memoize_attr :onboarding_status_presenter # overridden in EE def sign_in_and_redirect_or_verify_identity(user, _, _) diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb index 5b1172332885bc955fa7b091fcb320194b445aeb..b86322da7d4dcc864122244dbb6b183d18fd0715 100644 --- a/app/controllers/registrations_controller.rb +++ b/app/controllers/registrations_controller.rb @@ -28,7 +28,7 @@ class RegistrationsController < Devise::RegistrationsController feature_category :instance_resiliency - helper_method :arkose_labs_enabled?, :preregistration_tracking_label, :onboarding_status + helper_method :arkose_labs_enabled?, :preregistration_tracking_label, :onboarding_status_presenter def new @resource = build_resource @@ -146,21 +146,21 @@ def after_inactive_sign_up_path_for(resource) private - def onboarding_status - Onboarding::Status.new(onboarding_status_params, session['user_return_to'], resource) + def onboarding_status_presenter + Onboarding::StatusPresenter.new(onboarding_status_params, session['user_return_to'], resource) end - strong_memoize_attr :onboarding_status + strong_memoize_attr :onboarding_status_presenter # rubocop:disable Gitlab/NoCodeCoverageComment -- Fully tested in EE and tested in Foss through feature specs in spec/features/invites_spec.rb # :nocov: def onboarding_status_params - # Onboarding::Status does not use any params in CE, we'll override in EE + # Onboarding::StatusPresenter does not use any params in CE, we'll override in EE {} end # rubocop:enable Gitlab/NoCodeCoverageComment def allow_flash_content?(user) - user.blocked_pending_approval? || onboarding_status.single_invite? + user.blocked_pending_approval? || onboarding_status_presenter.single_invite? end def track_successful_user_creation(user) diff --git a/app/controllers/concerns/onboarding/status.rb b/app/presenters/onboarding/status_presenter.rb similarity index 89% rename from app/controllers/concerns/onboarding/status.rb rename to app/presenters/onboarding/status_presenter.rb index 405591ec70cef6b8b09c22b5424bbd7546fa9421..b8d1eaaf042fede3d4c8f151d0a0102ca856cfdc 100644 --- a/app/controllers/concerns/onboarding/status.rb +++ b/app/presenters/onboarding/status_presenter.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true module Onboarding - class Status + class StatusPresenter def self.registration_path_params(params:) # rubocop:disable Lint/UnusedMethodArgument -- overridden in EE {} end @@ -15,7 +15,7 @@ def initialize(params, user_return_to, user) def single_invite? # If there are more than one member it will mean we have been invited to multiple projects/groups and # are not able to distinguish which one we should putting the user in after registration - members.count == 1 + members.size == 1 end def last_invited_member @@ -41,4 +41,4 @@ def members end end -Onboarding::Status.prepend_mod_with('Onboarding::Status') +Onboarding::StatusPresenter.prepend_mod diff --git a/app/views/devise/registrations/new.html.haml b/app/views/devise/registrations/new.html.haml index ba2633b22f9c0bc0742a1b2b1469dae5602271c6..87583746967f7af86a6617a18ea5ba5b3c93b7aa 100644 --- a/app/views/devise/registrations/new.html.haml +++ b/app/views/devise/registrations/new.html.haml @@ -10,7 +10,7 @@ .signup-page .gl-mb-3.gl-p-4 = render 'signup_box_form', - url: registration_path(resource_name, ::Onboarding::Status.registration_path_params(params: params)), + url: registration_path(resource_name, ::Onboarding::StatusPresenter.registration_path_params(params: params)), button_text: _('Continue') - if signup_button_based_providers_enabled? @@ -20,7 +20,7 @@ .gl-flex.gl-flex-col.gl-gap-3 - enabled_button_based_providers_for_signup.each do |provider| = render 'devise/shared/omniauth_provider_button', - href: omniauth_authorize_path(:user, provider, onboarding_status.registration_omniauth_params), + href: omniauth_authorize_path(:user, provider, onboarding_status_presenter.registration_omniauth_params), provider: provider, classes: 'js-track-omni-auth', data: { provider: provider, track_action: "#{provider}_sso", track_label: preregistration_tracking_label } diff --git a/ee/app/controllers/concerns/ee/onboarding/redirectable.rb b/ee/app/controllers/concerns/ee/onboarding/redirectable.rb index a3e0d210fa172de57af94ff730b585e33c4e082b..7ada3b42582e096d10e7e7528bc4fb62ccca8f07 100644 --- a/ee/app/controllers/concerns/ee/onboarding/redirectable.rb +++ b/ee/app/controllers/concerns/ee/onboarding/redirectable.rb @@ -14,7 +14,7 @@ def onboarding_first_step_path end def onboarding_params - ::Onboarding::Status.glm_tracking_params(params) # rubocop:disable Rails/StrongParams -- strong params are used in the method being called + ::Onboarding::StatusPresenter.glm_tracking_params(params) # rubocop:disable Rails/StrongParams -- strong params are used in the method being called end override :after_sign_up_path diff --git a/ee/app/controllers/concerns/gitlab_subscriptions/trials/duo_common.rb b/ee/app/controllers/concerns/gitlab_subscriptions/trials/duo_common.rb index bf1f9c6f6763b7d2abadac9e872c874e6050cd8e..ac18d42fcd497a31a39119572be8b8fe73bd8d2c 100644 --- a/ee/app/controllers/concerns/gitlab_subscriptions/trials/duo_common.rb +++ b/ee/app/controllers/concerns/gitlab_subscriptions/trials/duo_common.rb @@ -46,7 +46,7 @@ def general_params def lead_params params.permit( - *::Onboarding::Status::GLM_PARAMS, + *::Onboarding::StatusPresenter::GLM_PARAMS, :company_name, :company_size, :first_name, :last_name, :phone_number, :country, :state, :website_url ).to_h diff --git a/ee/app/controllers/ee/omniauth_callbacks_controller.rb b/ee/app/controllers/ee/omniauth_callbacks_controller.rb index 0cac1f67058a64c9a34730ed141655aab1cc1999..cb071dded6bea7421dc0cd483465d853e6821c82 100644 --- a/ee/app/controllers/ee/omniauth_callbacks_controller.rb +++ b/ee/app/controllers/ee/omniauth_callbacks_controller.rb @@ -50,14 +50,14 @@ def perform_registration_tasks(user, provider) user, onboarding_first_step_path ).execute - clear_memoization(:onboarding_status) # clear since registration_type is now set + clear_memoization(:onboarding_status_presenter) # clear since registration_type is now set # We need to do this here since the subscription flow relies on what was set # in the stored_location_for(:user) that was set on initial redirect from # the GitlabSubscriptions::SubscriptionsController#new and super will wipe that out. # Then the RegistrationsIdentityVerificationController#success will get # whatever is set in super instead of the subscription path we desire. - super unless onboarding_status.preserve_stored_location? + super unless onboarding_status_presenter.preserve_stored_location? else super end diff --git a/ee/app/controllers/ee/registrations_controller.rb b/ee/app/controllers/ee/registrations_controller.rb index bf4b092698cdc31d0c605d117a5625cdeb63fd98..21f26b063e5b96e71bb3bbb3fbe8287d4cca5162 100644 --- a/ee/app/controllers/ee/registrations_controller.rb +++ b/ee/app/controllers/ee/registrations_controller.rb @@ -108,21 +108,21 @@ def after_successful_create_hook(user) ::Onboarding::StatusCreateService .new(onboarding_status_params, session['user_return_to'], resource, onboarding_first_step_path).execute - clear_memoization(:onboarding_status) # clear since registration_type is now set + clear_memoization(:onboarding_status_presenter) # clear since registration_type is now set log_audit_event(user) # This must come after user has been onboarding to properly detect the label from the onboarded user. ::Gitlab::Tracking.event( self.class.name, 'successfully_submitted_form', - label: onboarding_status.tracking_label, + label: onboarding_status_presenter.tracking_label, user: user ) end override :onboarding_status_params def onboarding_status_params - base_params = params.permit(:invite_email, *::Onboarding::Status::GLM_PARAMS) + base_params = params.permit(:invite_email, *::Onboarding::StatusPresenter::GLM_PARAMS) return base_params.to_h.deep_symbolize_keys unless params[:user].present? # rubocop:disable Rails/StrongParams -- false positive, we are really checking here just need to detect difference on get vs post @@ -199,7 +199,7 @@ def arkose_labs_enabled?(user:) override :preregistration_tracking_label def preregistration_tracking_label - onboarding_status.preregistration_tracking_label + onboarding_status_presenter.preregistration_tracking_label end override :track_error diff --git a/ee/app/controllers/ee/sessions_controller.rb b/ee/app/controllers/ee/sessions_controller.rb index a9980f3db2d0c71fb288b115fde4a565439b0dac..ad8009167ab09fa88abf9dfe51dd384d8269caf5 100644 --- a/ee/app/controllers/ee/sessions_controller.rb +++ b/ee/app/controllers/ee/sessions_controller.rb @@ -78,13 +78,13 @@ def complete_identity_verification override :onboarding_status_tracking_label def onboarding_status_tracking_label - onboarding_status.preregistration_tracking_label + onboarding_status_presenter.preregistration_tracking_label end - def onboarding_status - ::Onboarding::Status + def onboarding_status_presenter + ::Onboarding::StatusPresenter .new(params.permit(:invite_email).to_h.deep_symbolize_keys, session['user_return_to'], resource) end - strong_memoize_attr :onboarding_status + strong_memoize_attr :onboarding_status_presenter end end diff --git a/ee/app/controllers/gitlab_subscriptions/trials/duo_enterprise_controller.rb b/ee/app/controllers/gitlab_subscriptions/trials/duo_enterprise_controller.rb index 0ec43f84b183134eb056b3b897de20eafd67ca00..afd80e26a593138336254d7cc43ea1e25681aa76 100644 --- a/ee/app/controllers/gitlab_subscriptions/trials/duo_enterprise_controller.rb +++ b/ee/app/controllers/gitlab_subscriptions/trials/duo_enterprise_controller.rb @@ -76,7 +76,7 @@ def track_event(action) end def trial_params - params.permit(*::Onboarding::Status::GLM_PARAMS, :namespace_id).to_h + params.permit(*::Onboarding::StatusPresenter::GLM_PARAMS, :namespace_id).to_h end def success_flash_message(add_on_purchase) diff --git a/ee/app/controllers/gitlab_subscriptions/trials/duo_pro_controller.rb b/ee/app/controllers/gitlab_subscriptions/trials/duo_pro_controller.rb index d2612c50f5b63df177d98b8ad2813915af74f302..15857b86f97f7364e2daed160a0ce57278ce4504 100644 --- a/ee/app/controllers/gitlab_subscriptions/trials/duo_pro_controller.rb +++ b/ee/app/controllers/gitlab_subscriptions/trials/duo_pro_controller.rb @@ -66,7 +66,7 @@ def track_event(action) end def trial_params - params.permit(*::Onboarding::Status::GLM_PARAMS, :namespace_id, :trial_entity).to_h + params.permit(*::Onboarding::StatusPresenter::GLM_PARAMS, :namespace_id, :trial_entity).to_h end def success_flash_message(add_on_purchase) diff --git a/ee/app/controllers/gitlab_subscriptions/trials_controller.rb b/ee/app/controllers/gitlab_subscriptions/trials_controller.rb index 7b28c21e39eb27acd2182744beecfcb0dca5b332..45ad5194d13c4c12a7b463cda294bc1a247d14e2 100644 --- a/ee/app/controllers/gitlab_subscriptions/trials_controller.rb +++ b/ee/app/controllers/gitlab_subscriptions/trials_controller.rb @@ -81,7 +81,7 @@ def authenticate_user! return if current_user redirect_to( - new_trial_registration_path(::Onboarding::Status.glm_tracking_params(params)), # rubocop:disable Rails/StrongParams -- method performs strong params + new_trial_registration_path(::Onboarding::StatusPresenter.glm_tracking_params(params)), # rubocop:disable Rails/StrongParams -- method performs strong params alert: I18n.t('devise.failure.unauthenticated') ) end @@ -92,14 +92,14 @@ def general_params def lead_params params.permit( - *::Onboarding::Status::GLM_PARAMS, + *::Onboarding::StatusPresenter::GLM_PARAMS, :company_name, :company_size, :first_name, :last_name, :phone_number, :country, :state, :website_url ).to_h end def trial_params - params.permit(*::Onboarding::Status::GLM_PARAMS, :new_group_name, :namespace_id, :trial_entity) + params.permit(*::Onboarding::StatusPresenter::GLM_PARAMS, :new_group_name, :namespace_id, :trial_entity) .with_defaults(organization_id: Current.organization_id).to_h end diff --git a/ee/app/controllers/registrations/company_controller.rb b/ee/app/controllers/registrations/company_controller.rb index cf5600a167cab38ebb3e1a01d84194293632241f..d520834253c55bca4a8dae7c684dcdd01d261498 100644 --- a/ee/app/controllers/registrations/company_controller.rb +++ b/ee/app/controllers/registrations/company_controller.rb @@ -14,26 +14,26 @@ class CompanyController < ApplicationController feature_category :onboarding - helper_method :onboarding_status + helper_method :onboarding_status_presenter def new - track_event('render', onboarding_status.tracking_label) + track_event('render', onboarding_status_presenter.tracking_label) end def create result = GitlabSubscriptions::CreateCompanyLeadService.new(user: current_user, params: permitted_params).execute if result.success? - track_event('successfully_submitted_form', onboarding_status.tracking_label) + track_event('successfully_submitted_form', onboarding_status_presenter.tracking_label) response = Onboarding::StatusStepUpdateService.new( - current_user, new_users_sign_up_group_path(::Onboarding::Status.glm_tracking_params(params)) + current_user, new_users_sign_up_group_path(::Onboarding::StatusPresenter.glm_tracking_params(params)) ).execute redirect_to response[:step_url] else result.errors.each do |error| - track_event("track_#{onboarding_status.tracking_label}_error", error.parameterize.underscore) + track_event("track_#{onboarding_status_presenter.tracking_label}_error", error.parameterize.underscore) end flash.now[:alert] = result.errors.to_sentence @@ -45,8 +45,8 @@ def create def permitted_params params.permit( - *::Onboarding::Status::GLM_PARAMS, - *::Onboarding::Status::PASSED_THROUGH_PARAMS, + *::Onboarding::StatusPresenter::GLM_PARAMS, + *::Onboarding::StatusPresenter::PASSED_THROUGH_PARAMS, :company_name, :company_size, :first_name, @@ -62,9 +62,9 @@ def track_event(action, label) ::Gitlab::Tracking.event(self.class.name, action, user: current_user, label: label) end - def onboarding_status - ::Onboarding::Status.new({}, nil, current_user) + def onboarding_status_presenter + ::Onboarding::StatusPresenter.new({}, nil, current_user) end - strong_memoize_attr :onboarding_status + strong_memoize_attr :onboarding_status_presenter end end diff --git a/ee/app/controllers/registrations/groups_controller.rb b/ee/app/controllers/registrations/groups_controller.rb index f663b449f4aab3700776097fb727f52580e1739b..4bd075a9412e5dc08abe167cbe5474e86e48e020 100644 --- a/ee/app/controllers/registrations/groups_controller.rb +++ b/ee/app/controllers/registrations/groups_controller.rb @@ -96,7 +96,7 @@ def import? end def tracking_label - onboarding_status.tracking_label + onboarding_status_presenter.tracking_label end def track_event(action, label) @@ -132,10 +132,10 @@ def experiment_project_templates_during_registration(project, name, label) ).track(name, label: label) end - def onboarding_status - ::Onboarding::Status.new({}, nil, current_user) + def onboarding_status_presenter + ::Onboarding::StatusPresenter.new({}, nil, current_user) end - strong_memoize_attr :onboarding_status + strong_memoize_attr :onboarding_status_presenter def group_params params.require(:group).permit( @@ -159,11 +159,11 @@ def project_params end def general_params - params.permit(*::Onboarding::Status::GLM_PARAMS, :import_url) + params.permit(*::Onboarding::StatusPresenter::GLM_PARAMS, :import_url) end def glm_params - ::Onboarding::Status.glm_tracking_params(params) # rubocop:disable Rails/StrongParams -- strong params are used in the method being called. + ::Onboarding::StatusPresenter.glm_tracking_params(params) # rubocop:disable Rails/StrongParams -- strong params are used in the method being called. end end end diff --git a/ee/app/controllers/registrations/welcome_controller.rb b/ee/app/controllers/registrations/welcome_controller.rb index 1ee27befffe00504baa26de24ac57a5a457400b6..5b6e84d5146a20c6b0589ab281642b92435c9c92 100644 --- a/ee/app/controllers/registrations/welcome_controller.rb +++ b/ee/app/controllers/registrations/welcome_controller.rb @@ -19,7 +19,7 @@ class WelcomeController < ApplicationController before_action :set_update_onboarding_status_params, only: :update - helper_method :onboarding_status + helper_method :onboarding_status_presenter feature_category :onboarding @@ -30,13 +30,13 @@ def update .new(current_user, user_return_to: session['user_return_to'], params: update_params).execute if result.success? - clear_memoization(:onboarding_status) # needed in case registration_type is changed on update + clear_memoization(:onboarding_status_presenter) # needed in case registration_type is changed on update track_event('successfully_submitted_form') track_joining_a_project_event redirect_to update_success_path else - track_event("track_#{onboarding_status.tracking_label}_error", label: 'failed_submitting_form') + track_event("track_#{onboarding_status_presenter.tracking_label}_error", label: 'failed_submitting_form') render :show end @@ -69,11 +69,11 @@ def update_params .permit(:role, :setup_for_company, :registration_objective) .merge(params.permit(:jobs_to_be_done_other)) .merge(user_onboarding_status_params) - .merge(onboarding_in_progress: onboarding_status.continue_full_onboarding?) + .merge(onboarding_in_progress: onboarding_status_presenter.continue_full_onboarding?) end def user_onboarding_status_params - return {} unless onboarding_status.convert_to_automatic_trial? + return {} unless onboarding_status_presenter.convert_to_automatic_trial? # Now we are in automatic trial and we'll update our status as such, initial_registration_type # will be how we know if they weren't a trial originally from here on out. @@ -81,16 +81,16 @@ def user_onboarding_status_params end def passed_through_params - update_params.slice(*::Onboarding::Status::PASSED_THROUGH_PARAMS) - .merge(::Onboarding::Status.glm_tracking_params(params)) + update_params.slice(*::Onboarding::StatusPresenter::PASSED_THROUGH_PARAMS) + .merge(::Onboarding::StatusPresenter.glm_tracking_params(params)) end def update_success_path - if onboarding_status.continue_full_onboarding? # trials/regular registration on .com + if onboarding_status_presenter.continue_full_onboarding? # trials/regular registration on .com signup_onboarding_path - elsif onboarding_status.single_invite? # invites w/o tasks due to order - flash[:notice] = helpers.invite_accepted_notice(onboarding_status.last_invited_member) - polymorphic_path(onboarding_status.last_invited_member_source) + elsif onboarding_status_presenter.single_invite? # invites w/o tasks due to order + flash[:notice] = helpers.invite_accepted_notice(onboarding_status_presenter.last_invited_member) + polymorphic_path(onboarding_status_presenter.last_invited_member_source) else # Subscription registrations goes through here as well. # Invites will come here too if there is more than 1. @@ -99,10 +99,10 @@ def update_success_path end def signup_onboarding_path - if onboarding_status.joining_a_project? + if onboarding_status_presenter.joining_a_project? Onboarding::FinishService.new(current_user).execute path_for_signed_in_user - elsif onboarding_status.redirect_to_company_form? + elsif onboarding_status_presenter.redirect_to_company_form? Onboarding::StatusStepUpdateService .new(current_user, new_users_sign_up_company_path(passed_through_params)).execute[:step_url] else @@ -111,14 +111,14 @@ def signup_onboarding_path end def track_joining_a_project_event - return unless onboarding_status.joining_a_project? + return unless onboarding_status_presenter.joining_a_project? cookies[:signup_with_joining_a_project] = { value: true, expires: 30.days } track_event('select_button', label: 'join_a_project') end - def track_event(action, label: onboarding_status.tracking_label) + def track_event(action, label: onboarding_status_presenter.tracking_label) ::Gitlab::Tracking.event( helpers.body_data_page, action, @@ -127,10 +127,10 @@ def track_event(action, label: onboarding_status.tracking_label) ) end - def onboarding_status - Onboarding::Status.new(@onboarding_status_params, session['user_return_to'], current_user) + def onboarding_status_presenter + Onboarding::StatusPresenter.new(@onboarding_status_params, session['user_return_to'], current_user) end - strong_memoize_attr :onboarding_status + strong_memoize_attr :onboarding_status_presenter def set_update_onboarding_status_params @onboarding_status_params = params.require(:user).permit(:setup_for_company) diff --git a/ee/app/controllers/users/registrations_identity_verification_controller.rb b/ee/app/controllers/users/registrations_identity_verification_controller.rb index 539e7db7f07857ffa31175b1879b67253b2506d7..a37b6702eaa92f831815a4364e29748de539ba6f 100644 --- a/ee/app/controllers/users/registrations_identity_verification_controller.rb +++ b/ee/app/controllers/users/registrations_identity_verification_controller.rb @@ -8,7 +8,7 @@ class RegistrationsIdentityVerificationController < BaseIdentityVerificationCont include ::Gitlab::InternalEventsTracking extend ::Gitlab::Utils::Override - helper_method :onboarding_status + helper_method :onboarding_status_presenter skip_before_action :authenticate_user! @@ -69,7 +69,7 @@ def success session.delete(:verification_user_id) # order matters here because set_redirect_url removes our ability to detect trial in the tracking label - @tracking_label = onboarding_status.tracking_label + @tracking_label = onboarding_status_presenter.tracking_label set_redirect_url end @@ -124,16 +124,16 @@ def send_rate_limited? ::Gitlab::ApplicationRateLimiter.throttled?(:email_verification_code_send, scope: @user) end - def onboarding_status - Onboarding::Status.new({}, session['user_return_to'], @user) + def onboarding_status_presenter + Onboarding::StatusPresenter.new({}, session['user_return_to'], @user) end - strong_memoize_attr :onboarding_status + strong_memoize_attr :onboarding_status_presenter def set_redirect_url - @redirect_url = if onboarding_status.read_from_stored_user_location? + @redirect_url = if onboarding_status_presenter.read_from_stored_user_location? # Since we need this value to stay in the stored_location_for(user) in order for # us to be properly redirected for subscription signups. - onboarding_status.user_return_to + onboarding_status_presenter.user_return_to else after_sign_in_path_for(@user) end diff --git a/ee/app/helpers/gitlab_subscriptions/trials_helper.rb b/ee/app/helpers/gitlab_subscriptions/trials_helper.rb index 7ad48ae10292d395338d4786a561b7370164f03f..80574ab63a8712fce6c226bd2e02de8f6453fd40 100644 --- a/ee/app/helpers/gitlab_subscriptions/trials_helper.rb +++ b/ee/app/helpers/gitlab_subscriptions/trials_helper.rb @@ -7,7 +7,7 @@ module TrialsHelper def create_lead_form_data submit_path = trials_path( step: GitlabSubscriptions::Trials::CreateService::LEAD, - **params.permit(:namespace_id).merge(::Onboarding::Status.glm_tracking_attributes(params)) + **params.permit(:namespace_id).merge(::Onboarding::StatusPresenter.glm_tracking_attributes(params)) ) _lead_form_data.merge( @@ -37,7 +37,7 @@ def create_duo_enterprise_lead_form_data(eligible_namespaces) end def should_ask_company_question? - TRIAL_ONBOARDING_SOURCE_URLS.exclude?(::Onboarding::Status.glm_tracking_attributes(params)[:glm_source]) + TRIAL_ONBOARDING_SOURCE_URLS.exclude?(::Onboarding::StatusPresenter.glm_tracking_attributes(params)[:glm_source]) end def trial_namespace_selector_data(namespaces, namespace_create_errors) diff --git a/ee/app/helpers/registrations/company_helper.rb b/ee/app/helpers/registrations/company_helper.rb index 4c349ff95bd9e8cac6777275282af5066e7fb331..1c8963e775ec91377370af1ecbad0a60588bf003 100644 --- a/ee/app/helpers/registrations/company_helper.rb +++ b/ee/app/helpers/registrations/company_helper.rb @@ -2,17 +2,18 @@ module Registrations module CompanyHelper - def create_company_form_data(onboarding_status) + def create_company_form_data(onboarding_status_presenter) submit_path = users_sign_up_company_path( - ::Onboarding::Status.glm_tracking_attributes(params).merge(::Onboarding::Status.passed_through_params(params)) + ::Onboarding::StatusPresenter + .glm_tracking_attributes(params).merge(::Onboarding::StatusPresenter.passed_through_params(params)) ) { submit_path: submit_path, first_name: current_user.first_name, last_name: current_user.last_name, - form_type: onboarding_status.company_form_type, - track_action_for_errors: onboarding_status.tracking_label + form_type: onboarding_status_presenter.company_form_type, + track_action_for_errors: onboarding_status_presenter.tracking_label } end end diff --git a/ee/app/controllers/concerns/ee/onboarding/status.rb b/ee/app/presenters/ee/onboarding/status_presenter.rb similarity index 99% rename from ee/app/controllers/concerns/ee/onboarding/status.rb rename to ee/app/presenters/ee/onboarding/status_presenter.rb index 849e390eb8bd6200096c2d153c2d61c213115a50..3238525b7a4f68ee7d25fc85524809f0ef299d64 100644 --- a/ee/app/controllers/concerns/ee/onboarding/status.rb +++ b/ee/app/presenters/ee/onboarding/status_presenter.rb @@ -2,7 +2,7 @@ module EE module Onboarding - module Status + module StatusPresenter extend ::Gitlab::Utils::Override GLM_PARAMS = [:glm_source, :glm_content].freeze diff --git a/ee/app/services/gitlab_subscriptions/trials/base_create_service.rb b/ee/app/services/gitlab_subscriptions/trials/base_create_service.rb index 546888751540ef6ae4637e967cb5e4ea1e470265..7fdc8991be3f0c4cc20fba18db594e14d5bb4bbc 100644 --- a/ee/app/services/gitlab_subscriptions/trials/base_create_service.rb +++ b/ee/app/services/gitlab_subscriptions/trials/base_create_service.rb @@ -53,7 +53,7 @@ def after_lead_success_hook # trigger new creation for next step... trial_selection_params = { step: TRIAL - }.merge(lead_params.slice(*::Onboarding::Status::GLM_PARAMS)) + }.merge(lead_params.slice(*::Onboarding::StatusPresenter::GLM_PARAMS)) .merge(trial_params.slice(:namespace_id)) ServiceResponse.error( diff --git a/ee/app/views/devise/registrations/_opt_in_to_email.html.haml b/ee/app/views/devise/registrations/_opt_in_to_email.html.haml index 569e135232a3b9e3aaa85418e4e183c786f6276f..54d195726449d4bc76ca00c88e851a640a34d8f6 100644 --- a/ee/app/views/devise/registrations/_opt_in_to_email.html.haml +++ b/ee/app/views/devise/registrations/_opt_in_to_email.html.haml @@ -3,4 +3,4 @@ = f.gitlab_ui_checkbox_component :onboarding_status_email_opt_in, _('I agree that GitLab can contact me by email or telephone about its product, services, or events.'), content_wrapper_options: { class: 'gl-text-gray-500' }, - checkbox_options: { checked: onboarding_status.email_opt_in? } + checkbox_options: { checked: onboarding_status_presenter.email_opt_in? } diff --git a/ee/app/views/gitlab_subscriptions/trials/_select_namespace_form.html.haml b/ee/app/views/gitlab_subscriptions/trials/_select_namespace_form.html.haml index 87e6590565a25f019a61c3a26433b897f101643b..a09c4ef6f0ce36b00c27ceca0b7f9937f8af273d 100644 --- a/ee/app/views/gitlab_subscriptions/trials/_select_namespace_form.html.haml +++ b/ee/app/views/gitlab_subscriptions/trials/_select_namespace_form.html.haml @@ -18,7 +18,7 @@ = yield :before_form - = form_tag trials_path(**::Onboarding::Status.glm_tracking_attributes(params), step: GitlabSubscriptions::Trials::CreateService::TRIAL), method: :post, class: 'js-saas-trial-group', data: { testid: 'trial-form' } do + = form_tag trials_path(**::Onboarding::StatusPresenter.glm_tracking_attributes(params), step: GitlabSubscriptions::Trials::CreateService::TRIAL), method: :post, class: 'js-saas-trial-group', data: { testid: 'trial-form' } do .js-namespace-selector{ data: trial_namespace_selector_data(@eligible_namespaces, local_assigns[:namespace_create_errors]) } - if should_ask_company_question? .form-group diff --git a/ee/app/views/registrations/company/new.html.haml b/ee/app/views/registrations/company/new.html.haml index afd986e9a18c2922ebcd9f913aafbf763e3ac285..b410ab908fd415e020f5b35692471d6141d6d747 100644 --- a/ee/app/views/registrations/company/new.html.haml +++ b/ee/app/views/registrations/company/new.html.haml @@ -10,9 +10,9 @@ .col-md-6.m-sm-6.gl-px-3 %h2.gl-pb-5.gl-my-0 = _("About your company") - #js-registrations-company-form{ data: create_company_form_data(onboarding_status) } + #js-registrations-company-form{ data: create_company_form_data(onboarding_status_presenter) } - - if onboarding_status.show_company_form_illustration? + - if onboarding_status_presenter.show_company_form_illustration? .col-md-4.company-illustration{ data: { testid: 'trial-registration-column' } } = image_tag 'illustrations/saas-trial-illustration.svg', alt: '', class: 'gl-hidden md:gl-inline gl-w-full' - else diff --git a/ee/app/views/registrations/groups/new.html.haml b/ee/app/views/registrations/groups/new.html.haml index 391e45e5442419559abf16c020ba83d279c82f02..bb4fa425cce82fea5face1fd3295ac7185caa6ff 100644 --- a/ee/app/views/registrations/groups/new.html.haml +++ b/ee/app/views/registrations/groups/new.html.haml @@ -28,7 +28,7 @@ .tab-content.gitlab-tab-content.gl-bg-white.js-group-project-tab-contents #blank-project-pane.tab-pane.js-toggle-container.active{ role: 'tabpanel' } - = gitlab_ui_form_for :project_group, url: users_sign_up_groups_path(::Onboarding::Status.glm_tracking_params(params)), html: { class: 'gl-show-field-errors gl-w-full gl-p-4 js-groups-projects-form' } do |f| + = gitlab_ui_form_for :project_group, url: users_sign_up_groups_path(::Onboarding::StatusPresenter.glm_tracking_params(params)), html: { class: 'gl-show-field-errors gl-w-full gl-p-4 js-groups-projects-form' } do |f| = form_errors(@group, type: "Group") = form_errors(@project, type: "Project") = render 'layouts/flash' @@ -49,7 +49,7 @@ #import-project-pane.tab-pane.import-project-pane.js-toggle-container{ role: 'tabpanel' } - if import_sources_enabled? - = form_tag users_sign_up_groups_path(::Onboarding::Status.glm_tracking_params(params)), class: 'gl-show-field-errors gl-w-full gl-p-4 js-import-project-form' do + = form_tag users_sign_up_groups_path(::Onboarding::StatusPresenter.glm_tracking_params(params)), class: 'gl-show-field-errors gl-w-full gl-p-4 js-import-project-form' do = form_errors(@group, type: "Group") = render 'layouts/flash' diff --git a/ee/app/views/registrations/welcome/_joining_project.html.haml b/ee/app/views/registrations/welcome/_joining_project.html.haml index 1d6a2f27467579c26c90d6eb4e683d4aa025bccd..0e0260d3b77eea5d09086829c992e33d28f862f2 100644 --- a/ee/app/views/registrations/welcome/_joining_project.html.haml +++ b/ee/app/views/registrations/welcome/_joining_project.html.haml @@ -1,4 +1,4 @@ -- return unless onboarding_status.show_joining_project? +- return unless onboarding_status_presenter.show_joining_project? .row .form-group.col-sm-12 @@ -8,7 +8,7 @@ label: _('Create a new project'), help_text: _('Create a new project on GitLab. Store your files, plan your work, and collaborate on code.'), value: false, - radio_options: { required: true, class: 'js-track-error', data: { track_action_for_errors: onboarding_status.tracking_label } }, + radio_options: { required: true, class: 'js-track-error', data: { track_action_for_errors: onboarding_status_presenter.tracking_label } }, label_options: { data: { testid: 'create-a-new-project-radio' } }) %div = render Pajamas::RadioTagComponent.new(name: :joining_project, diff --git a/ee/app/views/registrations/welcome/_setup_for_company.html.haml b/ee/app/views/registrations/welcome/_setup_for_company.html.haml index e94cd4f8b09fb2f7d65235501b44cc968e88d47a..e43bbb15fe750be924d8492d2b43ae1e028f476d 100644 --- a/ee/app/views/registrations/welcome/_setup_for_company.html.haml +++ b/ee/app/views/registrations/welcome/_setup_for_company.html.haml @@ -1,14 +1,14 @@ -- if onboarding_status.hide_setup_for_company_field? +- if onboarding_status_presenter.hide_setup_for_company_field? = f.hidden_field :setup_for_company, value: true - else .row .form-group.col-sm-12 - = f.label :setup_for_company, onboarding_status.setup_for_company_label_text, class: 'label-bold' + = f.label :setup_for_company, onboarding_status_presenter.setup_for_company_label_text, class: 'label-bold' .gl-flex.gl-flex-col .gl-grow{ data: { testid: 'setup-for-just-me-content' } } = f.gitlab_ui_radio_component :setup_for_company, false, _('Just me'), radio_options: { required: true, data: { testid: 'setup-for-just-me-radio' } } .gl-grow = f.gitlab_ui_radio_component :setup_for_company, true, _('My company or team'), - help_text: onboarding_status.setup_for_company_help_text, radio_options: { required: true, + help_text: onboarding_status_presenter.setup_for_company_help_text, radio_options: { required: true, class: "js-track-error", data: { track_action_for_errors: 'welcome_form' } } diff --git a/ee/app/views/registrations/welcome/show.html.haml b/ee/app/views/registrations/welcome/show.html.haml index 6e17e5aee07d9dc0dc7b2090c76e927ca0bd2f53..04aabbb362f1fcd296806e83092f077be50e5694 100644 --- a/ee/app/views/registrations/welcome/show.html.haml +++ b/ee/app/views/registrations/welcome/show.html.haml @@ -7,14 +7,14 @@ = render "layouts/bizible" = render "layouts/google_tag_manager_body" -.row.gl-grow{ data: { track_action: 'render', track_label: onboarding_status.tracking_label } } +.row.gl-grow{ data: { track_action: 'render', track_label: onboarding_status_presenter.tracking_label } } .gl-flex.gl-flex-col.gl-items-center.gl-w-full.gl-px-5.gl-pb-5 .edit-profile.gl-flex.flex-column.gl-items-center %h2.gl-text-center= html_escape(_('Welcome to GitLab,%{br_tag}%{name}!')) % { name: html_escape(current_user.first_name), br_tag: '<br/>'.html_safe } %p.gl-text-center = _('To personalize your GitLab experience, we\'d like to know a bit more about you. We won\'t share this information with anyone.') = gitlab_ui_form_for(current_user, - url: users_sign_up_welcome_path(::Onboarding::Status.glm_tracking_params(params)), + url: users_sign_up_welcome_path(::Onboarding::StatusPresenter.glm_tracking_params(params)), html: { class: '!gl-w-full gl-p-5 js-users-signup-welcome', 'aria-live' => 'assertive', data: { testid: 'welcome-form' } }) do |f| @@ -25,7 +25,7 @@ .row .form-group.col-sm-12 = f.label :role, _('Role'), class: 'label-bold' - = f.select :role, ::User.roles.keys.map { |role| [role.titleize, role] }, { include_blank: _('Select a role') }, class: 'form-control js-user-role-dropdown js-track-error', required: true, data: { testid: 'role-dropdown', track_action_for_errors: onboarding_status.tracking_label } + = f.select :role, ::User.roles.keys.map { |role| [role.titleize, role] }, { include_blank: _('Select a role') }, class: 'form-control js-user-role-dropdown js-track-error', required: true, data: { testid: 'role-dropdown', track_action_for_errors: onboarding_status_presenter.tracking_label } = render 'jobs_to_be_done', f: f = render 'joining_project' = render 'setup_for_company', f: f @@ -34,4 +34,4 @@ = render Pajamas::ButtonComponent.new(variant: :confirm, block: true, button_options: { type: :submit, data: { testid: 'get-started-button' }, class: 'js-trial-welcome-btn'}) do - = onboarding_status.welcome_submit_button_text + = onboarding_status_presenter.welcome_submit_button_text diff --git a/ee/app/views/trial_registrations/new.html.haml b/ee/app/views/trial_registrations/new.html.haml index 8e7e3a2d09bb68c1e844ad0d3d07556284572263..7efd24811677e69472bc2e8eae39555486b2987a 100644 --- a/ee/app/views/trial_registrations/new.html.haml +++ b/ee/app/views/trial_registrations/new.html.haml @@ -25,7 +25,7 @@ .signup-box.gl-max-w-75 .gl-mb-3.gl-p-6.gl-border-gray-100.gl-border-1.gl-border-solid.gl-rounded-base.gl-bg-white = render 'signup_box_form', - url: trial_registrations_path(::Onboarding::Status.glm_tracking_params(params)), + url: trial_registrations_path(::Onboarding::StatusPresenter.glm_tracking_params(params)), button_text: _('Continue'), button_class: 'black-btn' @@ -38,7 +38,7 @@ .gl-flex.gl-gap-3.gl-justify-center - popular_enabled_button_based_providers.each do |provider| = render 'devise/shared/omniauth_provider_button', - href: omniauth_authorize_path(:user, provider, onboarding_status.trial_registration_omniauth_params), + href: omniauth_authorize_path(:user, provider, onboarding_status_presenter.trial_registration_omniauth_params), provider: provider, classes: 'js-track-omni-auth', data: { provider: provider, track_action: "#{provider}_sso", track_label: preregistration_tracking_label } diff --git a/ee/app/views/users/registrations_identity_verification/show.html.haml b/ee/app/views/users/registrations_identity_verification/show.html.haml index 5a94a4aef6546f0145da9fecdeb0860d506a468c..29457522583cc0edfcd14c36dbd229f0f019affd 100644 --- a/ee/app/views/users/registrations_identity_verification/show.html.haml +++ b/ee/app/views/users/registrations_identity_verification/show.html.haml @@ -2,5 +2,5 @@ = render_if_exists 'devise/shared/delete_unconfirmed_users_flash' -%div{ data: { track_action: 'render', track_label: onboarding_status.tracking_label } } +%div{ data: { track_action: 'render', track_label: onboarding_status_presenter.tracking_label } } #js-identity-verification{ data: signup_identity_verification_data(@user) } diff --git a/ee/spec/controllers/registrations/company_controller_spec.rb b/ee/spec/controllers/registrations/company_controller_spec.rb index 51cb60cd0ef30c413f190aa606fd92fcc2817f09..9d72efb8e5bb10db41b97e0516cf8ea896bd495d 100644 --- a/ee/spec/controllers/registrations/company_controller_spec.rb +++ b/ee/spec/controllers/registrations/company_controller_spec.rb @@ -137,7 +137,7 @@ post :create, params: params end - context 'when driving from the onboarding_status.initial_registration_type' do + context 'when driving from the onboarding_status_presenter.initial_registration_type' do before do user.update!(onboarding_status_initial_registration_type: 'trial') end diff --git a/ee/spec/helpers/registrations/company_helper_spec.rb b/ee/spec/helpers/registrations/company_helper_spec.rb index dfb2c5d54bbea62d37509044f8a328e8a666595b..131a686c12ac2d81826f737e5a3bd8ae98a6bdd4 100644 --- a/ee/spec/helpers/registrations/company_helper_spec.rb +++ b/ee/spec/helpers/registrations/company_helper_spec.rb @@ -30,7 +30,7 @@ track_action_for_errors: 'trial_registration' } - expect(helper.create_company_form_data(::Onboarding::Status.new({}, {}, user))).to match(attributes) + expect(helper.create_company_form_data(::Onboarding::StatusPresenter.new({}, {}, user))).to match(attributes) end end end diff --git a/ee/spec/controllers/concerns/ee/onboarding/status_spec.rb b/ee/spec/presenters/ee/onboarding/status_presenter_spec.rb similarity index 98% rename from ee/spec/controllers/concerns/ee/onboarding/status_spec.rb rename to ee/spec/presenters/ee/onboarding/status_presenter_spec.rb index dda3e5c2b276030f8f07cf86322a7fdfdd778809..1fc50f5f0acfe15e67091edf3e6c409d67b78edb 100644 --- a/ee/spec/controllers/concerns/ee/onboarding/status_spec.rb +++ b/ee/spec/presenters/ee/onboarding/status_presenter_spec.rb @@ -2,12 +2,9 @@ require 'spec_helper' -RSpec.describe Onboarding::Status, feature_category: :onboarding do +RSpec.describe Onboarding::StatusPresenter, feature_category: :onboarding do using RSpec::Parameterized::TableSyntax - let_it_be(:member) { create(:group_member) } - let_it_be(:user) { member.user } - context 'for delegations' do subject { described_class.new({}, nil, nil) } diff --git a/ee/spec/support/shared_examples/views/unconfirmed_user_deletion_shared_examples.rb b/ee/spec/support/shared_examples/views/unconfirmed_user_deletion_shared_examples.rb index 701f196e45a9ea139cf92fda19259ab227dac81a..ff12dc0724a28b2da53b9e71f49d1e4627ef970f 100644 --- a/ee/spec/support/shared_examples/views/unconfirmed_user_deletion_shared_examples.rb +++ b/ee/spec/support/shared_examples/views/unconfirmed_user_deletion_shared_examples.rb @@ -5,14 +5,16 @@ describe 'delete unconfirmed users is set' do let_it_be(:delete_after_days) { 7 } - let(:onboarding_status) { instance_double(::Onboarding::Status, tracking_label: 'free_registration') } + let(:onboarding_status_presenter) do + instance_double(::Onboarding::StatusPresenter, tracking_label: 'free_registration') + end before do stub_licensed_features(delete_unconfirmed_users: true) stub_application_setting(delete_unconfirmed_users: true) stub_application_setting(delete_unconfirmed_users_after_days: delete_after_days) stub_application_setting_enum('email_confirmation_setting', 'hard') - allow(view).to receive(:onboarding_status).and_return(onboarding_status) + allow(view).to receive(:onboarding_status_presenter).and_return(onboarding_status_presenter) end it "shows the unconfirmed users text" do diff --git a/ee/spec/views/devise/registrations/new.html.haml_spec.rb b/ee/spec/views/devise/registrations/new.html.haml_spec.rb index a4c2a5f8814e296e824ef3e108052df4c7b40ca4..9c4ad4757616fc9d802ff89f80c8fba6947445f0 100644 --- a/ee/spec/views/devise/registrations/new.html.haml_spec.rb +++ b/ee/spec/views/devise/registrations/new.html.haml_spec.rb @@ -8,12 +8,14 @@ let(:arkose_labs_domain) { "domain" } let(:resource) { Users::RegistrationsBuildService.new(nil, {}).execute } let(:params) { controller.params } - let(:onboarding_status) { ::Onboarding::Status.new(params.to_unsafe_h.deep_symbolize_keys, nil, resource) } + let(:onboarding_status_presenter) do + ::Onboarding::StatusPresenter.new(params.to_unsafe_h.deep_symbolize_keys, nil, resource) + end subject { render && rendered } before do - allow(view).to receive(:onboarding_status).and_return(onboarding_status) + allow(view).to receive(:onboarding_status_presenter).and_return(onboarding_status_presenter) allow(view).to receive(:resource).and_return(resource) allow(view).to receive(:resource_name).and_return(:user) diff --git a/ee/spec/views/registrations/company/new.html.haml_spec.rb b/ee/spec/views/registrations/company/new.html.haml_spec.rb index 031853f51ab659d4443979a5483e3d3d51e871ce..9fcd0f23979c8205aeb77fc981925a793df7312e 100644 --- a/ee/spec/views/registrations/company/new.html.haml_spec.rb +++ b/ee/spec/views/registrations/company/new.html.haml_spec.rb @@ -5,9 +5,9 @@ RSpec.describe 'registrations/company/new', feature_category: :onboarding do let(:user) { build_stubbed(:user) } let(:show_company_form_illustration?) { false } - let(:onboarding_status) do + let(:onboarding_status_presenter) do instance_double( - ::Onboarding::Status, + ::Onboarding::StatusPresenter, company_form_type: 'registration', show_company_form_illustration?: show_company_form_illustration?, tracking_label: 'free_registration' @@ -15,7 +15,7 @@ end before do - allow(view).to receive_messages(current_user: user, onboarding_status: onboarding_status) + allow(view).to receive_messages(current_user: user, onboarding_status_presenter: onboarding_status_presenter) end describe 'Google Tag Manager' do diff --git a/ee/spec/views/registrations/welcome/show.html.haml_spec.rb b/ee/spec/views/registrations/welcome/show.html.haml_spec.rb index 408bb157cf090a208c72afa0236196570fdd887f..9b04abc1418181fe5a46b7d057d360e2ff1d440c 100644 --- a/ee/spec/views/registrations/welcome/show.html.haml_spec.rb +++ b/ee/spec/views/registrations/welcome/show.html.haml_spec.rb @@ -5,9 +5,9 @@ RSpec.describe 'registrations/welcome/show', feature_category: :onboarding do let(:hide_setup_for_company_field?) { false } let(:show_joining_project?) { true } - let(:onboarding_status) do + let(:onboarding_status_presenter) do instance_double( - ::Onboarding::Status, + ::Onboarding::StatusPresenter, hide_setup_for_company_field?: hide_setup_for_company_field?, setup_for_company_label_text: '_text_', setup_for_company_help_text: '_help_text_', @@ -18,7 +18,7 @@ end before do - allow(view).to receive(:onboarding_status).and_return(onboarding_status) + allow(view).to receive(:onboarding_status_presenter).and_return(onboarding_status_presenter) allow(view).to receive(:current_user).and_return(build_stubbed(:user)) controller.params[:glm_content] = '_glm_content_' controller.params[:glm_source] = '_glm_source_' diff --git a/ee/spec/views/trial_registrations/new.html.haml_spec.rb b/ee/spec/views/trial_registrations/new.html.haml_spec.rb index 84bb9242596ff7b47fc98aff048dcc8d355c27f8..9b76cf5168ee59de02b1905ba652b42ddaba2baf 100644 --- a/ee/spec/views/trial_registrations/new.html.haml_spec.rb +++ b/ee/spec/views/trial_registrations/new.html.haml_spec.rb @@ -5,10 +5,12 @@ RSpec.describe 'trial_registrations/new', feature_category: :acquisition do let(:resource) { Users::AuthorizedBuildService.new(nil, {}).execute } let(:params) { controller.params } - let(:onboarding_status) { ::Onboarding::Status.new(params.to_unsafe_h.deep_symbolize_keys, nil, resource) } + let(:onboarding_status_presenter) do + ::Onboarding::StatusPresenter.new(params.to_unsafe_h.deep_symbolize_keys, nil, resource) + end before do - allow(view).to receive(:onboarding_status).and_return(onboarding_status) + allow(view).to receive(:onboarding_status_presenter).and_return(onboarding_status_presenter) allow(view).to receive(:arkose_labs_enabled?).and_return(false) allow(view).to receive(:resource).and_return(resource) allow(view).to receive(:resource_name).and_return(:user) diff --git a/spec/controllers/concerns/onboarding/status_spec.rb b/spec/presenters/onboarding/status_presenter_spec.rb similarity index 68% rename from spec/controllers/concerns/onboarding/status_spec.rb rename to spec/presenters/onboarding/status_presenter_spec.rb index 7296080e60109f06070cf127326214caffff7b59..b8b2e55fee128cfc45773afab53248a8f455d1f8 100644 --- a/spec/controllers/concerns/onboarding/status_spec.rb +++ b/spec/presenters/onboarding/status_presenter_spec.rb @@ -2,10 +2,10 @@ require 'spec_helper' -RSpec.describe Onboarding::Status, feature_category: :onboarding do - let_it_be(:member) { create(:group_member) } - let_it_be(:user) { member.user } - let_it_be(:source) { member.group } +RSpec.describe Onboarding::StatusPresenter, feature_category: :onboarding do + let(:member) { build_stubbed(:group_member) } + let(:members) { [member] } + let(:user) { build_stubbed(:user, members: members) } describe '.registration_path_params' do let(:params) { { some: 'thing' } } @@ -28,22 +28,20 @@ context 'when there is only one member for the user' do context 'when the member source exists' do - it { is_expected.to eq(true) } + it { is_expected.to be(true) } end end context 'when there is more than one member for the user' do - before do - create(:group_member, user: user) - end + let(:members) { [member, build_stubbed(:group_member)] } - it { is_expected.to eq(false) } + it { is_expected.to be(false) } end context 'when there are no members for the user' do let(:user) { build_stubbed(:user) } - it { is_expected.to eq(false) } + it { is_expected.to be(false) } end end @@ -53,13 +51,14 @@ it { is_expected.to eq(member) } context 'when another member exists and is most recent' do - let!(:last_member) { create(:group_member, user: user) } + let(:last_member) { build_stubbed(:group_member) } + let(:members) { [member, last_member] } it { is_expected.to eq(last_member) } end context 'when there are no members' do - let_it_be(:user) { build_stubbed(:user) } + let(:members) { [] } it { is_expected.to be_nil } end @@ -69,19 +68,20 @@ subject { described_class.new(nil, nil, user).last_invited_member_source } context 'when a member exists' do - it { is_expected.to eq(source) } + it { is_expected.to eq(member.group) } end context 'when no members exist' do - let_it_be(:user) { build_stubbed(:user) } + let(:members) { [] } it { is_expected.to be_nil } end context 'when another member exists and is most recent' do - let!(:last_member_source) { create(:group_member, user: user).group } + let(:last_member) { build_stubbed(:group_member) } + let(:members) { [member, last_member] } - it { is_expected.to eq(last_member_source) } + it { is_expected.to eq(last_member.group) } end end end diff --git a/spec/views/devise/registrations/new.html.haml_spec.rb b/spec/views/devise/registrations/new.html.haml_spec.rb index 40bae17ccb7ae9c9154adcfc29c9f2920711d708..8cfe70debf12aea41042e8b0b0cd3a2e86ea52dd 100644 --- a/spec/views/devise/registrations/new.html.haml_spec.rb +++ b/spec/views/devise/registrations/new.html.haml_spec.rb @@ -5,12 +5,12 @@ RSpec.describe 'devise/registrations/new', feature_category: :system_access do let(:resource) { Users::RegistrationsBuildService.new(nil, {}).execute } let(:tracking_label) { '_some_registration_' } - let(:onboarding_status) { instance_double(::Onboarding::Status, registration_omniauth_params: {}) } + let(:onboarding_status_presenter) { instance_double(::Onboarding::StatusPresenter, registration_omniauth_params: {}) } subject { render && rendered } before do - allow(view).to receive(:onboarding_status).and_return(onboarding_status) + allow(view).to receive(:onboarding_status_presenter).and_return(onboarding_status_presenter) allow(view).to receive(:resource).and_return(resource) allow(view).to receive(:resource_name).and_return(:user) allow(view).to receive(:preregistration_tracking_label).and_return(tracking_label) diff --git a/tests.yml b/tests.yml index c44701f90cb0e58e9e456999a09ac42556faad8d..bc5e3b1ca38980d12634acbb9f41e77d4d950611 100644 --- a/tests.yml +++ b/tests.yml @@ -297,8 +297,8 @@ mapping: # Registration/Onboarding - source: - 'ee/app/(controllers|services)/registrations/.*' - - 'ee/app/controllers/concerns/ee/onboarding/status\.rb' - - 'app/controllers/concerns/onboarding/status\.rb' + - 'ee/app/presenters/ee/onboarding/status_presenter\.rb' + - 'app/presenters/onboarding/status_presenter\.rb' test: - 'ee/spec/features/registrations/saas/*_spec.rb' - ee/spec/features/registrations/email_opt_in_registration_spec.rb