summaryrefslogtreecommitdiff
path: root/spec/features/gitlab_experiments_spec.rb
blob: c1417f6f7c554f0598d4745f1af7d3dc66b4291f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe "Gitlab::Experiment", :js, feature_category: :experimentation_activation do
  # This is part of a set of tests that ensure that tracking remains
  # consistent at the front end layer. Since we don't want to actually
  # introduce an experiment in real code, we're going to simulate it
  # here.
  let(:user) { create(:user) }

  before do
    admin = create(:admin)
    sign_in(admin)
    gitlab_enable_admin_mode_sign_in(admin)
    stub_experiments(null_hypothesis: :candidate)
  end

  describe 'with event tracking' do
    it 'publishes the experiments that have been run to the client', :experiment do
      allow_next_instance_of(Admin::AbuseReportsController) do |instance|
        allow(instance).to receive(:index).and_wrap_original do |original|
          instance.experiment(:null_hypothesis, user: instance.current_user) do |e|
            e.control { original.call }
            e.candidate { original.call }
          end
        end
      end

      visit admin_abuse_reports_path

      expect(page).to have_content('Abuse Reports')

      published_experiments = page.evaluate_script('window.gl.experiments')
      expect(published_experiments).to include({
        'null_hypothesis' => {
          'excluded' => false,
          'experiment' => 'null_hypothesis',
          'key' => anything,
          'variant' => 'candidate'
        }
      })
    end
  end
end