diff options
Diffstat (limited to 'spec/controllers/projects/blob_controller_spec.rb')
-rw-r--r-- | spec/controllers/projects/blob_controller_spec.rb | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/spec/controllers/projects/blob_controller_spec.rb b/spec/controllers/projects/blob_controller_spec.rb index a56425c2a22..16be7394174 100644 --- a/spec/controllers/projects/blob_controller_spec.rb +++ b/spec/controllers/projects/blob_controller_spec.rb @@ -7,6 +7,82 @@ RSpec.describe Projects::BlobController do let(:project) { create(:project, :public, :repository) } + describe "GET new" do + context 'with no jobs' do + let_it_be(:user) { create(:user) } + let_it_be(:file_name) { '.gitlab-ci.yml' } + + def request + get(:new, params: { namespace_id: project.namespace, project_id: project, id: 'master', file_name: file_name } ) + end + + before do + project.add_maintainer(user) + sign_in(user) + + stub_experiment(ci_syntax_templates: experiment_active) + stub_experiment_for_subject(ci_syntax_templates: in_experiment_group) + end + + context 'when the experiment is not active' do + let(:experiment_active) { false } + let(:in_experiment_group) { false } + + it 'does not record the experiment user' do + expect(Experiment).not_to receive(:add_user) + + request + end + end + + context 'when the experiment is active and the user is in the control group' do + let(:experiment_active) { true } + let(:in_experiment_group) { false } + + it 'records the experiment user in the control group' do + expect(Experiment).to receive(:add_user) + .with(:ci_syntax_templates, :control, user, namespace_id: project.namespace_id) + + request + end + end + + context 'when the experiment is active and the user is in the experimental group' do + let(:experiment_active) { true } + let(:in_experiment_group) { true } + + it 'records the experiment user in the experimental group' do + expect(Experiment).to receive(:add_user) + .with(:ci_syntax_templates, :experimental, user, namespace_id: project.namespace_id) + + request + end + + context 'when requesting a non default config file type' do + let(:file_name) { '.non_default_ci_config' } + let(:project) { create(:project, :public, :repository, ci_config_path: file_name) } + + it 'records the experiment user in the experimental group' do + expect(Experiment).to receive(:add_user) + .with(:ci_syntax_templates, :experimental, user, namespace_id: project.namespace_id) + + request + end + end + + context 'when requesting a different file type' do + let(:file_name) { '.gitignore' } + + it 'does not record the experiment user' do + expect(Experiment).not_to receive(:add_user) + + request + end + end + end + end + end + describe "GET show" do def request get(:show, params: { namespace_id: project.namespace, project_id: project, id: id }) |