2021-02-22 17:27:13 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
RSpec.describe Gitlab::Experimentation::Experiment do
|
|
|
|
using RSpec::Parameterized::TableSyntax
|
|
|
|
|
|
|
|
let(:percentage) { 50 }
|
|
|
|
let(:params) do
|
|
|
|
{
|
|
|
|
tracking_category: 'Category1',
|
2021-03-11 19:13:27 +05:30
|
|
|
rollout_strategy: nil
|
2021-02-22 17:27:13 +05:30
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
before do
|
2021-03-08 18:12:59 +05:30
|
|
|
skip_feature_flags_yaml_validation
|
|
|
|
skip_default_enabled_yaml_check
|
2022-01-26 12:08:38 +05:30
|
|
|
allow(Feature).to receive(:log_feature_flag_states?).and_return(false)
|
2021-03-08 18:12:59 +05:30
|
|
|
feature = double('FeatureFlag', percentage_of_time_value: percentage, enabled?: true)
|
|
|
|
allow(Feature).to receive(:get).with(:experiment_key_experiment_percentage).and_return(feature)
|
2021-02-22 17:27:13 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
subject(:experiment) { described_class.new(:experiment_key, **params) }
|
|
|
|
|
|
|
|
describe '#active?' do
|
|
|
|
before do
|
2022-05-07 20:08:51 +05:30
|
|
|
allow(Gitlab).to receive(:com?).and_return(on_gitlab_com)
|
2021-02-22 17:27:13 +05:30
|
|
|
end
|
|
|
|
|
|
|
|
subject { experiment.active? }
|
|
|
|
|
|
|
|
where(:on_gitlab_com, :percentage, :is_active) do
|
|
|
|
true | 0 | false
|
|
|
|
true | 10 | true
|
|
|
|
false | 0 | false
|
|
|
|
false | 10 | false
|
|
|
|
end
|
|
|
|
|
|
|
|
with_them do
|
|
|
|
it { is_expected.to eq(is_active) }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#enabled_for_index?' do
|
|
|
|
subject { experiment.enabled_for_index?(index) }
|
|
|
|
|
|
|
|
where(:index, :percentage, :is_enabled) do
|
|
|
|
50 | 40 | false
|
|
|
|
40 | 50 | true
|
|
|
|
nil | 50 | false
|
|
|
|
end
|
|
|
|
|
|
|
|
with_them do
|
|
|
|
it { is_expected.to eq(is_enabled) }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|