From d29a2e9b333eefbeb20b08bcf2a9609d5d455f74 Mon Sep 17 00:00:00 2001
From: jejacks0n <jjackson@gitlab.com>
Date: Thu, 17 Mar 2022 09:45:39 -0600
Subject: [PATCH] Add ability to enable SAST at project creation

This introduces a new checkbox on project creation, and cleans up the
new_project_sast_enabled experiment that tested the usefulness and
engagement of that checkbox.

Changelog: added
---
 app/controllers/projects_controller.rb        |  7 ------
 .../new_project_sast_enabled_experiment.rb    | 15 ------------
 .../projects/_new_project_fields.html.haml    | 17 +++++++-------
 ...new_project_initialize_with_sast.html.haml | 16 -------------
 .../experiment/new_project_sast_enabled.yml   |  8 -------
 locale/gitlab.pot                             |  3 ---
 qa/qa/page/project/new.rb                     |  5 +---
 spec/controllers/projects_controller_spec.rb  | 22 ------------------
 ...ew_project_sast_enabled_experiment_spec.rb | 20 ----------------
 .../projects/user_creates_project_spec.rb     | 23 -------------------
 10 files changed, 9 insertions(+), 127 deletions(-)
 delete mode 100644 app/experiments/new_project_sast_enabled_experiment.rb
 delete mode 100644 app/views/projects/_new_project_initialize_with_sast.html.haml
 delete mode 100644 config/feature_flags/experiment/new_project_sast_enabled.yml
 delete mode 100644 spec/experiments/new_project_sast_enabled_experiment_spec.rb

diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 507a8b66942a8..e76cae5feeeab 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -82,13 +82,6 @@ def create
     @project = ::Projects::CreateService.new(current_user, project_params(attributes: project_params_create_attributes)).execute
 
     if @project.saved?
