# frozen_string_literal: true require "rails_helper" require "errors" require "use_case/question/destroy" describe UseCase::Question::Destroy do subject do UseCase::Question::Destroy.call( question_id: question.id, current_user: current_user ) end shared_examples "deletes the question" do it "deletes the question" do expect { subject }.to change { Question.count }.by(-1) end end context "question exists" do let!(:question) { FactoryBot.create(:question, user: question_owner) } context "user owns question" do let(:question_owner) { FactoryBot.create(:user) } let(:current_user) { question_owner } it_behaves_like "deletes the question" end context "user is a moderator" do let(:question_owner) { FactoryBot.create(:user) } let(:current_user) { FactoryBot.create(:user, roles: [:moderator]) } it_behaves_like "deletes the question" end context "user does not own question" do let(:question_owner) { FactoryBot.create(:user) } let(:current_user) { FactoryBot.create(:user) } it "raises an error" do expect { subject }.to raise_error(Errors::Forbidden) end end end end