# frozen_string_literal: true

require 'rails_helper'

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

      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(<<-EOS.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" />
EOS
      end
    end
  end

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

      subject { user_twitter_card(user) }
      it 'should generate a matching OpenGraph structure for a user' do
        expect(subject).to eq(<<-EOS.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" />
EOS
      end
    end
  end

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

      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(<<-EOS.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" />
EOS
      end
    end
  end
end