diff --git a/lib/tasks/openfarm.rake b/lib/tasks/openfarm.rake index 92ca9cc39..6268df6c9 100644 --- a/lib/tasks/openfarm.rake +++ b/lib/tasks/openfarm.rake @@ -8,4 +8,13 @@ namespace :openfarm do Rails.logger = Logger.new(STDOUT) OpenfarmService.new.import! end + + desc "Delete all pictures with source OpenFarm" + task delete_pictures: :environment do + puts "Deleting pictures with source OpenFarm..." + photos_to_delete = Photo.where(source: 'OpenFarm') + count = photos_to_delete.count + photos_to_delete.destroy_all + puts "Deleted #{count} pictures." + end end diff --git a/spec/tasks/openfarm_rake_spec.rb b/spec/tasks/openfarm_rake_spec.rb new file mode 100644 index 000000000..56681a43e --- /dev/null +++ b/spec/tasks/openfarm_rake_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' +require 'rake' + +describe 'openfarm:delete_pictures' do + before(:all) do + Rails.application.load_tasks + end + + # We need to do this because Rake tasks normally output to STDOUT, but we + # don't want to clutter up the test output. + before(:each) do + $stdout = StringIO.new + end + + after(:each) do + $stdout = STDOUT + end + + it 'deletes pictures with source OpenFarm' do + create(:photo, source: 'OpenFarm') + create(:photo, source: 'flickr') + + expect(Photo.where(source: 'OpenFarm').count).to eq(1) + expect(Photo.where(source: 'flickr').count).to eq(1) + + Rake::Task['openfarm:delete_pictures'].invoke + + expect(Photo.where(source: 'OpenFarm').count).to eq(0) + expect(Photo.where(source: 'flickr').count).to eq(1) + end +end