# frozen_string_literal: true

require "rails_helper"

describe Subscription do
  describe "singleton object" do
    describe "#notify" do
      subject { Subscription.notify(source, target) }

      context "answer with one comment" do
        let(:answer_author) { FactoryBot.create(:user) }
        let(:answer) { FactoryBot.create(:answer, user: answer_author) }
        let(:commenter) { FactoryBot.create(:user) }
        let!(:comment) { FactoryBot.create(:comment, answer:, user: commenter) }
        let(:source) { comment }
        let(:target) { answer }

        it "notifies the target about source" do
          # The method we're testing here is already called the +after_create+ of +Comment+ so there already is a notification
          expect { subject }.to change { Notification.count }.from(1).to(2)
          created = Notification.order(:created_at).first!
          expect(created.target).to eq(comment)
          expect(created.recipient).to eq(answer_author)
        end
      end
    end
  end
end