diff options
Diffstat (limited to 'spec/migrations/save_instance_administrators_group_id_spec.rb')
-rw-r--r-- | spec/migrations/save_instance_administrators_group_id_spec.rb | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/spec/migrations/save_instance_administrators_group_id_spec.rb b/spec/migrations/save_instance_administrators_group_id_spec.rb new file mode 100644 index 00000000000..eab41017480 --- /dev/null +++ b/spec/migrations/save_instance_administrators_group_id_spec.rb @@ -0,0 +1,99 @@ +# frozen_string_literal: true + +require 'spec_helper' +require Rails.root.join('db', 'post_migrate', '20200210092405_save_instance_administrators_group_id') + +describe SaveInstanceAdministratorsGroupId, :migration 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 |