Refactoring spec for Geo::RepositoriesCleanUpWorker

parent 3d953e3a
require 'spec_helper' require 'spec_helper'
describe Geo::RepositoriesCleanUpWorker do describe Geo::RepositoriesCleanUpWorker do
let!(:geo_node) { create(:geo_node) }
let(:synced_group) { create(:group) }
let!(:project_in_synced_group) { create(:project, group: synced_group) }
let!(:unsynced_project) { create(:project, :repository) }
describe '#perform' do describe '#perform' do
let(:geo_node) { create(:geo_node) }
before do before do
allow_any_instance_of(Gitlab::ExclusiveLease).to receive(:try_obtain) { true } allow_any_instance_of(Gitlab::ExclusiveLease).to receive(:try_obtain) { true }
end end
context 'when node has namespace restrictions' do context 'when node has namespace restrictions' do
let(:synced_group) { create(:group) }
let(:geo_node) { create(:geo_node, namespaces: [synced_group]) }
it 'performs GeoRepositoryDestroyWorker for each project that does not belong to selected namespaces to replicate' do it 'performs GeoRepositoryDestroyWorker for each project that does not belong to selected namespaces to replicate' do
geo_node.update_attribute(:namespaces, [synced_group]) project_in_synced_group = create(:project, group: synced_group)
unsynced_project = create(:project, :repository)
expect(GeoRepositoryDestroyWorker).to receive(:perform_async) expect(GeoRepositoryDestroyWorker).to receive(:perform_async)
.with(unsynced_project.id, unsynced_project.name, unsynced_project.full_path) .with(unsynced_project.id, unsynced_project.name, unsynced_project.full_path)
.once.and_return(1) .once.and_return(1)
expect(GeoRepositoryDestroyWorker).not_to receive(:perform_async)
.with(project_in_synced_group.id, project_in_synced_group.name, project_in_synced_group.full_path)
subject.perform(geo_node.id) subject.perform(geo_node.id)
end end
it 'does not perform GeoRepositoryDestroyWorker when repository does not exist' do it 'does not perform GeoRepositoryDestroyWorker when repository does not exist' do
allow_any_instance_of(Gitlab::Shell).to receive(:exists?) create(:project)
.with(unsynced_project.repository_storage_path, "#{unsynced_project.disk_path}.git")
.and_return(false)
expect(GeoRepositoryDestroyWorker).not_to receive(:perform_async) expect(GeoRepositoryDestroyWorker).not_to receive(:perform_async)
...@@ -33,28 +35,22 @@ describe Geo::RepositoriesCleanUpWorker do ...@@ -33,28 +35,22 @@ describe Geo::RepositoriesCleanUpWorker do
end end
end end
context 'when does not node have namespace restrictions' do it 'does not perform GeoRepositoryDestroyWorker when does not node have namespace restrictions' do
it 'does not perform GeoRepositoryDestroyWorker' do expect(GeoRepositoryDestroyWorker).not_to receive(:perform_async)
expect(GeoRepositoryDestroyWorker).not_to receive(:perform_async)
subject.perform(geo_node.id) subject.perform(geo_node.id)
end
end end
context 'when cannnot obtain a lease' do it 'does not perform GeoRepositoryDestroyWorker when cannnot obtain a lease' do
it 'does not perform GeoRepositoryDestroyWorker' do allow_any_instance_of(Gitlab::ExclusiveLease).to receive(:try_obtain) { false }
allow_any_instance_of(Gitlab::ExclusiveLease).to receive(:try_obtain) { false }
expect(GeoRepositoryDestroyWorker).not_to receive(:perform_async) expect(GeoRepositoryDestroyWorker).not_to receive(:perform_async)
subject.perform(geo_node.id) subject.perform(geo_node.id)
end
end end
context 'when Geo node could not be found' do it 'does not raise an error when node could not be found' do
it 'does not raise an error' do expect { subject.perform(-1) }.not_to raise_error
expect { subject.perform(-1) }.not_to raise_error
end
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment