require 'rails_helper'

describe ClicksController do
  context 'create' do
    context 'missing params' do
      it 'raises a 404 without a url' do
        get "/clicks/track", params: { post_id: 123 }
        expect(response).to be_not_found
      end
    end

    context 'correct params' do
      let(:url) { "https://discourse.org/" }
      let(:headers) { { REMOTE_ADDR: "192.168.0.1" } }
      let(:post) { create_post(raw: "this is a post with a link #{url}") }

      context "with a made up url" do
        it "doesn't redirect" do
          get "/clicks/track", params: { url: 'https://fakewebsite.com', post_id: post.id }, headers: headers
          expect(response).not_to be_redirect
          expect(response.body).to include(I18n.t("redirect_warning"))
        end
      end

      context "with a valid url" do
        it "redirects" do
          get "/clicks/track", params: { url: 'https://discourse.org/?hello=123', post_id: post.id }, headers: headers
          expect(response).to redirect_to("https://discourse.org/?hello=123")
        end
      end

      context 'with a post_id' do
        it 'redirects' do
          get "/clicks/track", params: { url: url, post_id: post.id }, headers: headers
          expect(response).to redirect_to(url)
        end

        it "redirects links in whispers to staff members" do
          sign_in(Fabricate(:admin))
          whisper = Fabricate(:post, post_type: Post.types[:whisper])

          get "/clicks/track", params: { url: url, post_id: whisper.id }, headers: headers

          expect(response).to redirect_to(url)
        end

        it "doesn't redirect with the redirect=false param" do
          get "/clicks/track", params: { url: url, post_id: post.id, redirect: 'false' }, headers: headers
          expect(response).not_to be_redirect
        end
      end

      context 'with a topic_id' do
        it 'redirects' do
          get "/clicks/track", params: { url: url, topic_id: post.topic.id }, headers: headers
          expect(response).to redirect_to(url)
        end
      end
    end
  end
end