FIX: Destroy `OptimizedImage` record even if `Upload` record is invalid.

FIX: Destroy OptimizedImage record even if Upload record is invalid.

diff --git a/app/models/optimized_image.rb b/app/models/optimized_image.rb
index 74a45ad..726f0e3 100644
--- a/app/models/optimized_image.rb
+++ b/app/models/optimized_image.rb
@@ -130,7 +130,7 @@ class OptimizedImage < ActiveRecord::Base
 
   def destroy
     OptimizedImage.transaction do
-      Discourse.store.remove_optimized_image(self)
+      Discourse.store.remove_optimized_image(self) if self.upload
       super
     end
   end
diff --git a/spec/models/optimized_image_spec.rb b/spec/models/optimized_image_spec.rb
index 4a52540..d309463 100644
--- a/spec/models/optimized_image_spec.rb
+++ b/spec/models/optimized_image_spec.rb
@@ -330,6 +330,18 @@ describe OptimizedImage do
 
   end
 
+  describe '#destroy' do
+    describe 'when upload_id is no longer valid' do
+      it 'should still destroy the record' do
+        image = Fabricate(:optimized_image)
+        image.upload.delete
+        image.reload.destroy
+
+        expect(OptimizedImage.exists?(id: image.id)).to eq(false)
+      end
+    end
+  end
+
 end
 
 class FakeInternalStore

GitHub sha: 839a54b9