Retrospring/spec/helpers/social_helper/twitter_methods_spec.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

86 lines
2.7 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require "rails_helper"
describe SocialHelper::TwitterMethods, type: :helper do
let(:user) { FactoryBot.create(:user) }
let(:question_content) { "q" * 255 }
let(:answer_content) { "a" * 255 }
let(:answer) do
FactoryBot.create(:answer, user:,
content: answer_content,
question_content:,)
end
before do
stub_const("APP_CONFIG", {
"hostname" => "example.com",
"https" => true,
"items_per_page" => 5,
},)
end
describe "#prepare_tweet" do
context "when the question and answer need to be shortened" do
subject { prepare_tweet(answer) }
it "should return a properly formatted tweet" do
2022-07-22 14:20:21 -07:00
expect(subject).to eq("#{'q' * 123}… — #{'a' * 124}… https://example.com/@#{user.screen_name}/a/#{answer.id}")
end
end
context "when a suffix has been passed" do
let(:question_content) { "question" }
let(:answer_content) { "answer" }
subject { prepare_tweet(answer, "#askracc") }
it "should include the suffix after the link" do
2022-07-22 14:20:21 -07:00
expect(subject).to eq("question — answer #askracc https://example.com/@#{user.screen_name}/a/#{answer.id}")
end
end
context "when the url should be omitted" do
let(:question_content) { "question" }
let(:answer_content) { "answer" }
subject { prepare_tweet(answer, nil, true) }
it "should include the suffix after the link" do
expect(subject).to eq("question — answer")
end
end
context "when a suffix has been passed and the tweet needs to be shortened" do
subject { prepare_tweet(answer, "#askracc") }
it "should shorten the tweet while keeping the suffix intact" do
2022-07-22 14:20:21 -07:00
expect(subject).to eq("#{'q' * 120}… — #{'a' * 120}#askracc https://example.com/@#{user.screen_name}/a/#{answer.id}")
end
end
context "when the question and answer are short" do
before do
answer.question.content = "Why are raccoons so good?"
answer.question.save!
answer.content = "Because they are good cunes."
answer.save!
end
subject { prepare_tweet(answer) }
it "should return a properly formatted tweet" do
2022-07-22 14:20:21 -07:00
expect(subject).to eq("#{answer.question.content}#{answer.content} https://example.com/@#{user.screen_name}/a/#{answer.id}")
end
end
end
describe "#twitter_share_url" do
subject { twitter_share_url(answer) }
it "should return a proper share link" do
expect(subject).to eq("https://twitter.com/intent/tweet?text=#{CGI.escape(prepare_tweet(answer))}")
end
end
end