]> cat aescling's git repositories - mastodon.git/commitdiff
Test embedded_view related code in a helper (#2282)
authorJoël Quenneville <joel.quen@gmail.com>
Sun, 23 Apr 2017 04:05:52 +0000 (00:05 -0400)
committerEugen <eugen@zeonfederated.com>
Sun, 23 Apr 2017 04:05:52 +0000 (06:05 +0200)
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.

app/helpers/stream_entries_helper.rb
spec/helpers/stream_entries_helper_spec.rb

index a1dfe2ecfd5f8f5c0bd5d136bcca57eda3b9957c..ba989a84d7142d8714113e06447914451a20300d 100644 (file)
@@ -1,6 +1,9 @@
 # frozen_string_literal: true
 
 module StreamEntriesHelper
+  EMBEDDED_CONTROLLER = 'stream_entries'.freeze
+  EMBEDDED_ACTION = 'embed'.freeze
+
   def display_name(account)
     account.display_name.presence || account.username
   end
@@ -10,7 +13,11 @@ module StreamEntriesHelper
   end
 
   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
 
   def style_classes(status, is_predecessor, is_successor, include_threads)
@@ -58,6 +65,6 @@ module StreamEntriesHelper
   end
 
   def embedded_view?
-    params[:controller] == 'stream_entries' && params[:action] == 'embed'
+    params[:controller] == EMBEDDED_CONTROLLER && params[:action] == EMBEDDED_ACTION
   end
 end
index a9e2d9c4beb03606de47dbf03af685f9fcf351e5..1ef49a3ab5b330b3512c5dbf8638ee53ad43e249 100644 (file)
@@ -15,6 +15,69 @@ RSpec.describe StreamEntriesHelper, type: :helper do
     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
     it do
       status = double(reblog?: false)