Test embedded_view related code in a helper (#2282)

The two methods `StreamEntriesHelper#stream_link_target` and
`StreamEntriesHelper#acct` are based on checking whether we are running
in an embedded view.

This adds some test helper code to make the testing easier. We extracted
some "magic strings" to constants to lower the coupling in the specs.
This commit is contained in:
Joël Quenneville 2017-04-23 00:05:52 -04:00 committed by Eugen
parent 0c2fe22bc1
commit 1cf9e14a41
2 changed files with 72 additions and 2 deletions

View file

@ -1,6 +1,9 @@
# frozen_string_literal: true # frozen_string_literal: true
module StreamEntriesHelper module StreamEntriesHelper
EMBEDDED_CONTROLLER = 'stream_entries'.freeze
EMBEDDED_ACTION = 'embed'.freeze
def display_name(account) def display_name(account)
account.display_name.presence || account.username account.display_name.presence || account.username
end end
@ -10,7 +13,11 @@ module StreamEntriesHelper
end end
def acct(account) def acct(account)
"@#{account.acct}#{embedded_view? && account.local? ? "@#{Rails.configuration.x.local_domain}" : ''}" if embedded_view? && account.local?
"@#{account.acct}@#{Rails.configuration.x.local_domain}"
else
"@#{account.acct}"
end
end end
def style_classes(status, is_predecessor, is_successor, include_threads) def style_classes(status, is_predecessor, is_successor, include_threads)
@ -58,6 +65,6 @@ module StreamEntriesHelper
end end
def embedded_view? def embedded_view?
params[:controller] == 'stream_entries' && params[:action] == 'embed' params[:controller] == EMBEDDED_CONTROLLER && params[:action] == EMBEDDED_ACTION
end end
end end

View file

@ -15,6 +15,69 @@ RSpec.describe StreamEntriesHelper, type: :helper do
end end
end end
describe '#stream_link_target' do
it 'returns nil if it is not an embedded view' do
set_not_embedded_view
expect(helper.stream_link_target).to be_nil
end
it 'returns _blank if it is an embedded view' do
set_embedded_view
expect(helper.stream_link_target).to eq '_blank'
end
end
describe '#acct' do
it 'is fully qualified for embedded local accounts' do
allow(Rails.configuration.x).to receive(:local_domain).and_return('local_domain')
set_embedded_view
account = Account.new(domain: nil, username: 'user')
acct = helper.acct(account)
expect(acct).to eq '@user@local_domain'
end
it 'is fully qualified for embedded foreign accounts' do
set_embedded_view
account = Account.new(domain: 'foreign_server.com', username: 'user')
acct = helper.acct(account)
expect(acct).to eq '@user@foreign_server.com'
end
it 'is fully qualified for non embedded foreign accounts' do
set_not_embedded_view
account = Account.new(domain: 'foreign_server.com', username: 'user')
acct = helper.acct(account)
expect(acct).to eq '@user@foreign_server.com'
end
it 'is the shortname for non embedded local accounts' do
set_not_embedded_view
account = Account.new(domain: nil, username: 'user')
acct = helper.acct(account)
expect(acct).to eq '@user'
end
end
def set_not_embedded_view
params[:controller] = "not_#{StreamEntriesHelper::EMBEDDED_CONTROLLER}"
params[:action] = "not_#{StreamEntriesHelper::EMBEDDED_ACTION}"
end
def set_embedded_view
params[:controller] = StreamEntriesHelper::EMBEDDED_CONTROLLER
params[:action] = StreamEntriesHelper::EMBEDDED_ACTION
end
describe '#style_classes' do describe '#style_classes' do
it do it do
status = double(reblog?: false) status = double(reblog?: false)