From a4240fd0272eb79b7d99cccfa7d14e8a1e12921d Mon Sep 17 00:00:00 2001 From: ThibG Date: Sun, 10 May 2020 09:50:54 +0200 Subject: Improve RSS entries for statuses (#13592) * Improve RSS entries for statuses - Render polls in both accounts and tags serializers - Refactor RSS serializers - Change title preview to include ellipsis when truncated - Change title preview to show CW instead of toot text - Add tests * Remove title from OEmbed serialization Twitter doesn't serialize title either, and tihs allows us to move the title formatting code to the RSS serializers. --- spec/lib/rss/serializer_spec.rb | 63 +++++++++++++++++++++++++++++++++++++++++ spec/models/status_spec.rb | 29 ------------------- 2 files changed, 63 insertions(+), 29 deletions(-) create mode 100644 spec/lib/rss/serializer_spec.rb (limited to 'spec') diff --git a/spec/lib/rss/serializer_spec.rb b/spec/lib/rss/serializer_spec.rb new file mode 100644 index 000000000..0364d13de --- /dev/null +++ b/spec/lib/rss/serializer_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe RSS::Serializer do + describe '#status_title' do + let(:text) { 'This is a toot' } + let(:spoiler) { '' } + let(:sensitive) { false } + let(:reblog) { nil } + let(:account) { Fabricate(:account) } + let(:status) { Fabricate(:status, account: account, text: text, spoiler_text: spoiler, sensitive: sensitive, reblog: reblog) } + + subject { RSS::Serializer.new.send(:status_title, status) } + + context 'if destroyed?' do + it 'returns "#{account.acct} deleted status"' do + status.destroy! + expect(subject).to eq "#{account.acct} deleted status" + end + end + + context 'on a toot with long text' do + let(:text) { "This toot's text is longer than the allowed number of characters" } + + it 'truncates toot text appropriately' do + expect(subject).to eq "#{account.acct}: “This toot's text is longer tha…”" + end + end + + context 'on a toot with long text with a newline' do + let(:text) { "This toot's text is longer\nthan the allowed number of characters" } + + it 'truncates toot text appropriately' do + expect(subject).to eq "#{account.acct}: “This toot's text is longer…”" + end + end + + context 'on a toot with a content warning' do + let(:spoiler) { 'long toot' } + + it 'displays spoiler text instead of toot content' do + expect(subject).to eq "#{account.acct}: CW “long toot”" + end + end + + context 'on a toot with sensitive media' do + let(:sensitive) { true } + + it 'displays that the media is sensitive' do + expect(subject).to eq "#{account.acct}: “This is a toot” (sensitive)" + end + end + + context 'on a reblog' do + let(:reblog) { Fabricate(:status, text: 'This is a toot') } + + it 'display that the toot is a reblog' do + expect(subject).to eq "#{account.acct} boosted #{reblog.account.acct}: “This is a toot”" + end + end + end +end diff --git a/spec/models/status_spec.rb b/spec/models/status_spec.rb index 51a10cd17..9c1eca1b5 100644 --- a/spec/models/status_spec.rb +++ b/spec/models/status_spec.rb @@ -82,35 +82,6 @@ RSpec.describe Status, type: :model do end end - describe '#title' do - # rubocop:disable Style/InterpolationCheck - - let(:account) { subject.account } - - context 'if destroyed?' do - it 'returns "#{account.acct} deleted status"' do - subject.destroy! - expect(subject.title).to eq "#{account.acct} deleted status" - end - end - - context 'unless destroyed?' do - context 'if reblog?' do - it 'returns "#{account.acct} shared a status by #{reblog.account.acct}"' do - reblog = subject.reblog = other - expect(subject.title).to eq "#{account.acct} shared a status by #{reblog.account.acct}" - end - end - - context 'unless reblog?' do - it 'returns "New status by #{account.acct}"' do - subject.reblog = nil - expect(subject.title).to eq "New status by #{account.acct}" - end - end - end - end - describe '#hidden?' do context 'if private_visibility?' do it 'returns true' do -- cgit