# 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 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 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 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 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