spec/flipper_integration_spec.rb in flipper-1.0.0 vs spec/flipper_integration_spec.rb in flipper-1.1.0
- old
+ new
@@ -6,23 +6,30 @@
let(:feature) { flipper[:search] }
let(:admin_group) { flipper.group(:admins) }
let(:dev_group) { flipper.group(:devs) }
let(:admin_actor) do
- double 'Non Flipper Thing', flipper_id: 1, admin?: true, dev?: false
+ double 'Non Flipper Thing', flipper_id: 1, admin?: true, dev?: false, flipper_properties: {"admin" => true, "dev" => false}
end
let(:dev_actor) do
- double 'Non Flipper Thing', flipper_id: 10, admin?: false, dev?: true
+ double 'Non Flipper Thing', flipper_id: 10, admin?: false, dev?: true, flipper_properties: {"admin" => false, "dev" => true}
end
let(:admin_truthy_actor) do
- double 'Non Flipper Thing', flipper_id: 1, admin?: 'true-ish', dev?: false
+ double 'Non Flipper Thing', flipper_id: 1, admin?: 'true-ish', dev?: false, flipper_properties: {"admin" => "true-ish", "dev" => false}
end
let(:admin_falsey_actor) do
- double 'Non Flipper Thing', flipper_id: 1, admin?: nil, dev?: false
+ double 'Non Flipper Thing', flipper_id: 1, admin?: nil, dev?: false, flipper_properties: {"admin" => nil, "dev" => false}
end
+ let(:basic_plan_actor) do
+ double 'Non Flipper Thing', flipper_id: 1, flipper_properties: {"plan" => "basic"}
+ end
+ let(:premium_plan_actor) do
+ double 'Non Flipper Thing', flipper_id: 10, flipper_properties: {"plan" => "premium"}
+ end
+
let(:pitt) { Flipper::Actor.new(1) }
let(:clooney) { Flipper::Actor.new(10) }
let(:five_percent_of_actors) { Flipper::Types::PercentageOfActors.new(5) }
let(:five_percent_of_time) { Flipper::Types::PercentageOfTime.new(5) }
@@ -68,14 +75,16 @@
expect(feature.enabled?(dev_actor)).to eq(false)
end
it 'enables feature for flipper actor in group' do
expect(feature.enabled?(Flipper::Types::Actor.new(admin_actor))).to eq(true)
+ expect(feature.enabled?(admin_actor)).to eq(true)
end
it 'does not enable for flipper actor not in group' do
expect(feature.enabled?(Flipper::Types::Actor.new(dev_actor))).to eq(false)
+ expect(feature.enabled?(dev_actor)).to eq(false)
end
it 'does not enable feature for all' do
expect(feature.enabled?).to eq(false)
end
@@ -255,14 +264,16 @@
expect(feature.enabled?(dev_actor)).to eq(true)
end
it 'disables feature for flipper actor in group' do
expect(feature.enabled?(Flipper::Types::Actor.new(admin_actor))).to eq(false)
+ expect(feature.enabled?(admin_actor)).to eq(false)
end
it 'does not disable feature for flipper actor in other groups' do
expect(feature.enabled?(Flipper::Types::Actor.new(dev_actor))).to eq(true)
+ expect(feature.enabled?(dev_actor)).to eq(true)
end
it 'adds feature to set of features' do
expect(flipper.features.map(&:name)).to include(:search)
end
@@ -377,10 +388,11 @@
expect(feature.enabled?(admin_actor)).to eq(true)
end
it 'returns true for truthy block values' do
expect(feature.enabled?(Flipper::Types::Actor.new(admin_truthy_actor))).to eq(true)
+ expect(feature.enabled?(admin_truthy_actor)).to eq(true)
end
it 'returns true if any actor is in enabled group' do
expect(feature.enabled?(dev_actor, admin_actor)).to be(true)
end
@@ -392,10 +404,11 @@
expect(feature.enabled?(dev_actor)).to eq(false)
end
it 'returns false for falsey block values' do
expect(feature.enabled?(Flipper::Types::Actor.new(admin_falsey_actor))).to eq(false)
+ expect(feature.enabled?(admin_falsey_actor)).to eq(false)
end
end
context 'for enabled actor' do
before do
@@ -545,8 +558,93 @@
expect(feature.enabled?(admin_actor)).to eq(true)
end
it 'does not enable feature for object in not enabled group' do
expect(feature.enabled?(dev_actor)).to eq(false)
+ end
+ end
+
+ context "for expression" do
+ it "works" do
+ feature.enable Flipper.property(:plan).eq("basic")
+
+ expect(feature.enabled?).to be(false)
+ expect(feature.enabled?(basic_plan_actor)).to be(true)
+ expect(feature.enabled?(premium_plan_actor)).to be(false)
+ expect(feature.enabled?(admin_actor)).to be(false)
+ end
+
+ it "works for true expression with no actor" do
+ feature.enable Flipper.boolean(true)
+ expect(feature.enabled?).to be(true)
+ end
+
+ it "works for multiple actors" do
+ feature.enable Flipper.property(:plan).eq("basic")
+
+ expect(feature.enabled?(basic_plan_actor, premium_plan_actor)).to be(true)
+ expect(feature.enabled?(premium_plan_actor, basic_plan_actor)).to be(true)
+ expect(feature.enabled?(premium_plan_actor, admin_actor)).to be(false)
+ end
+ end
+
+ context "for Any" do
+ it "works" do
+ expression = Flipper.any(
+ Flipper.property(:plan).eq("basic"),
+ Flipper.property(:plan).eq("plus"),
+ )
+ feature.enable expression
+
+ expect(feature.enabled?(basic_plan_actor)).to be(true)
+ expect(feature.enabled?(premium_plan_actor)).to be(false)
+ end
+ end
+
+ context "for All" do
+ it "works" do
+ true_actor = Flipper::Actor.new("User;1", {
+ "plan" => "basic",
+ "age" => 21,
+ })
+ false_actor = Flipper::Actor.new("User;1", {
+ "plan" => "basic",
+ "age" => 20,
+ })
+ expression = Flipper.all(
+ Flipper.property(:plan).eq("basic"),
+ Flipper.property(:age).eq(21)
+ )
+ feature.enable expression
+
+ expect(feature.enabled?(true_actor)).to be(true)
+ expect(feature.enabled?(false_actor)).to be(false)
+ end
+
+ it "works when nested" do
+ admin_actor = Flipper::Actor.new("User;1", {
+ "admin" => true,
+ })
+ true_actor = Flipper::Actor.new("User;1", {
+ "plan" => "basic",
+ "age" => 21,
+ })
+ false_actor = Flipper::Actor.new("User;1", {
+ "plan" => "basic",
+ "age" => 20,
+ })
+ expression = Flipper.any(
+ Flipper.property(:admin).eq(true),
+ Flipper.all(
+ Flipper.property(:plan).eq("basic"),
+ Flipper.property(:age).eq(21)
+ )
+ )
+
+ feature.enable expression
+
+ expect(feature.enabled?(admin_actor)).to be(true)
+ expect(feature.enabled?(true_actor)).to be(true)
+ expect(feature.enabled?(false_actor)).to be(false)
end
end
end