Merge pull request #843 from kmycode/kb-draft-5.24-lts

Release: 5.24
This commit is contained in:
KMY(雪あすか) 2024-09-10 12:29:28 +09:00 committed by GitHub
commit 3c851f2d21
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 40 additions and 14 deletions

View file

@ -507,15 +507,15 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end end
def searchability_from_audience def searchability_from_audience
if audience_searchable_by.nil? return nil if audience_searchable_by.blank?
nil
elsif audience_searchable_by.any? { |uri| ActivityPub::TagManager.instance.public_collection?(uri) } if audience_searchable_by.any? { |uri| ActivityPub::TagManager.instance.public_collection?(uri) }
:public :public
elsif audience_searchable_by.include?('kmyblue:Limited') || audience_searchable_by.include?('as:Limited') elsif audience_searchable_by.include?('kmyblue:Limited') || audience_searchable_by.include?('as:Limited')
:limited :limited
elsif audience_searchable_by.include?(@account.followers_url) elsif audience_searchable_by.include?(@account.followers_url)
:private :private
else elsif audience_searchable_by.include?(@account.uri) || audience_searchable_by.include?(@account.url)
:direct :direct
end end
end end

View file

@ -237,12 +237,10 @@ class ActivityPub::TagManager
[COLLECTIONS[:public]] [COLLECTIONS[:public]]
when 'private' when 'private'
[account_followers_url(status.account)] [account_followers_url(status.account)]
when 'direct'
status.conversation_id.present? ? [uri_for(status.conversation)] : []
when 'limited' when 'limited'
['as:Limited', 'kmyblue:Limited'] ['as:Limited', 'kmyblue:Limited']
else else
[] status.conversation_id.present? ? [uri_for(status.conversation), account_url(status.account)] : [account_url(status.account)]
end end
searchable_by.concat(mentions_uris(status)).compact searchable_by.concat(mentions_uris(status)).compact
@ -257,7 +255,7 @@ class ActivityPub::TagManager
when 'limited' when 'limited'
['as:Limited', 'kmyblue:Limited'] ['as:Limited', 'kmyblue:Limited']
else else
[] [account_url(account)]
end end
end end

View file

@ -267,7 +267,7 @@ class ActivityPub::ProcessAccountService < BaseService
end end
def searchability_from_audience def searchability_from_audience
if audience_searchable_by.nil? if audience_searchable_by.blank?
bio = searchability_from_bio bio = searchability_from_bio
return bio unless bio.nil? return bio unless bio.nil?

View file

@ -9,7 +9,7 @@ module Mastodon
end end
def kmyblue_minor def kmyblue_minor
23 24
end end
def kmyblue_flag def kmyblue_flag

View file

@ -564,7 +564,7 @@ RSpec.describe ActivityPub::Activity::Create do
end end
context 'with direct' do context 'with direct' do
let(:searchable_by) { '' } let(:searchable_by) { 'https://example.com/actor' }
it 'create status' do it 'create status' do
status = sender.statuses.first status = sender.statuses.first
@ -574,6 +574,17 @@ RSpec.describe ActivityPub::Activity::Create do
end end
end end
context 'with empty array' do
let(:searchable_by) { '' }
it 'create status' do
status = sender.statuses.first
expect(status).to_not be_nil
expect(status.searchability).to be_nil
end
end
context 'with direct when not specify' do context 'with direct when not specify' do
let(:searchable_by) { nil } let(:searchable_by) { nil }

View file

@ -5,9 +5,9 @@ require 'rails_helper'
describe ActivityPub::NoteSerializer do describe ActivityPub::NoteSerializer do
subject { JSON.parse(@serialization.to_json) } subject { JSON.parse(@serialization.to_json) }
let!(:account) { Fabricate(:account) } let!(:account) { Fabricate(:account, searchability: :public) }
let!(:other) { Fabricate(:account) } let!(:other) { Fabricate(:account) }
let!(:parent) { Fabricate(:status, account: account, visibility: :public, language: 'zh-TW') } let!(:parent) { Fabricate(:status, account: account, visibility: :public, searchability: searchability, language: 'zh-TW') }
let!(:reply_by_account_first) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_account_first) { Fabricate(:status, account: account, thread: parent, visibility: :public) }
let!(:reply_by_account_next) { Fabricate(:status, account: account, thread: parent, visibility: :public) } let!(:reply_by_account_next) { Fabricate(:status, account: account, thread: parent, visibility: :public) }
let!(:reply_by_other_first) { Fabricate(:status, account: other, thread: parent, visibility: :public) } let!(:reply_by_other_first) { Fabricate(:status, account: other, thread: parent, visibility: :public) }
@ -16,6 +16,7 @@ describe ActivityPub::NoteSerializer do
let!(:referred) { nil } let!(:referred) { nil }
let!(:referred2) { nil } let!(:referred2) { nil }
let(:convert_to_quote) { false } let(:convert_to_quote) { false }
let(:searchability) { :public }
before(:each) do before(:each) do
parent.references << referred if referred.present? parent.references << referred if referred.present?
@ -55,6 +56,14 @@ describe ActivityPub::NoteSerializer do
expect(subject['replies']['first']['items']).to_not include(reply_by_account_visibility_direct.uri) expect(subject['replies']['first']['items']).to_not include(reply_by_account_visibility_direct.uri)
end end
context 'when direct searchability' do
let(:searchability) { :direct }
it 'send as direct searchability' do
expect(subject['searchableBy']).to include "https://cb6e6126.ngrok.io/users/#{account.username}"
end
end
context 'when has quote but no_convert setting' do context 'when has quote but no_convert setting' do
let(:referred) { Fabricate(:status) } let(:referred) { Fabricate(:status) }

View file

@ -49,7 +49,7 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do
end end
context 'when direct' do context 'when direct' do
let(:searchable_by) { '' } let(:searchable_by) { 'https://foo.test' }
it 'searchability is direct' do it 'searchability is direct' do
expect(subject.searchability).to eq 'direct' expect(subject.searchability).to eq 'direct'
@ -72,6 +72,14 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do
end end
end end
context 'when empty array' do
let(:searchable_by) { '' }
it 'searchability is direct' do
expect(subject.searchability).to eq 'direct'
end
end
context 'when default value' do context 'when default value' do
let(:searchable_by) { nil } let(:searchable_by) { nil }