-
Notifications
You must be signed in to change notification settings - Fork 193
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3853 from alphagov/delete-assets-in-asset-manager…
…-when-attachments-are-deleted Delete assets in Asset Manager when attachments are deleted
- Loading branch information
Showing
8 changed files
with
167 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
module ServiceListeners | ||
class AttachmentDeleter | ||
attr_reader :attachment_data | ||
|
||
def initialize(attachment_data) | ||
@attachment_data = attachment_data | ||
end | ||
|
||
def delete! | ||
return unless attachment_data.present? | ||
|
||
AssetManagerAttachmentDeleteWorker.perform_async(attachment_data.id) | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
class AssetManagerAttachmentDeleteWorker < WorkerBase | ||
def perform(attachment_data_id) | ||
attachment_data = AttachmentData.find_by(id: attachment_data_id) | ||
return unless attachment_data.present? | ||
return unless attachment_data.deleted? | ||
|
||
delete_asset_for(attachment_data.file) | ||
if attachment_data.pdf? | ||
delete_asset_for(attachment_data.file.thumbnail) | ||
end | ||
end | ||
|
||
def delete_asset_for(uploader) | ||
AssetManagerDeleteAssetWorker.new.perform(uploader.asset_manager_path) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
30 changes: 30 additions & 0 deletions
30
test/unit/services/service_listeners/attachment_deleter_test.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
require 'test_helper' | ||
|
||
module ServiceListeners | ||
class AttachmentDeleterTest < ActiveSupport::TestCase | ||
extend Minitest::Spec::DSL | ||
|
||
let(:deleter) { AttachmentDeleter.new(attachment_data) } | ||
|
||
context 'when attachment data is not nil' do | ||
let(:id) { 123 } | ||
let(:attachment_data) { AttachmentData.new(id: id) } | ||
|
||
it 'deletes related assets in Asset Manager' do | ||
AssetManagerAttachmentDeleteWorker.expects(:perform_async).with(id) | ||
|
||
deleter.delete! | ||
end | ||
end | ||
|
||
context 'when attachment data is nil' do | ||
let(:attachment_data) { nil } | ||
|
||
it 'does not delete any assets in Asset Manager' do | ||
AssetManagerAttachmentDeleteWorker.expects(:perform_async).never | ||
|
||
deleter.delete! | ||
end | ||
end | ||
end | ||
end |
75 changes: 75 additions & 0 deletions
75
test/unit/workers/asset_manager_attachment_delete_worker_test.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
require 'test_helper' | ||
|
||
class AssetManagerAttachmentDeleteWorkerTest < ActiveSupport::TestCase | ||
extend Minitest::Spec::DSL | ||
|
||
let(:worker) { AssetManagerAttachmentDeleteWorker.new } | ||
let(:attachment_data) { nil } | ||
let(:delete_worker) { mock('delete-worker') } | ||
|
||
before do | ||
AttachmentData.stubs(:find_by).with(id: id).returns(attachment_data) | ||
AssetManagerDeleteAssetWorker.stubs(:new).returns(delete_worker) | ||
end | ||
|
||
context 'when attachment data does not exist' do | ||
let(:id) { 'no-such-id' } | ||
|
||
it 'does not delete any assets from Asset Manager' do | ||
delete_worker.expects(:perform).never | ||
|
||
worker.perform(id) | ||
end | ||
end | ||
|
||
context 'when attachment data exists' do | ||
let(:attachment_data) { create(:attachment_data, file: file) } | ||
let(:id) { attachment_data.id } | ||
|
||
before do | ||
attachment_data.stubs(:deleted?).returns(deleted) | ||
end | ||
|
||
context 'when attachment data is not a PDF' do | ||
let(:file) { File.open(fixture_path.join('sample.rtf')) } | ||
|
||
context 'and attachment data is deleted' do | ||
let(:deleted) { true } | ||
|
||
it 'deletes corresponding asset in Asset Manager' do | ||
delete_worker.expects(:perform) | ||
.with(attachment_data.file.asset_manager_path) | ||
|
||
worker.perform(id) | ||
end | ||
end | ||
|
||
context 'and attachment data is not deleted' do | ||
let(:deleted) { false } | ||
|
||
it 'does not delete any assets from Asset Manager' do | ||
delete_worker.expects(:perform).never | ||
|
||
assert AssetManagerDeleteAssetWorker.jobs.empty? | ||
end | ||
end | ||
end | ||
|
||
context 'when attachment data is a PDF' do | ||
let(:file) { File.open(fixture_path.join('simple.pdf')) } | ||
|
||
context 'and attachment data is deleted' do | ||
let(:deleted) { true } | ||
|
||
it 'deletes attachment & thumbnail asset in Asset Manager' do | ||
delete_worker.expects(:perform) | ||
.with(attachment_data.file.asset_manager_path) | ||
delete_worker.expects(:perform) | ||
.with(attachment_data.file.thumbnail.asset_manager_path) | ||
|
||
worker.perform(id) | ||
end | ||
end | ||
end | ||
end | ||
end |