61 lines
1.7 KiB
Ruby
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
|