# frozen_string_literal: true

require "rails_helper"

describe UseCase::Question::CreateFollowers do
  subject do
    UseCase::Question::CreateFollowers.call(
      source_user_id:    source_user.id,
      content:,
      author_identifier:,
    )
  end

  context "user is logged in" do
    before do
      followers.each do |target_user|
        target_user.follow source_user
      end
    end

    let(:source_user) { create(:user) }
    let(:followers) { create_list(:user, 5) }
    let(:content) { "content" }
    let(:author_identifier) { nil }

    it "creates question" do
      expect(subject[:resource]).to be_persisted
    end

    it "enqueues a QuestionWorker job" do
      followers.each do |target_user|
        expect(SendToInboxJob).to have_enqueued_sidekiq_job(target_user.id, subject[:resource].id)
      end
    end

    it "increments the asked count" do
      expect { subject }.to change { source_user.reload.asked_count }.by(1)
    end

    context "content is over 32768 characters long" do
      let(:content) { "a" * 32769 }

      it "raises an error" do
        expect { subject }.to raise_error(Errors::QuestionTooLong)
      end
    end
  end
end