diff options
author | Stan Hu <stanhu@gmail.com> | 2017-04-01 02:59:46 +0300 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2017-04-02 15:37:04 +0300 |
commit | 8a71d40e60c799f969af0ed255e931b6c9907634 (patch) | |
tree | 2737ce98e11f3c8c612d5fa6266232757cc194c0 /spec/services/users | |
parent | 9fc17f6f4abdb04f3cf1b60b87bd67b894a19c39 (diff) |
Fix race condition where a namespace would be deleted before a project was deleted
When deleting a user, the following sequence could happen:
1. Project `mygroup/myproject` is scheduled for deletion
2. The group `mygroup` is deleted
3. Sidekiq worker runs to delete `mygroup/myproject`, but the namespace and routes have
been destroyed.
Closes #30334
Diffstat (limited to 'spec/services/users')
-rw-r--r-- | spec/services/users/destroy_spec.rb | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/spec/services/users/destroy_spec.rb b/spec/services/users/destroy_spec.rb index 9a28c03d968..66c61b7f8ff 100644 --- a/spec/services/users/destroy_spec.rb +++ b/spec/services/users/destroy_spec.rb @@ -17,13 +17,28 @@ describe Users::DestroyService, services: true do expect { Namespace.with_deleted.find(user.namespace.id) }.to raise_error(ActiveRecord::RecordNotFound) end - it 'will delete the project in the near future' do - expect_any_instance_of(Projects::DestroyService).to receive(:async_execute).once + it 'will delete the project' do + expect_any_instance_of(Projects::DestroyService).to receive(:execute).once service.execute(user) end end + context 'projects in pending_delete' do + before do + project.pending_delete = true + project.save + end + + it 'destroys a project in pending_delete' do + expect_any_instance_of(Projects::DestroyService).to receive(:execute).once + + service.execute(user) + + expect { Project.find(project.id) }.to raise_error(ActiveRecord::RecordNotFound) + end + end + context "a deleted user's issues" do let(:project) { create(:project) } |