summaryrefslogtreecommitdiff
path: root/spec/migrations/save_instance_administrators_group_id_spec.rb
blob: 74ced009fa55b2d7d8cb7db4070acb51724721a4 (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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# frozen_string_literal: true

require 'spec_helper'
require Rails.root.join('db', 'post_migrate', '20200210092405_save_instance_administrators_group_id')

describe SaveInstanceAdministratorsGroupId do
  let(:application_settings_table) { table(:application_settings) }

  let(:instance_administrators_group) do
    table(:namespaces).create!(
      id: 1,
      name: 'GitLab Instance Administrators',
      path: 'gitlab-instance-administrators-random',
      type: 'Group'
    )
  end

  let(:self_monitoring_project) do
    table(:projects).create!(
      id: 2,
      name: 'Self Monitoring',
      path: 'self_monitoring',
      namespace_id: instance_administrators_group.id
    )
  end

  context 'when project ID is saved but group ID is not' do
    let(:application_settings) do
      application_settings_table.create!(instance_administration_project_id: self_monitoring_project.id)
    end

    it 'saves instance administrators group ID' do
      expect(application_settings.instance_administration_project_id).to eq(self_monitoring_project.id)
      expect(application_settings.instance_administrators_group_id).to be_nil

      migrate!

      expect(application_settings.reload.instance_administrators_group_id).to eq(instance_administrators_group.id)
      expect(application_settings.instance_administration_project_id).to eq(self_monitoring_project.id)
    end
  end

  context 'when group ID is saved but project ID is not' do
    let(:application_settings) do
      application_settings_table.create!(instance_administrators_group_id: instance_administrators_group.id)
    end

    it 'does not make changes' do
      expect(application_settings.instance_administrators_group_id).to eq(instance_administrators_group.id)
      expect(application_settings.instance_administration_project_id).to be_nil

      migrate!

      expect(application_settings.reload.instance_administrators_group_id).to eq(instance_administrators_group.id)
      expect(application_settings.instance_administration_project_id).to be_nil
    end
  end

  context 'when group ID and project ID are both saved' do
    let(:application_settings) do
      application_settings_table.create!(
        instance_administrators_group_id: instance_administrators_group.id,
        instance_administration_project_id: self_monitoring_project.id
      )
    end

    it 'does not make changes' do
      expect(application_settings.instance_administrators_group_id).to eq(instance_administrators_group.id)
      expect(application_settings.instance_administration_project_id).to eq(self_monitoring_project.id)

      migrate!

      expect(application_settings.reload.instance_administrators_group_id).to eq(instance_administrators_group.id)
      expect(application_settings.instance_administration_project_id).to eq(self_monitoring_project.id)
    end
  end

  context 'when neither group ID nor project ID is saved' do
    let(:application_settings) do
      application_settings_table.create!
    end

    it 'does not make changes' do
      expect(application_settings.instance_administrators_group_id).to be_nil
      expect(application_settings.instance_administration_project_id).to be_nil

      migrate!

      expect(application_settings.reload.instance_administrators_group_id).to be_nil
      expect(application_settings.instance_administration_project_id).to be_nil
    end
  end

  context 'when application_settings table has no rows' do
    it 'does not fail' do
      migrate!
    end
  end
end