diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-07-08 13:55:03 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-07-08 13:55:03 +0000 |
commit | cd1cc23153ed8115bc565f62b5a9f4eddc0942ca (patch) | |
tree | b379b2c66a70ffbb0d3baf71bdcc89eba8e434f2 /spec/migrations | |
parent | 755aa9544e3f5595cdc4f7a9d746758670d2393b (diff) | |
download | gitlab-ce-cd1cc23153ed8115bc565f62b5a9f4eddc0942ca.tar.gz |
Add latest changes from gitlab-org/gitlab@13-1-stable-ee
Diffstat (limited to 'spec/migrations')
3 files changed, 126 insertions, 11 deletions
diff --git a/spec/migrations/add_repository_storages_weighted_to_application_settings_spec.rb b/spec/migrations/add_repository_storages_weighted_to_application_settings_spec.rb new file mode 100644 index 00000000000..6c6c63d8614 --- /dev/null +++ b/spec/migrations/add_repository_storages_weighted_to_application_settings_spec.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require 'spec_helper' +require Rails.root.join('db', 'migrate', '20200508203901_add_repository_storages_weighted_to_application_settings.rb') + +RSpec.describe AddRepositoryStoragesWeightedToApplicationSettings, :migration do + let(:storages) { { "foo" => {}, "baz" => {} } } + let(:application_settings) do + table(:application_settings).tap do |klass| + klass.class_eval do + serialize :repository_storages + end + end + end + + before do + allow(Gitlab.config.repositories).to receive(:storages).and_return(storages) + end + + let(:application_setting) { application_settings.create! } + let(:repository_storages) { ["foo"] } + + it 'populates repository_storages_weighted properly' do + application_setting.repository_storages = repository_storages + application_setting.save! + + migrate! + + expect(application_settings.find(application_setting.id).repository_storages_weighted).to eq({ "foo" => 100, "baz" => 0 }) + end +end diff --git a/spec/migrations/reseed_repository_storages_weighted_spec.rb b/spec/migrations/reseed_repository_storages_weighted_spec.rb new file mode 100644 index 00000000000..8abad3c0d93 --- /dev/null +++ b/spec/migrations/reseed_repository_storages_weighted_spec.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require 'spec_helper' +require Rails.root.join('db', 'migrate', '20200509203901_reseed_repository_storages_weighted.rb') + +RSpec.describe ReseedRepositoryStoragesWeighted do + let(:storages) { { "foo" => {}, "baz" => {} } } + let(:application_settings) do + table(:application_settings).tap do |klass| + klass.class_eval do + serialize :repository_storages + end + end + end + + before do + allow(Gitlab.config.repositories).to receive(:storages).and_return(storages) + end + + let(:repository_storages) { ["foo"] } + let!(:application_setting) { application_settings.create!(repository_storages: repository_storages) } + + context 'with empty repository_storages_weighted column' do + it 'populates repository_storages_weighted properly' do + migrate! + + expect(application_settings.find(application_setting.id).repository_storages_weighted).to eq({ "foo" => 100, "baz" => 0 }) + end + end + + context 'with already-populated repository_storages_weighted column' do + let(:existing_weights) { { "foo" => 100, "baz" => 50 } } + + it 'does not change repository_storages_weighted properly' do + application_setting.repository_storages_weighted = existing_weights + application_setting.save! + + migrate! + + expect(application_settings.find(application_setting.id).repository_storages_weighted).to eq(existing_weights) + end + end +end diff --git a/spec/migrations/update_routes_for_lost_and_found_group_and_orphaned_projects_spec.rb b/spec/migrations/update_routes_for_lost_and_found_group_and_orphaned_projects_spec.rb index 4cf096b9df6..103b6f114c4 100644 --- a/spec/migrations/update_routes_for_lost_and_found_group_and_orphaned_projects_spec.rb +++ b/spec/migrations/update_routes_for_lost_and_found_group_and_orphaned_projects_spec.rb @@ -62,8 +62,8 @@ describe UpdateRoutesForLostAndFoundGroupAndOrphanedProjects, :migration do source_type: 'Project', path: 'orphaned_project', name: 'orphaned_project', - created_at: Time.zone.now, - updated_at: Time.zone.now + created_at: Time.current, + updated_at: Time.current ) # Create another user named ghost which is not the Ghost User @@ -90,10 +90,10 @@ describe UpdateRoutesForLostAndFoundGroupAndOrphanedProjects, :migration do routes.create!( source_id: fake_ghost_user_namespace.id, source_type: 'Namespace', - path: 'Ghost User', - name: 'ghost1', - created_at: Time.zone.now, - updated_at: Time.zone.now + path: 'ghost1', + name: 'Ghost User', + created_at: Time.current, + updated_at: Time.current ) fake_lost_and_found_group = namespaces.create!( @@ -109,8 +109,8 @@ describe UpdateRoutesForLostAndFoundGroupAndOrphanedProjects, :migration do source_type: 'Namespace', path: described_class::User::LOST_AND_FOUND_GROUP, # same path as the lost-and-found group name: 'Lost and Found', - created_at: Time.zone.now, - updated_at: Time.zone.now + created_at: Time.current, + updated_at: Time.current ) members.create!( @@ -135,17 +135,58 @@ describe UpdateRoutesForLostAndFoundGroupAndOrphanedProjects, :migration do source_type: 'Project', path: "#{described_class::User::LOST_AND_FOUND_GROUP}/normal_project", name: 'Lost and Found / normal_project', - created_at: Time.zone.now, - updated_at: Time.zone.now + created_at: Time.current, + updated_at: Time.current ) + + # Add a project whose route conflicts with the ghost username + # and should force the data migration to pick a new Ghost username and path + ghost_project = projects.create!( + name: 'Ghost Project', + path: 'ghost', + visibility_level: 20, + archived: false, + namespace_id: fake_lost_and_found_group.id + ) + + routes.create!( + source_id: ghost_project.id, + source_type: 'Project', + path: 'ghost', + name: 'Ghost Project', + created_at: Time.current, + updated_at: Time.current + ) + end + + it 'fixes the ghost user username and namespace path' do + ghost_user = users.find_by(user_type: described_class::User::USER_TYPE_GHOST) + ghost_namespace = namespaces.find_by(owner_id: ghost_user.id) + + expect(ghost_user.username).to eq('ghost') + expect(ghost_namespace.path).to eq('ghost') + + disable_migrations_output { migrate! } + + ghost_user = users.find_by(user_type: described_class::User::USER_TYPE_GHOST) + ghost_namespace = namespaces.find_by(owner_id: ghost_user.id) + ghost_namespace_route = routes.find_by(source_id: ghost_namespace.id, source_type: 'Namespace') + + expect(ghost_user.username).to eq('ghost2') + expect(ghost_namespace.path).to eq('ghost2') + expect(ghost_namespace_route.path).to eq('ghost2') end it 'creates the route for the ghost user namespace' do - expect(routes.where(path: 'ghost').count).to eq(0) + expect(routes.where(path: 'ghost').count).to eq(1) + expect(routes.where(path: 'ghost1').count).to eq(1) + expect(routes.where(path: 'ghost2').count).to eq(0) disable_migrations_output { migrate! } expect(routes.where(path: 'ghost').count).to eq(1) + expect(routes.where(path: 'ghost1').count).to eq(1) + expect(routes.where(path: 'ghost2').count).to eq(1) end it 'fixes the path for the lost-and-found group by generating a unique one' do |