about summary refs log tree commit diff
diff options
context:
space:
mode:
authorClaire <claire.github-309c@sitedethib.com>2022-03-12 20:20:58 +0100
committerClaire <claire.github-309c@sitedethib.com>2022-03-12 20:20:58 +0100
commit8d4b5ee3ef5e8df3a92e19f2c3f3a4560341eef3 (patch)
tree1e0a0011a890729f45c0d364641c266864e78d02
parent8eb3146487e27f31478943cbe706d43a6c7a6d25 (diff)
parent92a86b958ee7b96dbcbc17237dfcb1af0f15740c (diff)
Merge branch 'main' into glitch-soc/merge-upstream
-rw-r--r--app/services/activitypub/process_status_update_service.rb11
-rw-r--r--spec/services/activitypub/process_status_update_service_spec.rb20
2 files changed, 27 insertions, 4 deletions
diff --git a/app/services/activitypub/process_status_update_service.rb b/app/services/activitypub/process_status_update_service.rb
index 70e9cb7d9..47a788c30 100644
--- a/app/services/activitypub/process_status_update_service.rb
+++ b/app/services/activitypub/process_status_update_service.rb
@@ -13,7 +13,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
     @poll_changed              = false
 
     # Only native types can be updated at the moment
-    return if !expected_type? || already_updated_more_recently?
+    return @status if !expected_type? || already_updated_more_recently?
 
     last_edit_date = status.edited_at.presence || status.created_at
 
@@ -41,13 +41,16 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
     end
 
     forward_activity! if significant_changes? && @status_parser.edited_at.present? && @status_parser.edited_at > last_edit_date
+
+    @status
   end
 
   private
 
   def update_media_attachments!
-    previous_media_attachments = @status.media_attachments.to_a
-    next_media_attachments     = []
+    previous_media_attachments     = @status.media_attachments.to_a
+    previous_media_attachments_ids = @status.ordered_media_attachment_ids || previous_media_attachments.map(&:id)
+    next_media_attachments         = []
 
     as_array(@json['attachment']).each do |attachment|
       media_attachment_parser = ActivityPub::Parser::MediaAttachmentParser.new(attachment)
@@ -87,7 +90,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
     @status.ordered_media_attachment_ids = next_media_attachments.map(&:id)
     @status.media_attachments.reload
 
-    @media_attachments_changed = true if @status.ordered_media_attachment_ids_changed?
+    @media_attachments_changed = true if @status.ordered_media_attachment_ids != previous_media_attachments_ids
   end
 
   def update_poll!
diff --git a/spec/services/activitypub/process_status_update_service_spec.rb b/spec/services/activitypub/process_status_update_service_spec.rb
index 40b405217..788c7c9d9 100644
--- a/spec/services/activitypub/process_status_update_service_spec.rb
+++ b/spec/services/activitypub/process_status_update_service_spec.rb
@@ -46,6 +46,26 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do
       expect(status.reload.spoiler_text).to eq 'Show more'
     end
 
+    context 'with no changes and originally with no ordered_media_attachment_ids' do
+      let(:payload) do
+        {
+          '@context': 'https://www.w3.org/ns/activitystreams',
+          id: 'foo',
+          type: 'Note',
+          content: 'Hello world',
+        }
+      end
+
+      before do
+        status.update(ordered_media_attachment_ids: nil)
+        subject.call(status, json)
+      end
+
+      it 'does not record an update' do
+        expect(status.reload.edited?).to be false
+      end
+    end
+
     context 'originally without tags' do
       before do
         subject.call(status, json)