Add: Webでの引用表示 (#50)

* Add compacted component

* 引用表示の間にコンテナをはさみ、不要なコードを削除

* 引用APIを作成、ついでにブロック状況を引用APIに反映

* テスト修正など

* 引用をキャッシュに登録

* `quote_id`が`quote_of_id`になったのをSerializerに反映

* Fix test

* 引用をフィルターの対象に含める設定+エラー修正

* ストリーミングの存在しないプロパティ削除によるエラーを修正

* Fix lint

* 他のサーバーから来た引用付き投稿を処理

* Fix test

* フィルター設定時エラーの調整

* 画像つき投稿のスタイルを調整

* 画像つき投稿の最大高さを調整

* 引用禁止・非表示の設定を追加

* ブロック対応

* マイグレーションコード調整

* 引用設定の翻訳を作成

* Lint修正

* 参照1つの場合は引用に変換する設定を削除

* 不要になったテストを削除

* ブロック設定追加、バグ修正

* 他サーバーへ引用送信・受け入れ
This commit is contained in:
KMY(雪あすか) 2023-10-02 11:12:51 +09:00 committed by GitHub
parent 3c649aa74d
commit 44b739a39a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
53 changed files with 1362 additions and 120 deletions

View file

@ -217,6 +217,39 @@ RSpec.describe Status do
end
end
describe '#quote' do
let(:target_status) { Fabricate(:status) }
let(:quote) { true }
before do
Fabricate(:status_reference, status: subject, target_status: target_status, quote: quote)
end
context 'when quoting single' do
it 'get quote' do
expect(subject.quote).to_not be_nil
expect(subject.quote.id).to eq target_status.id
end
end
context 'when multiple quotes' do
it 'get quote' do
target2 = Fabricate(:status)
Fabricate(:status_reference, status: subject, quote: quote)
expect(subject.quote).to_not be_nil
expect([target_status.id, target2.id].include?(subject.quote.id)).to be true
end
end
context 'when no quote but reference' do
let(:quote) { false }
it 'get quote' do
expect(subject.quote).to be_nil
end
end
end
describe '#content' do
it 'returns the text of the status if it is not a reblog' do
expect(subject.content).to eql subject.text
@ -324,6 +357,38 @@ RSpec.describe Status do
end
end
describe '.blocks_map' do
subject { described_class.blocks_map([status.account.id], account) }
let(:status) { Fabricate(:status) }
let(:account) { Fabricate(:account) }
it 'returns a hash' do
expect(subject).to be_a Hash
end
it 'contains true value' do
account.block!(status.account)
expect(subject[status.account.id]).to be true
end
end
describe '.domain_blocks_map' do
subject { described_class.domain_blocks_map([status.account.domain], account) }
let(:status) { Fabricate(:status, account: Fabricate(:account, domain: 'foo.bar', uri: 'https://foo.bar/status')) }
let(:account) { Fabricate(:account) }
it 'returns a hash' do
expect(subject).to be_a Hash
end
it 'contains true value' do
account.block_domain!(status.account.domain)
expect(subject[status.account.domain]).to be true
end
end
describe '.favourites_map' do
subject { described_class.favourites_map([status], account) }