diff --git a/lib/archive_importer/entity_importer.rb b/lib/archive_importer/entity_importer.rb index a005f22eb..22c6f49e4 100644 --- a/lib/archive_importer/entity_importer.rb +++ b/lib/archive_importer/entity_importer.rb @@ -16,6 +16,7 @@ class ArchiveImporter DiasporaFederation::Discovery::InvalidDocument, DiasporaFederation::Discovery::DiscoveryError, DiasporaFederation::Federation::Fetcher::NotFetchable, + OwnRelayableImporter::NoParentError, ActiveRecord::RecordInvalid => e logger.warn "#{self}: #{e}" self.persisted_object = nil diff --git a/lib/archive_importer/own_relayable_importer.rb b/lib/archive_importer/own_relayable_importer.rb index a3325735a..c9ff6f82f 100644 --- a/lib/archive_importer/own_relayable_importer.rb +++ b/lib/archive_importer/own_relayable_importer.rb @@ -2,6 +2,8 @@ class ArchiveImporter class OwnRelayableImporter < OwnEntityImporter + class NoParentError < RuntimeError; end + def entity fetch_parent(symbolized_entity_data) entity_class.new(symbolized_entity_data) @@ -19,6 +21,8 @@ class ArchiveImporter break entity_class::PARENT_TYPE if entity_class.const_defined?(:PARENT_TYPE) } entity = Diaspora::Federation::Mappings.model_class_for(type).find_by(guid: data.fetch(:parent_guid)) + raise NoParentError if entity.nil? + data[:parent] = Diaspora::Federation::Entities.related_entity(entity) end end diff --git a/spec/lib/archive_importer/own_relayable_importer_spec.rb b/spec/lib/archive_importer/own_relayable_importer_spec.rb index 2de01b0e1..d8c591924 100644 --- a/spec/lib/archive_importer/own_relayable_importer_spec.rb +++ b/spec/lib/archive_importer/own_relayable_importer_spec.rb @@ -28,4 +28,27 @@ describe ArchiveImporter::OwnRelayableImporter do ).to_json } end + + context "with comment with unknown parent" do + let(:new_user) { FactoryBot.create(:user) } + let(:instance) { described_class.new(entity_json, new_user) } + let(:entity_json) { JSON.parse(<<~JSON) } + { + "entity_data" : { + "created_at" : "2015-10-19T13:58:16Z", + "guid" : "#{UUID.generate(:compact)}", + "text" : "test post", + "author" : "author@example.com", + "parent_guid": "#{UUID.generate(:compact)}" + }, + "entity_type": "comment" + } + JSON + + it "doesn't raise error" do + expect { + instance.import + }.not_to raise_error + end + end end