summaryrefslogtreecommitdiff
path: root/spec/migrations/20210722150102_operations_feature_flags_correct_flexible_rollout_values_spec.rb
blob: 130ad45ffc18ac5448b03193711fdc601bae621a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# frozen_string_literal: true

require 'spec_helper'

require_migration!('operations_feature_flags_correct_flexible_rollout_values')

RSpec.describe OperationsFeatureFlagsCorrectFlexibleRolloutValues, :migration do
  let_it_be(:strategies) { table(:operations_strategies) }

  let(:namespace) { table(:namespaces).create!(name: 'feature_flag', path: 'feature_flag') }
  let(:project) { table(:projects).create!(namespace_id: namespace.id) }
  let(:feature_flag) { table(:operations_feature_flags).create!(project_id: project.id, active: true, name: 'foo', iid: 1) }

  describe "#up" do
    described_class::STICKINESS.each do |old, new|
      it "corrects parameters for flexible rollout stickiness #{old}" do
        reversible_migration do |migration|
          parameters = { groupId: "default", rollout: "100", stickiness: old }
          strategy = create_strategy(parameters)

          migration.before -> {
            expect(strategy.reload.parameters).to eq({ "groupId" => "default", "rollout" => "100", "stickiness" => old })
          }

          migration.after -> {
            expect(strategy.reload.parameters).to eq({ "groupId" => "default", "rollout" => "100", "stickiness" => new })
          }
        end
      end
    end

    it 'ignores other strategies' do
      reversible_migration do |migration|
        parameters = { "groupId" => "default", "rollout" => "100", "stickiness" => "USERID" }
        strategy = create_strategy(parameters, name: 'default')

        migration.before -> {
          expect(strategy.reload.parameters).to eq(parameters)
        }

        migration.after -> {
          expect(strategy.reload.parameters).to eq(parameters)
        }
      end
    end

    it 'ignores other stickiness' do
      reversible_migration do |migration|
        parameters = { "groupId" => "default", "rollout" => "100", "stickiness" => "FOO" }
        strategy = create_strategy(parameters)

        migration.before -> {
          expect(strategy.reload.parameters).to eq(parameters)
        }

        migration.after -> {
          expect(strategy.reload.parameters).to eq(parameters)
        }
      end
    end
  end

  def create_strategy(params, name: 'flexibleRollout')
    strategies.create!(name: name, parameters: params, feature_flag_id: feature_flag.id)
  end
end