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:
parent
d3aa9cf774
commit
92a86b958e
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue