diff options
Diffstat (limited to 'spec/experiments')
4 files changed, 68 insertions, 75 deletions
diff --git a/spec/experiments/application_experiment_spec.rb b/spec/experiments/application_experiment_spec.rb index 2481ee5a806..424a3af20a3 100644 --- a/spec/experiments/application_experiment_spec.rb +++ b/spec/experiments/application_experiment_spec.rb @@ -114,7 +114,7 @@ RSpec.describe ApplicationExperiment, :experiment do data: { data: '_data_' } }, { - schema: 'iglu:com.gitlab/gitlab_experiment/jsonschema/0-3-0', + schema: 'iglu:com.gitlab/gitlab_experiment/jsonschema/1-0-0', data: { experiment: 'namespaced/stub', key: '86208ac54ca798e11f127e8b23ec396a', variant: 'control' } } ] diff --git a/spec/experiments/members/invite_email_experiment_spec.rb b/spec/experiments/members/invite_email_experiment_spec.rb index 539230e39b9..a9a269347e0 100644 --- a/spec/experiments/members/invite_email_experiment_spec.rb +++ b/spec/experiments/members/invite_email_experiment_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Members::InviteEmailExperiment do +RSpec.describe Members::InviteEmailExperiment, :clean_gitlab_redis_shared_state do subject(:invite_email) { experiment('members/invite_email', **context) } let(:context) { { actor: double('Member', created_by: double('User', avatar_url: '_avatar_url_')) } } @@ -23,7 +23,7 @@ RSpec.describe Members::InviteEmailExperiment do end end - describe "variant resolution", :clean_gitlab_redis_shared_state do + describe "variant resolution" do it "proves out round robin in variant selection", :aggregate_failures do instance_1 = described_class.new('members/invite_email', **context) allow(instance_1).to receive(:enabled?).and_return(true) @@ -45,4 +45,69 @@ RSpec.describe Members::InviteEmailExperiment do expect(instance_3.variant.name).to eq('avatar') end end + + describe Members::RoundRobin do + subject(:round_robin) { Members::RoundRobin.new('_key_', %i[variant1 variant2]) } + + describe "execute" do + context "when there are 2 variants" do + it "proves out round robin in selection", :aggregate_failures do + expect(round_robin.execute).to eq :variant2 + expect(round_robin.execute).to eq :variant1 + expect(round_robin.execute).to eq :variant2 + end + end + + context "when there are more than 2 variants" do + subject(:round_robin) { Members::RoundRobin.new('_key_', %i[variant1 variant2 variant3]) } + + it "proves out round robin in selection", :aggregate_failures do + expect(round_robin.execute).to eq :variant2 + expect(round_robin.execute).to eq :variant3 + expect(round_robin.execute).to eq :variant1 + + expect(round_robin.execute).to eq :variant2 + expect(round_robin.execute).to eq :variant3 + expect(round_robin.execute).to eq :variant1 + end + end + + context "when writing to cache fails" do + subject(:round_robin) { Members::RoundRobin.new('_key_', []) } + + it "raises an error and logs" do + allow(Gitlab::Redis::SharedState).to receive(:with).and_raise(Members::RoundRobin::CacheError) + expect(Gitlab::AppLogger).to receive(:warn) + + expect { round_robin.execute }.to raise_error(Members::RoundRobin::CacheError) + end + end + end + + describe "#counter_expires_in" do + it 'displays the expiration time in seconds' do + round_robin.execute + + expect(round_robin.counter_expires_in).to be_between(0, described_class::COUNTER_EXPIRE_TIME) + end + end + + describe '#value' do + it 'get the count' do + expect(round_robin.counter_value).to eq(0) + + round_robin.execute + + expect(round_robin.counter_value).to eq(1) + end + end + + describe '#reset!' do + it 'resets the count down to zero' do + 3.times { round_robin.execute } + + expect { round_robin.reset! }.to change { round_robin.counter_value }.from(3).to(0) + end + end + end end diff --git a/spec/experiments/new_project_readme_experiment_spec.rb b/spec/experiments/new_project_readme_experiment_spec.rb index 17e28cf6e7f..87446394bff 100644 --- a/spec/experiments/new_project_readme_experiment_spec.rb +++ b/spec/experiments/new_project_readme_experiment_spec.rb @@ -7,10 +7,6 @@ RSpec.describe NewProjectReadmeExperiment, :experiment do let(:actor) { User.new(id: 42, created_at: Time.current) } - before do - stub_experiments(new_project_readme: :control) - end - describe "exclusions" do let(:threshold) { described_class::MAX_ACCOUNT_AGE } diff --git a/spec/experiments/strategy/round_robin_spec.rb b/spec/experiments/strategy/round_robin_spec.rb deleted file mode 100644 index f837a4701b2..00000000000 --- a/spec/experiments/strategy/round_robin_spec.rb +++ /dev/null @@ -1,68 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Strategy::RoundRobin, :clean_gitlab_redis_shared_state do - subject(:round_robin) { described_class.new('_key_', %i[variant1 variant2]) } - - describe "execute" do - context "when there are 2 variants" do - it "proves out round robin in selection", :aggregate_failures do - expect(round_robin.execute).to eq :variant2 - expect(round_robin.execute).to eq :variant1 - expect(round_robin.execute).to eq :variant2 - end - end - - context "when there are more than 2 variants" do - subject(:round_robin) { described_class.new('_key_', %i[variant1 variant2 variant3]) } - - it "proves out round robin in selection", :aggregate_failures do - expect(round_robin.execute).to eq :variant2 - expect(round_robin.execute).to eq :variant3 - expect(round_robin.execute).to eq :variant1 - - expect(round_robin.execute).to eq :variant2 - expect(round_robin.execute).to eq :variant3 - expect(round_robin.execute).to eq :variant1 - end - end - - context "when writing to cache fails" do - subject(:round_robin) { described_class.new('_key_', []) } - - it "raises an error and logs" do - allow(Gitlab::Redis::SharedState).to receive(:with).and_raise(Strategy::RoundRobin::CacheError) - expect(Gitlab::AppLogger).to receive(:warn) - - expect { round_robin.execute }.to raise_error(Strategy::RoundRobin::CacheError) - end - end - end - - describe "#counter_expires_in" do - it 'displays the expiration time in seconds' do - round_robin.execute - - expect(round_robin.counter_expires_in).to be_between(0, described_class::COUNTER_EXPIRE_TIME) - end - end - - describe '#value' do - it 'get the count' do - expect(round_robin.counter_value).to eq(0) - - round_robin.execute - - expect(round_robin.counter_value).to eq(1) - end - end - - describe '#reset!' do - it 'resets the count down to zero' do - 3.times { round_robin.execute } - - expect { round_robin.reset! }.to change { round_robin.counter_value }.from(3).to(0) - end - end -end |