docbrown/spec/models/mention_spec.rb
2024-02-22 17:29:10 +00:00

61 lines
1.7 KiB
Ruby

require "rails_helper"
RSpec.describe Mention do
describe ".create_all" do
let(:comment) { create(:comment, commentable: create(:podcast_episode)) }
it "enqueues a job to default queue" do
expect do
described_class.create_all(comment)
end.to change(Mentions::CreateAllWorker.jobs, :size).by(1)
end
end
describe "validations" do
it { is_expected.to validate_presence_of(:mentionable_type) }
context "when validating uniqueness of user_id" do
let(:user) { create(:user) }
let(:mention) { create(:mention, user: user) }
it "is scoped to mentionable_id and mentionable_type" do
duplicate_mention = build(:mention, user: user, mentionable: mention.mentionable)
expect(duplicate_mention).not_to be_valid
end
it "allows the same user_id for different mentionable_id and mentionable_type" do
other_mention = build(:mention, user: user)
expect(other_mention).to be_valid
end
end
context "when mentionable is invalid" do
let(:comment) { build(:comment, commentable: nil) }
it "is invalid" do
mention = build(:mention, mentionable: comment)
expect(mention).not_to be_valid
end
end
end
describe "associations" do
it { is_expected.to belong_to(:user) }
it { is_expected.to belong_to(:mentionable) }
end
describe "callbacks" do
let(:mention) { build(:mention) }
it "enqueues SendEmailNotificationWorker after create" do
allow(Mentions::SendEmailNotificationWorker).to receive(:perform_async)
mention.save
expect(Mentions::SendEmailNotificationWorker).to have_received(:perform_async).with(mention.id)
end
end
end