File: gitlab_experiments_spec.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (45 lines) | stat: -rw-r--r-- 1,421 bytes parent folder | download
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: :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)
    enable_admin_mode!(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