spec/integration/contacts_spec.rb
# frozen_string_literal: true

describe ContactsController, type: :request do
  describe "/contacts" do
    context "user is signed in" do
      before do
        sign_in user
      end

      shared_examples_for "community spotlight information is not present on the page" do
        it "does not display a community spotlight link" do
          get "/contacts"

          expect(response.status).to eq(200)
          expect(response.body).to_not match(/a href="#{community_spotlight_path}"/)
        end
      end

      context "user has no contacts" do
        let!(:user) { FactoryBot.create(:user) }

        before do
          expect(user.contacts.size).to eq(0)
        end

        context "community spotlight is enabled" do
          before do
            AppConfig.settings.community_spotlight.enable = true
          end

          it "displays a community spotlight link" do
            get "/contacts"

            expect(response.status).to eq(200)
            expect(response.body).to match(/a href="#{community_spotlight_path}"/)
          end
        end

        context "community spotlight is disabled" do
          before do
            AppConfig.settings.community_spotlight.enable = false
          end

          it_behaves_like "community spotlight information is not present on the page"
        end
      end

      context "user has contacts" do
        let!(:user) { FactoryBot.create(:user) }

        before do
          FactoryBot.create(:contact, person: alice.person, user: user)
          FactoryBot.create(:contact, person: bob.person, user: user)
          expect(user.reload.contacts.size).to eq(2)
        end

        context "community spotlight is enabled" do
          before do
            AppConfig.settings.community_spotlight.enable = true
          end

          it_behaves_like "community spotlight information is not present on the page"
        end

        context "community spotlight is disabled" do
          before do
            AppConfig.settings.community_spotlight.enable = false
          end

          it_behaves_like "community spotlight information is not present on the page"
        end
      end
    end
  end
end
