From fe56d26f7b5bf6718bb5b8c28a7daaa45fd302ee Mon Sep 17 00:00:00 2001 From: "Renato \"Lond\" Cerqueira" Date: Fri, 31 Aug 2018 15:16:59 +0200 Subject: [PATCH] Fix autoplay issue with spoiler tag (#8540) Add tests to avoid similar issues in the future --- app/lib/formatter.rb | 2 +- .../stream_entries/_detailed_status.html.haml | 2 +- .../stream_entries/_simple_status.html.haml | 2 +- spec/lib/formatter_spec.rb | 23 +++++++++++++++++++ 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb index 0b4690394..8b694536c 100644 --- a/app/lib/formatter.rb +++ b/app/lib/formatter.rb @@ -61,7 +61,7 @@ class Formatter Sanitize.fragment(html, config) end - def format_spoiler(status) + def format_spoiler(status, **options) html = encode(status.spoiler_text) html = encode_custom_emojis(html, status.emojis, options[:autoplay]) html.html_safe # rubocop:disable Rails/OutputSafety diff --git a/app/views/stream_entries/_detailed_status.html.haml b/app/views/stream_entries/_detailed_status.html.haml index 6251cdd1a..bf5f614a1 100644 --- a/app/views/stream_entries/_detailed_status.html.haml +++ b/app/views/stream_entries/_detailed_status.html.haml @@ -17,7 +17,7 @@ .status__content.emojify< - if status.spoiler_text? %p{ style: 'margin-bottom: 0' }< - %span.p-summary> #{Formatter.instance.format_spoiler(status)}  + %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)}  %a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more') .e-content{ lang: status.language, style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay) diff --git a/app/views/stream_entries/_simple_status.html.haml b/app/views/stream_entries/_simple_status.html.haml index 1d596d4e0..e147596f6 100644 --- a/app/views/stream_entries/_simple_status.html.haml +++ b/app/views/stream_entries/_simple_status.html.haml @@ -20,7 +20,7 @@ .status__content.emojify< - if status.spoiler_text? %p{ style: 'margin-bottom: 0' }< - %span.p-summary> #{Formatter.instance.format_spoiler(status)}  + %span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)}  %a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more') .e-content{ lang: status.language, style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay) diff --git a/spec/lib/formatter_spec.rb b/spec/lib/formatter_spec.rb index d60d24bf6..0c2248cae 100644 --- a/spec/lib/formatter_spec.rb +++ b/spec/lib/formatter_spec.rb @@ -170,6 +170,29 @@ RSpec.describe Formatter do end end + + describe '#format_spoiler' do + subject { Formatter.instance.format_spoiler(status) } + + context 'given a post containing plain text' do + let(:status) { Fabricate(:status, text: 'text', spoiler_text: 'Secret!', uri: nil) } + + it 'Returns the spoiler text' do + is_expected.to eq 'Secret!' + end + end + + context 'given a post with an emoji shortcode at the start' do + let!(:emoji) { Fabricate(:custom_emoji) } + let(:status) { Fabricate(:status, text: 'text', spoiler_text: ':coolcat: Secret!', uri: nil) } + let(:text) { ':coolcat: Beep boop' } + + it 'converts the shortcode to an image tag' do + is_expected.to match(/