Fix edits with no actual changes being allowed (#17843)
* Fix edits with no actual changes being allowed locally * Fix edits with no actual changes being allowed through ActivityPub * Fix false positive changes caused by description processing in model * Fix not recording poll expiration update * Fix test * Revert changes to ProcessStatusUpdateService * Various fixes and improvements * Fix code style issues * Various changes and improvements * Add guard clause
This commit is contained in:
parent
e3a2203061
commit
71f2b95106
9 changed files with 121 additions and 52 deletions
|
@ -186,14 +186,6 @@ RSpec.describe MediaAttachment, type: :model do
|
|||
expect(media.valid?).to be false
|
||||
end
|
||||
|
||||
describe 'descriptions for remote attachments' do
|
||||
it 'are cut off at 1500 characters' do
|
||||
media = Fabricate(:media_attachment, description: 'foo' * 1000, remote_url: 'http://example.com/blah.jpg')
|
||||
|
||||
expect(media.description.size).to be <= 1_500
|
||||
end
|
||||
end
|
||||
|
||||
describe 'size limit validation' do
|
||||
it 'rejects video files that are too large' do
|
||||
stub_const 'MediaAttachment::IMAGE_LIMIT', 100.megabytes
|
||||
|
|
|
@ -46,6 +46,29 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do
|
|||
expect(status.reload.spoiler_text).to eq 'Show more'
|
||||
end
|
||||
|
||||
context 'with no changes at all' do
|
||||
let(:payload) do
|
||||
{
|
||||
'@context': 'https://www.w3.org/ns/activitystreams',
|
||||
id: 'foo',
|
||||
type: 'Note',
|
||||
content: 'Hello world',
|
||||
}
|
||||
end
|
||||
|
||||
before do
|
||||
subject.call(status, json)
|
||||
end
|
||||
|
||||
it 'does not create any edits' do
|
||||
expect(status.reload.edits).to be_empty
|
||||
end
|
||||
|
||||
it 'does not mark status as edited' do
|
||||
expect(status.edited?).to be false
|
||||
end
|
||||
end
|
||||
|
||||
context 'with no changes and originally with no ordered_media_attachment_ids' do
|
||||
let(:payload) do
|
||||
{
|
||||
|
@ -61,8 +84,12 @@ RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do
|
|||
subject.call(status, json)
|
||||
end
|
||||
|
||||
it 'does not record an update' do
|
||||
expect(status.reload.edited?).to be false
|
||||
it 'does not create any edits' do
|
||||
expect(status.reload.edits).to be_empty
|
||||
end
|
||||
|
||||
it 'does not mark status as edited' do
|
||||
expect(status.edited?).to be false
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -3,6 +3,23 @@ require 'rails_helper'
|
|||
RSpec.describe UpdateStatusService, type: :service do
|
||||
subject { described_class.new }
|
||||
|
||||
context 'when nothing changes' do
|
||||
let!(:status) { Fabricate(:status, text: 'Foo', language: 'en') }
|
||||
|
||||
before do
|
||||
allow(ActivityPub::DistributionWorker).to receive(:perform_async)
|
||||
subject.call(status, status.account_id, text: 'Foo')
|
||||
end
|
||||
|
||||
it 'does not create an edit' do
|
||||
expect(status.reload.edits).to be_empty
|
||||
end
|
||||
|
||||
it 'does not notify anyone' do
|
||||
expect(ActivityPub::DistributionWorker).to_not have_received(:perform_async)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when text changes' do
|
||||
let!(:status) { Fabricate(:status, text: 'Foo') }
|
||||
let(:preview_card) { Fabricate(:preview_card) }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue