Fix issues with processing toot edits (#17748)
* Fix searching for an already-known status by URL not working * Fix Update processing from statuses prior to 20220302232632 `ordered_media_attachment_ids_changed?` would return `true` when going from `nil` to anything (including `[]`). * Add tests
This commit is contained in:
		| @@ -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,12 +41,15 @@ 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 | ||||
|     previous_media_attachments_ids = @status.ordered_media_attachment_ids || previous_media_attachments.map(&:id) | ||||
|     next_media_attachments         = [] | ||||
|  | ||||
|     as_array(@json['attachment']).each do |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! | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user