Retrospring/spec/workers/question_worker_spec.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

113 lines
2.9 KiB
Ruby
Raw Normal View History

2020-05-25 09:33:09 -07:00
# frozen_string_literal: true
require "rails_helper"
describe QuestionWorker do
describe "#perform" do
let(:user) { FactoryBot.create(:user) }
let(:user_id) { user.id }
let(:content) { Faker::Lorem.sentence }
let(:question) { FactoryBot.create(:question, content:, user:) }
2020-05-25 09:33:09 -07:00
let(:question_id) { question.id }
before do
5.times do
other_user = FactoryBot.create(:user)
other_user.follow(user)
end
end
subject { described_class.new.perform(user_id, question_id) }
it "places the question in the inbox of the user's followers" do
expect { subject }
.to(
change { InboxEntry.where(user_id: user.followers.ids, question_id:, new: true).count }
2020-05-25 09:33:09 -07:00
.from(0)
.to(5)
)
end
2021-12-22 10:21:09 -08:00
it "respects mute rules" do
question.content = "Some spicy question text"
2021-12-22 10:21:09 -08:00
question.save
MuteRule.create(user_id: user.followers.first.id, muted_phrase: "spicy")
2021-12-22 10:21:09 -08:00
expect { subject }
.to(
change { InboxEntry.where(user_id: user.followers.ids, question_id:, new: true).count }
2021-12-22 10:21:09 -08:00
.from(0)
.to(4)
)
end
2022-11-06 06:02:12 -08:00
it "respects inbox locks" do
user.followers.first.update(privacy_lock_inbox: true)
expect { subject }
.to(
change { InboxEntry.where(user_id: user.followers.ids, question_id:, new: true).count }
.from(0)
.to(4)
)
end
it "does not send questions to banned users" do
user.followers.first.ban
2022-11-06 06:02:12 -08:00
expect { subject }
.to(
change { InboxEntry.where(user_id: user.followers.ids, question_id:, new: true).count }
2022-11-06 06:02:12 -08:00
.from(0)
.to(4)
)
end
context "receiver has push notifications enabled" do
let(:receiver) { FactoryBot.create(:user) }
before do
Rpush::Webpush::App.create(
name: "webpush",
certificate: { public_key: "AAAA", private_key: "AAAA", subject: "" }.to_json,
2022-12-26 01:59:56 -08:00
connections: 1
)
WebPushSubscription.create!(
user: receiver,
subscription: {
endpoint: "This will not be used",
keys: {},
2022-12-26 01:59:56 -08:00
}
)
receiver.follow(user)
end
it "sends notifications" do
expect { subject }
.to(
change { Rpush::Webpush::Notification.count }
.from(0)
.to(1)
)
end
end
context "long question" do
let(:content) { "x" * 1000 }
it "sends to recipients who allow long questions" do
user.followers.first.profile.update(allow_long_questions: true)
expect { subject }
.to(
change { InboxEntry.where(user_id: user.followers.ids, question_id:, new: true).count }
.from(0)
.to(1)
)
end
end
2020-05-25 09:33:09 -07:00
end
end