2018-11-20 14:46:22 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe Gitlab::BackgroundMigration::BackfillProjectFullpathInRepoConfig, :migration, schema: 20181010133639 do
|
|
|
|
let(:namespaces) { table(:namespaces) }
|
|
|
|
let(:projects) { table(:projects) }
|
|
|
|
let(:group) { namespaces.create!(name: 'foo', path: 'foo') }
|
|
|
|
let(:subgroup) { namespaces.create!(name: 'bar', path: 'bar', parent_id: group.id) }
|
|
|
|
|
|
|
|
describe described_class::Storage::HashedProject do
|
|
|
|
let(:project) { double(id: 555) }
|
|
|
|
subject(:project_storage) { described_class.new(project) }
|
|
|
|
|
|
|
|
it 'has the correct disk_path' do
|
|
|
|
expect(project_storage.disk_path).to eq('@hashed/91/a7/91a73fd806ab2c005c13b4dc19130a884e909dea3f72d46e30266fe1a1f588d8')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe described_class::Storage::LegacyProject do
|
|
|
|
let(:project) { double(full_path: 'this/is/the/full/path') }
|
|
|
|
subject(:project_storage) { described_class.new(project) }
|
|
|
|
|
|
|
|
it 'has the correct disk_path' do
|
|
|
|
expect(project_storage.disk_path).to eq('this/is/the/full/path')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe described_class::Project do
|
|
|
|
let(:project_record) { projects.create!(namespace_id: subgroup.id, name: 'baz', path: 'baz') }
|
|
|
|
subject(:project) { described_class.find(project_record.id) }
|
|
|
|
|
|
|
|
describe '#full_path' do
|
|
|
|
it 'returns path containing all parent namespaces' do
|
|
|
|
expect(project.full_path).to eq('foo/bar/baz')
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe described_class::Up do
|
|
|
|
describe '#perform' do
|
|
|
|
subject(:migrate) { described_class.new.perform(projects.minimum(:id), projects.maximum(:id)) }
|
|
|
|
|
|
|
|
it 'asks the gitaly client to set config' do
|
|
|
|
projects.create!(namespace_id: subgroup.id, name: 'baz', path: 'baz')
|
|
|
|
projects.create!(namespace_id: subgroup.id, name: 'buzz', path: 'buzz', storage_version: 1)
|
|
|
|
|
|
|
|
expect_next_instance_of(Gitlab::GitalyClient::RepositoryService) do |repository_service|
|
2018-11-22 14:44:37 +00:00
|
|
|
allow(repository_service).to receive(:cleanup)
|
2018-11-20 14:46:22 +00:00
|
|
|
expect(repository_service).to receive(:set_config).with('gitlab.fullpath' => 'foo/bar/baz')
|
|
|
|
end
|
|
|
|
|
|
|
|
expect_next_instance_of(Gitlab::GitalyClient::RepositoryService) do |repository_service|
|
2018-11-22 14:44:37 +00:00
|
|
|
allow(repository_service).to receive(:cleanup)
|
2018-11-20 14:46:22 +00:00
|
|
|
expect(repository_service).to receive(:set_config).with('gitlab.fullpath' => 'foo/bar/buzz')
|
|
|
|
end
|
|
|
|
|
|
|
|
migrate
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe described_class::Down do
|
|
|
|
describe '#perform' do
|
|
|
|
subject(:migrate) { described_class.new.perform(projects.minimum(:id), projects.maximum(:id)) }
|
|
|
|
|
|
|
|
it 'asks the gitaly client to set config' do
|
|
|
|
projects.create!(namespace_id: subgroup.id, name: 'baz', path: 'baz')
|
|
|
|
|
2018-11-22 14:44:37 +00:00
|
|
|
expect_next_instance_of(Gitlab::GitalyClient::RepositoryService) do |repository_service|
|
|
|
|
allow(repository_service).to receive(:cleanup)
|
|
|
|
expect(repository_service).to receive(:delete_config).with(['gitlab.fullpath'])
|
|
|
|
end
|
2018-11-20 14:46:22 +00:00
|
|
|
|
|
|
|
migrate
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|