diff --git a/spec/lib/use_case/reaction/create_spec.rb b/spec/lib/use_case/reaction/create_spec.rb new file mode 100644 index 00000000..a438f108 --- /dev/null +++ b/spec/lib/use_case/reaction/create_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require "rails_helper" + +describe UseCase::Reaction::Create do + shared_examples_for "valid target type" do + it "creates a reaction" do + expect { subject }.to change { target.smile_count }.by(1) + end + end + + subject { UseCase::Reaction::Create.call(source_user: user, target:) } + + let(:user) { FactoryBot.create(:user) } + + context "target is an Answer" do + let(:target) { FactoryBot.create(:answer, user:) } + + include_examples "valid target type" + end + + context "target is a Comment" do + let(:target) { FactoryBot.create(:comment, user:, answer: FactoryBot.create(:answer, user:)) } + + include_examples "valid target type" + end + + context "target is a Question" do + let(:target) { FactoryBot.create(:question) } + + include_examples "raises an error", Dry::Types::ConstraintError + end +end diff --git a/spec/lib/use_case/reaction/destroy_spec.rb b/spec/lib/use_case/reaction/destroy_spec.rb new file mode 100644 index 00000000..44c0e9a2 --- /dev/null +++ b/spec/lib/use_case/reaction/destroy_spec.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require "rails_helper" + +describe UseCase::Reaction::Destroy do + shared_examples_for "valid target type" do + before do + user.smile target + end + + it "destroys a reaction" do + expect { subject }.to change { target.smile_count }.by(-1) + end + end + + subject { UseCase::Reaction::Destroy.call(source_user: user, target:) } + + let(:user) { FactoryBot.create(:user) } + + context "target is an Answer" do + let(:target) { FactoryBot.create(:answer, user:) } + + include_examples "valid target type" + end + + context "target is a Comment" do + let(:target) { FactoryBot.create(:comment, user:, answer: FactoryBot.create(:answer, user:)) } + + include_examples "valid target type" + end +end