Add ActivityPub actor representing the entire server (#11321)
* Add support for an instance actor * Skip username validation for local Application accounts * Add migration script to create instance actor * Make Codeclimate happy * Switch to id -99 for instance actor * Remove unused `icon` and `image` attributes from instance actor * Use if/elsif/else instead of return + ternary operator * Add instance actor to fresh installs * Use instance actor as instance representative Use instance actor for forwarding reports, relay operations, and spam auto-reporting. * Seed database in test environment * Fix single-user mode * Fix tests * Fix specs to accomodate for an extra `Account` * Auto-reject follows on instance actor Following an instance actor might make sense, but we are not handling that right now, so auto-reject. * Fix webfinger lookup and serialization for instance actor * Rename instance actor * Make it clear in the HTML view that the instance actor should not be blocked * Raise cache time for instance actor as there's no dynamic content * Re-use /about/more with a flash message for instance actor profile
This commit is contained in:
parent
15c7478c55
commit
730c4053d6
23 changed files with 141 additions and 52 deletions
|
@ -450,7 +450,7 @@ RSpec.describe Account, type: :model do
|
|||
describe '.domains' do
|
||||
it 'returns domains' do
|
||||
Fabricate(:account, domain: 'domain')
|
||||
expect(Account.domains).to match_array(['domain'])
|
||||
expect(Account.remote.domains).to match_array(['domain'])
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -665,7 +665,7 @@ RSpec.describe Account, type: :model do
|
|||
{ username: 'b', domain: 'b' },
|
||||
].map(&method(:Fabricate).curry(2).call(:account))
|
||||
|
||||
expect(Account.alphabetic).to eq matches
|
||||
expect(Account.where('id > 0').alphabetic).to eq matches
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -732,7 +732,7 @@ RSpec.describe Account, type: :model do
|
|||
2.times { Fabricate(:account, domain: 'example.com') }
|
||||
Fabricate(:account, domain: 'example2.com')
|
||||
|
||||
results = Account.by_domain_accounts
|
||||
results = Account.where('id > 0').by_domain_accounts
|
||||
expect(results.length).to eq 2
|
||||
expect(results.first.domain).to eq 'example.com'
|
||||
expect(results.first.accounts_count).to eq 2
|
||||
|
@ -745,7 +745,7 @@ RSpec.describe Account, type: :model do
|
|||
it 'returns an array of accounts who do not have a domain' do
|
||||
account_1 = Fabricate(:account, domain: nil)
|
||||
account_2 = Fabricate(:account, domain: 'example.com')
|
||||
expect(Account.local).to match_array([account_1])
|
||||
expect(Account.where('id > 0').local).to match_array([account_1])
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -756,14 +756,14 @@ RSpec.describe Account, type: :model do
|
|||
matches[index] = Fabricate(:account, domain: matches[index])
|
||||
end
|
||||
|
||||
expect(Account.partitioned).to match_array(matches)
|
||||
expect(Account.where('id > 0').partitioned).to match_array(matches)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'recent' do
|
||||
it 'returns a relation of accounts sorted by recent creation' do
|
||||
matches = 2.times.map { Fabricate(:account) }
|
||||
expect(Account.recent).to match_array(matches)
|
||||
expect(Account.where('id > 0').recent).to match_array(matches)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ RSpec.describe FetchRemoteAccountService, type: :service do
|
|||
let(:url) { 'https://example.com/alice' }
|
||||
let(:prefetched_body) { nil }
|
||||
let(:protocol) { :ostatus }
|
||||
let!(:representative) { Fabricate(:account) }
|
||||
|
||||
subject { FetchRemoteAccountService.new.call(url, prefetched_body, protocol) }
|
||||
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe FetchResourceService, type: :service do
|
||||
let!(:representative) { Fabricate(:account) }
|
||||
|
||||
describe '#call' do
|
||||
let(:url) { 'http://example.com' }
|
||||
|
||||
|
@ -60,7 +58,7 @@ RSpec.describe FetchResourceService, type: :service do
|
|||
|
||||
it 'signs request' do
|
||||
subject
|
||||
expect(a_request(:get, url).with(headers: { 'Signature' => /keyId="#{Regexp.escape(ActivityPub::TagManager.instance.uri_for(representative) + '#main-key')}"/ })).to have_been_made
|
||||
expect(a_request(:get, url).with(headers: { 'Signature' => /keyId="#{Regexp.escape(ActivityPub::TagManager.instance.uri_for(Account.representative) + '#main-key')}"/ })).to have_been_made
|
||||
end
|
||||
|
||||
context 'when content type is application/atom+xml' do
|
||||
|
|
|
@ -27,6 +27,7 @@ RSpec.configure do |config|
|
|||
end
|
||||
|
||||
config.before :suite do
|
||||
Rails.application.load_seed
|
||||
Chewy.strategy(:bypass)
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue