diff --git a/app/models/assets/import.rb b/app/models/assets/import.rb index aa3fa57f..5b136ee3 100644 --- a/app/models/assets/import.rb +++ b/app/models/assets/import.rb @@ -119,10 +119,12 @@ def refresh(fact_changes=nil) end def refresh!(fact_changes=nil) - @import_step = Step.create(step_type: StepType.find_or_create_by(name: 'Refresh!!'), state: 'running') - remote_asset = SequencescapeClient::find_by_uuid(uuid) - raise RefreshSourceNotFoundAnymore unless remote_asset - _process_refresh(remote_asset, fact_changes) + if is_remote_asset? + @import_step = Step.create(step_type: StepType.find_or_create_by(name: 'Refresh!!'), state: 'running') + remote_asset = SequencescapeClient::find_by_uuid(uuid) + raise RefreshSourceNotFoundAnymore unless remote_asset + _process_refresh(remote_asset, fact_changes) + end self end diff --git a/spec/models/assets/import_spec.rb b/spec/models/assets/import_spec.rb index 48440ca9..4cf3cfdc 100644 --- a/spec/models/assets/import_spec.rb +++ b/spec/models/assets/import_spec.rb @@ -4,6 +4,50 @@ RSpec.describe 'Assets::Import' do include RemoteAssetsHelper + + context '#refresh!' do + let(:asset) { create :asset } + let(:plate) { build_remote_plate } + + before do + allow(asset).to receive(:_process_refresh) + allow(SequencescapeClient).to receive(:find_by_uuid).and_return(true) + end + + context 'when it is not a remote asset' do + before do + allow(asset).to receive(:is_remote_asset?).and_return(false) + end + + it 'does not refresh' do + asset.refresh! + expect(asset).not_to have_received(:_process_refresh) + end + end + context 'when it is a remote asset' do + before do + allow(asset).to receive(:is_remote_asset?).and_return(true) + end + context 'when the asset has changed' do + before do + allow(asset).to receive(:changed_remote?).and_return(true) + end + it 'refreshes the asset' do + asset.refresh! + expect(asset).to have_received(:_process_refresh) + end + end + context 'when the asset has not changed' do + before do + allow(asset).to receive(:changed_remote?).and_return(false) + end + it 'refreshes the asset' do + asset.refresh! + expect(asset).to have_received(:_process_refresh) + end + end + end + end context '#refresh' do let(:asset) { create :asset } let(:plate) { build_remote_plate }