# frozen_string_literal: true

require "rails_helper"

describe ApplicationHelper::GraphMethods, type: :helper do
  describe "#user_opengraph" do
    context "sample user" do
      let(:user) do
        FactoryBot.create(:user,
                          profile:     { display_name: "Cunes",
                                         description:  "A bunch of raccoons in a trenchcoat.", },
                          screen_name: "raccoons",)
      end

      subject { user_opengraph(user) }

      it "should generate a matching OpenGraph structure for a user" do
        allow(APP_CONFIG).to receive(:[]).with("site_name").and_return("pineapplespring")
        expect(subject).to eq(<<~META.chomp)
          <meta property="og:title" content="Cunes">
          <meta property="og:type" content="profile">
          <meta property="og:image" content="http://test.host/images/large/no_avatar.png">
          <meta property="og:url" content="http://test.host/@raccoons">
          <meta property="og:description" content="A bunch of raccoons in a trenchcoat.">
          <meta property="og:site_name" content="pineapplespring">
          <meta property="profile:username" content="raccoons">
        META
      end
    end
  end

  describe "#user_twitter_card" do
    context "sample user" do
      let(:user) do
        FactoryBot.create(:user,
                          profile:     {
                            display_name: "",
                            description:  "A bunch of raccoons in a trenchcoat.",
                          },
                          screen_name: "raccoons",)
      end

      subject { user_twitter_card(user) }
      it "should generate a matching OpenGraph structure for a user" do
        expect(subject).to eq(<<~META.chomp)
          <meta name="twitter:card" content="summary">
          <meta name="twitter:site" content="@retrospring">
          <meta name="twitter:title" content="Ask me anything!">
          <meta name="twitter:description" content="Ask raccoons anything on Retrospring">
          <meta name="twitter:image" content="http://test.host/images/large/no_avatar.png">
        META
      end
    end
  end

  describe "#answer_opengraph" do
    context "sample user and answer" do
      let!(:user) do
        FactoryBot.create(:user,
                          profile:     {
                            display_name: "",
                            description:  "A bunch of raccoons in a trenchcoat.",
                          },
                          screen_name: "raccoons",)
      end
      let(:answer) do
        FactoryBot.create(:answer,
                          user_id: user.id,)
      end

      subject { answer_opengraph(answer) }

      it "should generate a matching OpenGraph structure for a user" do
        allow(APP_CONFIG).to receive(:[]).with("site_name").and_return("pineapplespring")
        expect(subject).to eq(<<~META.chomp)
          <meta property="og:title" content="raccoons answered: #{answer.question.content}">
          <meta property="og:type" content="article">
          <meta property="og:image" content="http://test.host/images/large/no_avatar.png">
          <meta property="og:url" content="http://test.host/@raccoons/a/#{answer.id}">
          <meta property="og:description" content="#{answer.content}">
          <meta property="og:site_name" content="pineapplespring">
        META
      end
    end
  end
end