Sha256: 60180d951c26cd732701ae826f850bace575dab85a535a553f7220a3bdbb1824

Contents?: true

Size: 1.14 KB

Versions: 34

Compression:

Stored size: 1.14 KB

Contents

require 'helper'

RSpec.describe Flipper::Gates::PercentageOfTime do
  let(:feature_name) { :search }

  subject do
    described_class.new
  end

  def context(percentage_of_time_value, feature = feature_name, thing = nil)
    Flipper::FeatureCheckContext.new(
      feature_name: feature,
      values: Flipper::GateValues.new(percentage_of_time: percentage_of_time_value),
      thing: thing || Flipper::Types::Actor.new(Flipper::Actor.new(1))
    )
  end

  describe '#open?' do
    context 'for fractional percentage' do
      let(:decimal) { 0.001 }
      let(:percentage) { decimal * 100 }
      let(:number_of_invocations) { 10_000 }

      subject { described_class.new }

      it 'enables feature for accurate percentage of time' do
        margin_of_error = 0.02 * number_of_invocations
        expected_open_count = number_of_invocations * decimal

        open_count = (1..number_of_invocations).select do |_actor|
          context = context(percentage, :feature, Flipper::Actor.new("1"))
          subject.open?(context)
        end.size

        expect(open_count).to be_within(margin_of_error).of(expected_open_count)
      end
    end
  end
end

Version data entries

34 entries across 34 versions & 1 rubygems

Version Path
flipper-0.22.2 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.22.1 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.22.0 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.21.0 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.21.0.rc2 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.21.0.rc1 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.20.4 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.20.3 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.20.2 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.20.1 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.20.0 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.20.0.beta3 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.20.0.beta2 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.20.0.beta1 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.19.1 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.19.0 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.18.0 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.17.2 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.17.1 spec/flipper/gates/percentage_of_time_spec.rb
flipper-0.16.2 spec/flipper/gates/percentage_of_time_spec.rb