|
2 | 2 |
|
3 | 3 | module VCAP::CloudController |
4 | 4 | module Jobs |
| 5 | + RSpec.shared_examples 'a delete action handling external deletion' do |
| 6 | + before do |
| 7 | + allow_any_instance_of(resource.class).to receive(:destroy).and_wrap_original do |original_method, *args| |
| 8 | + Sequel::Model.db.run("DELETE FROM #{resource.class.table_name} WHERE id = #{resource.id}") # Simulate external deletion |
| 9 | + original_method.call(*args) |
| 10 | + end |
| 11 | + end |
| 12 | + |
| 13 | + it 'still attempts to delete the resource even if it was already deleted externally' do |
| 14 | + expect { delete_job.perform }.not_to raise_error |
| 15 | + end |
| 16 | + end |
| 17 | + |
5 | 18 | RSpec.describe DeleteActionJob, job_context: :worker do |
6 | 19 | let(:user) { User.make(admin: true) } |
7 | 20 | let(:delete_action) { instance_double(SpaceDelete, delete: []) } |
@@ -127,6 +140,32 @@ module Jobs |
127 | 140 | expect(job.resource_guid).to eq(space.guid) |
128 | 141 | end |
129 | 142 | end |
| 143 | + |
| 144 | + context 'when the resource is deleted externally before destroy' do |
| 145 | + it_behaves_like 'a delete action handling external deletion' do |
| 146 | + let(:resource) { PackageModel.make } |
| 147 | + let(:delete_action) { PackageDelete.new(nil) } |
| 148 | + let(:delete_job) { DeleteActionJob.new(PackageModel, resource.guid, delete_action) } |
| 149 | + end |
| 150 | + |
| 151 | + it_behaves_like 'a delete action handling external deletion' do |
| 152 | + let(:resource) { Space.make } |
| 153 | + let(:delete_action) { SpaceDelete.new(nil, nil) } |
| 154 | + let(:delete_job) { DeleteActionJob.new(Space, resource.guid, delete_action) } |
| 155 | + end |
| 156 | + |
| 157 | + it_behaves_like 'a delete action handling external deletion' do |
| 158 | + let(:resource) { Route.make } |
| 159 | + let(:delete_action) { RouteDeleteAction.new(nil) } |
| 160 | + let(:delete_job) { DeleteActionJob.new(Route, resource.guid, delete_action) } |
| 161 | + end |
| 162 | + |
| 163 | + it_behaves_like 'a delete action handling external deletion' do |
| 164 | + let(:resource) { User.make } |
| 165 | + let(:delete_action) { UserDeleteAction.new } |
| 166 | + let(:delete_job) { DeleteActionJob.new(User, resource.guid, delete_action) } |
| 167 | + end |
| 168 | + end |
130 | 169 | end |
131 | 170 | end |
132 | 171 | end |
0 commit comments