-      experiment(:new_project_sast_enabled, user: current_user).track(:created,
-        property: active_new_project_tab,
-        checked: Gitlab::Utils.to_boolean(project_params[:initialize_with_sast]),
-        project: @project,
-        namespace: @project.namespace
-      )
-
       redirect_to(
         project_path(@project, custom_import_params),
         notice: _("Project '%{project_name}' was successfully created.") % { project_name: @project.name }
diff --git a/app/experiments/new_project_sast_enabled_experiment.rb b/app/experiments/new_project_sast_enabled_experiment.rb
deleted file mode 100644
index 4aca4c875b212..0000000000000
--- a/app/experiments/new_project_sast_enabled_experiment.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# frozen_string_literal: true
-
-class NewProjectSastEnabledExperiment < ApplicationExperiment
-  control { }
-  variant(:candidate) { }
-  variant(:free_indicator) { }
-  variant(:unchecked_candidate) { }
-  variant(:unchecked_free_indicator) { }
-
-  def publish(*args)
-    super
-
-    publish_to_database
-  end
-end
diff --git a/app/views/projects/_new_project_fields.html.haml b/app/views/projects/_new_project_fields.html.haml
index 1fb045544aa1e..d30a7cc317254 100644
--- a/app/views/projects/_new_project_fields.html.haml
+++ b/app/views/projects/_new_project_fields.html.haml
@@ -64,15 +64,14 @@
       .form-text.text-muted
         = s_('ProjectsNew|Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository.')
 
-  - experiment(:new_project_sast_enabled, user: current_user) do |e|
-    - e.variant(:candidate) do
-      = render 'new_project_initialize_with_sast', experiment_name: e.name, track_label: track_label, checked: true, with_free_badge: false
-    - e.variant(:unchecked_candidate) do
-      = render 'new_project_initialize_with_sast', experiment_name: e.name, track_label: track_label, checked: false, with_free_badge: false
-    - e.variant(:free_indicator) do
-      = render 'new_project_initialize_with_sast', experiment_name: e.name, track_label: track_label, checked: true, with_free_badge: true
-    - e.variant(:unchecked_free_indicator) do
-      = render 'new_project_initialize_with_sast', experiment_name: e.name, track_label: track_label, checked: false, with_free_badge: true
+  .form-group
+    .form-check.gl-mb-3
+      = check_box_tag 'project[initialize_with_sast]', '1', false, class: 'form-check-input', data: { qa_selector: 'initialize_with_sast_checkbox', track_label: track_label, track_action: 'activate_form_input', track_property: 'init_with_sast' }
+      = label_tag 'project[initialize_with_sast]', class: 'form-check-label' do
+        = s_('ProjectsNew|Enable Static Application Security Testing (SAST)')
+      .form-text.text-muted
+        = s_('ProjectsNew|Analyze your source code for known security vulnerabilities.')
+        = link_to _('Learn more.'), help_page_path('user/application_security/sast/index'), target: '_blank', rel: 'noopener noreferrer', data: { track_action: 'followed' }
 
 = f.submit _('Create project'), class: "btn gl-button btn-confirm", data: { qa_selector: 'project_create_button', track_label: "#{track_label}", track_action: "click_button", track_property: "create_project", track_value: "" }
 = link_to _('Cancel'), dashboard_projects_path, class: 'btn gl-button btn-default btn-cancel', data: { track_label: "#{track_label}", track_action: "click_button", track_property: "cancel", track_value: "" }
diff --git a/app/views/projects/_new_project_initialize_with_sast.html.haml b/app/views/projects/_new_project_initialize_with_sast.html.haml
deleted file mode 100644
index ec12abbf78956..0000000000000
--- a/app/views/projects/_new_project_initialize_with_sast.html.haml
+++ /dev/null
@@ -1,16 +0,0 @@
-- experiment_name = local_assigns.fetch(:experiment_name)
-- track_label = local_assigns.fetch(:track_label)
-
-- with_free_badge = local_assigns.fetch(:with_free_badge, false)
-- checked = local_assigns.fetch(:checked, false)
-
-.form-group
-  .form-check.gl-mb-3
-    = check_box_tag 'project[initialize_with_sast]', '1', checked, class: 'form-check-input', data: { qa_selector: 'initialize_with_sast_checkbox', track_experiment: experiment_name, track_label: track_label, track_action: 'activate_form_input', track_property: 'init_with_sast' }
-    = label_tag 'project[initialize_with_sast]', class: 'form-check-label' do
-      = s_('ProjectsNew|Enable Static Application Security Testing (SAST)')
-      - if with_free_badge
-        = gl_badge_tag _('Free'), variant: :info, size: :sm
-    .form-text.text-muted
-      = s_('ProjectsNew|Analyze your source code for known security vulnerabilities.')
-      = link_to _('Learn more.'), help_page_path('user/application_security/sast/index'), target: '_blank', rel: 'noopener noreferrer', data: { track_action: 'followed', track_experiment: experiment_name }
diff --git a/config/feature_flags/experiment/new_project_sast_enabled.yml b/config/feature_flags/experiment/new_project_sast_enabled.yml
deleted file mode 100644
index f47c01d26aab9..0000000000000
--- a/config/feature_flags/experiment/new_project_sast_enabled.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-name: new_project_sast_enabled
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/70548
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/340929
-milestone: '14.4'
-type: experiment
-group: group::adoption
-default_enabled: false
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index aea718dab5c1d..f3ff201033e4e 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -16131,9 +16131,6 @@ msgstr ""
 msgid "Framework successfully deleted"
 msgstr ""
 
-msgid "Free"
-msgstr ""
-
 msgid "Free Trial of GitLab.com Ultimate"
 msgstr ""
 
diff --git a/qa/qa/page/project/new.rb b/qa/qa/page/project/new.rb
index 340e40127c92f..26fff85dd9947 100644
--- a/qa/qa/page/project/new.rb
+++ b/qa/qa/page/project/new.rb
@@ -13,6 +13,7 @@ class New < Page::Base
 
         view 'app/views/projects/_new_project_fields.html.haml' do
           element :initialize_with_readme_checkbox
+          element :initialize_with_sast_checkbox
           element :project_name
           element :project_path
           element :project_description
@@ -20,10 +21,6 @@ class New < Page::Base
           element :visibility_radios
         end
 
-        view 'app/views/projects/_new_project_initialize_with_sast.html.haml' do
-          element :initialize_with_sast_checkbox
-        end
-
         view 'app/views/projects/project_templates/_template.html.haml' do
           element :use_template_button
           element :template_option_row
diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb
index c098ea71f7a28..d0aff6e282ac4 100644
--- a/spec/controllers/projects_controller_spec.rb
+++ b/spec/controllers/projects_controller_spec.rb
@@ -473,28 +473,6 @@ def get_show
         end
       end
     end
-
-    context 'with new_project_sast_enabled', :experiment do
-      let(:params) do
-        {
-          path: 'foo',
-          description: 'bar',
-          namespace_id: user.namespace.id,
-          initialize_with_sast: '1'
-        }
-      end
-
-      it 'tracks an event on project creation' do
-        expect(experiment(:new_project_sast_enabled)).to track(:created,
-          property: 'blank',
-          checked: true,
-          project: an_instance_of(Project),
-          namespace: user.namespace
-        ).on_next_instance.with_context(user: user)
-
-        post :create, params: { project: params }
-      end
-    end
   end
 
   describe 'GET edit' do
diff --git a/spec/experiments/new_project_sast_enabled_experiment_spec.rb b/spec/experiments/new_project_sast_enabled_experiment_spec.rb
deleted file mode 100644
index 041e5dfa46975..0000000000000
--- a/spec/experiments/new_project_sast_enabled_experiment_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe NewProjectSastEnabledExperiment do
-  it "defines the expected behaviors and variants" do
-    expect(subject.variant_names).to match_array([
-      :candidate,
-      :free_indicator,
-      :unchecked_candidate,
-      :unchecked_free_indicator
-    ])
-  end
-
-  it "publishes to the database" do
-    expect(subject).to receive(:publish_to_database)
-
-    subject.publish
-  end
-end
diff --git a/spec/features/projects/user_creates_project_spec.rb b/spec/features/projects/user_creates_project_spec.rb
index 6491a7425f733..84977b6c962b5 100644
--- a/spec/features/projects/user_creates_project_spec.rb
+++ b/spec/features/projects/user_creates_project_spec.rb
@@ -33,29 +33,6 @@
   end
 
   it 'creates a new project that is not blank' do
-    stub_experiments(new_project_sast_enabled: 'candidate')
-
-    visit(new_project_path)
-
-    click_link 'Create blank project'
-    fill_in(:project_name, with: 'With initial commits')
-
-    expect(page).to have_checked_field 'Initialize repository with a README'
-    expect(page).to have_checked_field 'Enable Static Application Security Testing (SAST)'
-
-    click_button('Create project')
-
-    project = Project.last
-
-    expect(page).to have_current_path(project_path(project), ignore_query: true)
-    expect(page).to have_content('With initial commits')
-    expect(page).to have_content('Configure SAST in `.gitlab-ci.yml`, creating this file if it does not already exist')
-    expect(page).to have_content('README.md Initial commit')
-  end
-
-  it 'allows creating a new project when the new_project_sast_enabled is assigned the unchecked candidate' do
-    stub_experiments(new_project_sast_enabled: 'unchecked_candidate')
-
     visit(new_project_path)
 
     click_link 'Create blank project'
-- 
GitLab