From 76edf824995e8235fc0e589e6cabb38cd4580b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Sat, 21 Oct 2023 21:40:34 +0900 Subject: [PATCH] =?UTF-8?q?Fix:=20=E3=83=96=E3=83=BC=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=81=8C=EF=BC=91=E3=81=A4=E3=81=A7=E3=82=82=E3=81=82=E3=82=8B?= =?UTF-8?q?=E3=81=A8=E6=8A=95=E7=A8=BF=E3=81=AE=E3=82=A8=E3=82=AF=E3=82=B9?= =?UTF-8?q?=E3=83=9D=E3=83=BC=E3=83=88=E6=99=82=E3=81=AB=E3=82=A8=E3=83=A9?= =?UTF-8?q?=E3=83=BC=E3=81=8C=E5=87=BA=E3=82=8B=E5=95=8F=E9=A1=8C=20(#149)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix: ブーストが1つでもあるとバックアップ時にエラーが出る問題 * Test: 限定投稿の扱い --- app/services/concerns/payloadable.rb | 3 ++- spec/services/backup_service_spec.rb | 13 ++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/services/concerns/payloadable.rb b/app/services/concerns/payloadable.rb index 73c397852e..b0bab9a081 100644 --- a/app/services/concerns/payloadable.rb +++ b/app/services/concerns/payloadable.rb @@ -16,8 +16,9 @@ module Payloadable always_sign = options.delete(:always_sign) payload = ActiveModelSerializers::SerializableResource.new(record, options.merge(serializer: serializer, adapter: ActivityPub::Adapter)).as_json object = record.respond_to?(:virtual_object) ? record.virtual_object : record + bearcap = object.is_a?(String) && record.respond_to?(:type) && (record.type == 'Create' || record.type == 'Update') - if ((object.respond_to?(:sign?) && object.sign?) && signer && (always_sign || signing_enabled?)) || object.is_a?(String) + if ((object.respond_to?(:sign?) && object.sign?) && signer && (always_sign || signing_enabled?)) || bearcap ActivityPub::LinkedDataSignature.new(payload).sign!(signer, sign_with: sign_with) else payload diff --git a/spec/services/backup_service_spec.rb b/spec/services/backup_service_spec.rb index 806ba18323..f5ad319136 100644 --- a/spec/services/backup_service_spec.rb +++ b/spec/services/backup_service_spec.rb @@ -9,6 +9,8 @@ RSpec.describe BackupService, type: :service do let!(:attachment) { Fabricate(:media_attachment, account: user.account) } let!(:status) { Fabricate(:status, account: user.account, text: 'Hello', visibility: :public, media_attachments: [attachment]) } let!(:private_status) { Fabricate(:status, account: user.account, text: 'secret', visibility: :private) } + let!(:limited_status) { Fabricate(:status, account: user.account, text: 'sec mutual', visibility: :limited, limited_scope: :mutual) } + let!(:reblog_status) { Fabricate(:status, account: user.account, reblog_of_id: Fabricate(:status).id) } let!(:favourite) { Fabricate(:favourite, account: user.account) } let!(:bookmark) { Fabricate(:bookmark, account: user.account) } let!(:backup) { Fabricate(:backup, user: user) } @@ -60,10 +62,12 @@ RSpec.describe BackupService, type: :service do aggregate_failures do expect(json['@context']).to_not be_nil expect(json['type']).to eq 'OrderedCollection' - expect(json['totalItems']).to eq 2 + expect(json['totalItems']).to eq 4 expect(json['orderedItems'][0]['@context']).to be_nil expect(json['orderedItems'][0]).to include_create_item(status) expect(json['orderedItems'][1]).to include_create_item(private_status) + expect(json['orderedItems'][2]).to include_create_item(limited_status) + expect(json['orderedItems'][3]).to include_announce_item(reblog_status) end end @@ -98,4 +102,11 @@ RSpec.describe BackupService, type: :service do }), }) end + + def include_announce_item(status) + include({ + 'type' => 'Announce', + 'object' => ActivityPub::TagManager.instance.uri_for(status.reblog), + }) + end end