summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/background_migration/reset_duplicate_ci_runners_token_values_on_projects_spec.rb
blob: 7d3df69bee229b421369c07ecc98baee805a0dd6 (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
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Gitlab::BackgroundMigration::ResetDuplicateCiRunnersTokenValuesOnProjects, :migration, schema: 20220326161803 do # rubocop:disable Layout/LineLength
  let(:namespaces) { table(:namespaces) }
  let(:projects) { table(:projects) }

  subject(:background_migration) { described_class.new }

  before do
    namespaces.create!(id: 123, name: 'sample', path: 'sample')

    projects.create!(id: 1, namespace_id: 123, runners_token: 'duplicate')
    projects.create!(id: 2, namespace_id: 123, runners_token: 'a-runners-token')
    projects.create!(id: 3, namespace_id: 123, runners_token: 'duplicate-2')
    projects.create!(id: 4, namespace_id: 123, runners_token: nil)
    projects.create!(id: 5, namespace_id: 123, runners_token: 'duplicate-2')
    projects.create!(id: 6, namespace_id: 123, runners_token: 'duplicate')
    projects.create!(id: 7, namespace_id: 123, runners_token: 'another-runners-token')
    projects.create!(id: 8, namespace_id: 123, runners_token: 'another-runners-token')
  end

  describe '#up' do
    it 'nullifies duplicate tokens', :aggregate_failures do
      background_migration.perform(1, 2)
      background_migration.perform(3, 4)

      expect(projects.count).to eq(8)
      expect(projects.all.pluck(:id, :runners_token).to_h).to eq(
        {
          1 => nil,
          2 => 'a-runners-token',
          3 => nil,
          4 => nil,
          5 => 'duplicate-2',
          6 => 'duplicate',
          7 => 'another-runners-token',
          8 => 'another-runners-token'
        })
      expect(projects.pluck(:runners_token).uniq).to match_array [
        nil, 'a-runners-token', 'duplicate', 'duplicate-2', 'another-runners-token'
      ]
    end

    it 'does not touch projects outside id range' do
      expect do
        background_migration.perform(1, 2)
      end.not_to change { projects.where(id: [3..8]).each(&:reload).map(&:updated_at) }
    end
  end
end