spec/encapsulated_helper_spec.rb in split-4.0.3 vs spec/encapsulated_helper_spec.rb in split-4.0.4

- old
+ new

@@ -1,36 +1,27 @@ # frozen_string_literal: true require "spec_helper" describe Split::EncapsulatedHelper do - include Split::EncapsulatedHelper + let(:context_shim) { Split::EncapsulatedHelper::ContextShim.new(double(request: request)) } - def params - raise NoMethodError, "This method is not really defined" - end - describe "ab_test" do before do allow_any_instance_of(Split::EncapsulatedHelper::ContextShim).to receive(:ab_user) .and_return(mock_user) end - it "should not raise an error when params raises an error" do - expect { params }.to raise_error(NoMethodError) - expect { ab_test("link_color", "blue", "red") }.not_to raise_error - end - it "calls the block with selected alternative" do - expect { |block| ab_test("link_color", "red", "red", &block) }.to yield_with_args("red", {}) + expect { |block| context_shim.ab_test("link_color", "red", "red", &block) }.to yield_with_args("red", {}) end context "inside a view" do it "works inside ERB" do require "erb" template = ERB.new(<<-ERB.split(/\s+/s).map(&:strip).join(" "), nil, "%") - foo <% ab_test(:foo, '1', '2') do |alt, meta| %> + foo <% context_shim.ab_test(:foo, '1', '2') do |alt, meta| %> static <%= alt %> <% end %> ERB expect(template.result(binding)).to match(/foo static \d/) end @@ -41,10 +32,45 @@ it "is passed in shim" do ctx = Class.new { include Split::EncapsulatedHelper public :session }.new + expect(ctx).to receive(:session) { {} } expect { ctx.ab_test("link_color", "blue", "red") }.not_to raise_error + end + + context "when request is defined in context of ContextShim" do + context "when overriding by params" do + it do + ctx = Class.new { + public :session + def request + build_request(params: { + "ab_test" => { "link_color" => "blue" } + }) + end + }.new + + context_shim = Split::EncapsulatedHelper::ContextShim.new(ctx) + expect(context_shim.ab_test("link_color", "blue", "red")).to be("blue") + end + end + + context "when overriding by cookies" do + it do + ctx = Class.new { + public :session + def request + build_request(cookies: { + "split_override" => '{ "link_color": "red" }' + }) + end + }.new + + context_shim = Split::EncapsulatedHelper::ContextShim.new(ctx) + expect(context_shim.ab_test("link_color", "blue", "red")).to be("red") + end + end end end end