spec/dashboard_spec.rb in split-4.0.1 vs spec/dashboard_spec.rb in split-4.0.2

- old
+ new

@@ -1,18 +1,19 @@ # frozen_string_literal: true -require 'spec_helper' -require 'rack/test' -require 'split/dashboard' +require "spec_helper" +require "rack/test" +require "split/dashboard" + describe Split::Dashboard do include Rack::Test::Methods class TestDashboard < Split::Dashboard include Split::Helper - get '/my_experiment' do - ab_test(params[:experiment], 'blue', 'red') + get "/my_experiment" do + ab_test(params[:experiment], "blue", "red") end end def app @app ||= TestDashboard @@ -25,26 +26,26 @@ let(:experiment) { Split::ExperimentCatalog.find_or_create("link_color", "blue", "red") } let(:experiment_with_goals) { - Split::ExperimentCatalog.find_or_create({"link_color" => ["goal_1", "goal_2"]}, "blue", "red") + Split::ExperimentCatalog.find_or_create({ "link_color" => ["goal_1", "goal_2"] }, "blue", "red") } let(:metric) { - Split::Metric.find_or_create(name: 'testmetric', experiments: [experiment, experiment_with_goals]) + Split::Metric.find_or_create(name: "testmetric", experiments: [experiment, experiment_with_goals]) } let(:red_link) { link("red") } let(:blue_link) { link("blue") } before(:each) do Split.configuration.beta_probability_simulations = 1 end it "should respond to /" do - get '/' + get "/" expect(last_response).to be_ok end context "start experiment manually" do before do @@ -52,45 +53,45 @@ end context "experiment without goals" do it "should display a Start button" do experiment - get '/' - expect(last_response.body).to include('Start') + get "/" + expect(last_response.body).to include("Start") post "/start?experiment=#{experiment.name}" - get '/' - expect(last_response.body).to include('Reset Data') - expect(last_response.body).not_to include('Metrics:') + get "/" + expect(last_response.body).to include("Reset Data") + expect(last_response.body).not_to include("Metrics:") end end context "experiment with metrics" do it "should display the names of associated metrics" do metric - get '/' - expect(last_response.body).to include('Metrics:testmetric') + get "/" + expect(last_response.body).to include("Metrics:testmetric") end end context "with goals" do it "should display a Start button" do experiment_with_goals - get '/' - expect(last_response.body).to include('Start') + get "/" + expect(last_response.body).to include("Start") post "/start?experiment=#{experiment.name}" - get '/' - expect(last_response.body).to include('Reset Data') + get "/" + expect(last_response.body).to include("Reset Data") end end end describe "force alternative" do context "initial version" do let!(:user) do - Split::User.new(@app, { experiment.name => 'red' }) + Split::User.new(@app, { experiment.name => "red" }) end before do allow(Split::User).to receive(:new).and_return(user) end @@ -113,11 +114,11 @@ end context "incremented version" do let!(:user) do experiment.increment_version - Split::User.new(@app, { "#{experiment.name}:#{experiment.version}" => 'red' }) + Split::User.new(@app, { "#{experiment.name}:#{experiment.version}" => "red" }) end before do allow(Split::User).to receive(:new).and_return(user) end @@ -132,32 +133,32 @@ end end describe "index page" do context "with winner" do - before { experiment.winner = 'red' } + before { experiment.winner = "red" } it "displays `Reopen Experiment` button" do - get '/' + get "/" - expect(last_response.body).to include('Reopen Experiment') + expect(last_response.body).to include("Reopen Experiment") end end context "without winner" do it "should not display `Reopen Experiment` button" do - get '/' + get "/" - expect(last_response.body).to_not include('Reopen Experiment') + expect(last_response.body).to_not include("Reopen Experiment") end end end describe "reopen experiment" do - before { experiment.winner = 'red' } + before { experiment.winner = "red" } - it 'redirects' do + it "redirects" do post "/reopen?experiment=#{experiment.name}" expect(last_response).to be_redirect end @@ -168,11 +169,11 @@ end it "keeps existing stats" do red_link.participant_count = 5 blue_link.participant_count = 7 - experiment.winner = 'blue' + experiment.winner = "blue" post "/reopen?experiment=#{experiment.name}" expect(red_link.participant_count).to eq(5) expect(blue_link.participant_count).to eq(7) @@ -199,14 +200,45 @@ expect(experiment.cohorting_disabled?).to eq previous_value end end + describe "initialize experiment" do + before do + Split.configuration.experiments = { + my_experiment: { + alternatives: [ "control", "alternative" ], + } + } + end + + it "initializes the experiment when the experiment is given" do + expect(Split::ExperimentCatalog.find("my_experiment")).to be nil + + post "/initialize_experiment", { experiment: "my_experiment" } + + experiment = Split::ExperimentCatalog.find("my_experiment") + expect(experiment).to be_a(Split::Experiment) + end + + it "does not attempt to intialize the experiment when empty experiment is given" do + post "/initialize_experiment", { experiment: "" } + + expect(Split::ExperimentCatalog).to_not receive(:find_or_create) + end + + it "does not attempt to intialize the experiment when no experiment is given" do + post "/initialize_experiment" + + expect(Split::ExperimentCatalog).to_not receive(:find_or_create) + end + end + it "should reset an experiment" do red_link.participant_count = 5 blue_link.participant_count = 7 - experiment.winner = 'blue' + experiment.winner = "blue" post "/reset?experiment=#{experiment.name}" expect(last_response).to be_redirect @@ -224,27 +256,27 @@ expect(Split::ExperimentCatalog.find(experiment.name)).to be_nil end it "should mark an alternative as the winner" do expect(experiment.winner).to be_nil - post "/experiment?experiment=#{experiment.name}", :alternative => 'red' + post "/experiment?experiment=#{experiment.name}", alternative: "red" expect(last_response).to be_redirect - expect(experiment.winner.name).to eq('red') + expect(experiment.winner.name).to eq("red") end it "should display the start date" do experiment.start - get '/' + get "/" expect(last_response.body).to include("<small>#{experiment.start_time.strftime('%Y-%m-%d')}</small>") end it "should handle experiments without a start date" do Split.redis.hdel(:experiment_start_times, experiment.name) - get '/' + get "/" - expect(last_response.body).to include('<small>Unknown</small>') + expect(last_response.body).to include("<small>Unknown</small>") end end