monitor bsky user button
This commit is contained in:
@@ -312,4 +312,112 @@ RSpec.describe Domain::UsersController, type: :controller do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "POST #monitor_bluesky_user" do
|
||||
let(:bluesky_user) { create(:domain_user_bluesky_user) }
|
||||
let(:composite_param) { "bsky@#{bluesky_user.handle}" }
|
||||
|
||||
before do
|
||||
# Sign in admin user for authentication
|
||||
sign_in admin_user
|
||||
|
||||
# Mock authorization to allow the action
|
||||
allow(controller).to receive(:authorize).and_return(true)
|
||||
|
||||
# Set @user instance variable as the controller does in find_user
|
||||
controller.instance_variable_set(:@user, bluesky_user)
|
||||
end
|
||||
|
||||
context "when monitoring succeeds" do
|
||||
it "creates a monitored object" do
|
||||
expect {
|
||||
post :monitor_bluesky_user, params: { id: composite_param }
|
||||
}.to change(Domain::Bluesky::MonitoredObject, :count).by(1)
|
||||
|
||||
monitor = Domain::Bluesky::MonitoredObject.last
|
||||
expect(monitor.value).to eq(bluesky_user.did)
|
||||
expect(monitor.kind).to eq("user_did")
|
||||
end
|
||||
|
||||
it "enqueues scan user job" do
|
||||
post :monitor_bluesky_user, params: { id: composite_param }
|
||||
|
||||
enqueued_jobs =
|
||||
SpecUtil.enqueued_job_args(Domain::Bluesky::Job::ScanUserJob)
|
||||
expect(enqueued_jobs).to contain_exactly(
|
||||
hash_including(user: bluesky_user),
|
||||
)
|
||||
end
|
||||
|
||||
it "enqueues scan posts job" do
|
||||
post :monitor_bluesky_user, params: { id: composite_param }
|
||||
|
||||
enqueued_jobs =
|
||||
SpecUtil.enqueued_job_args(Domain::Bluesky::Job::ScanPostsJob)
|
||||
expect(enqueued_jobs).to contain_exactly(
|
||||
hash_including(user: bluesky_user),
|
||||
)
|
||||
end
|
||||
|
||||
it "sets success flash message" do
|
||||
post :monitor_bluesky_user, params: { id: composite_param }
|
||||
expect(flash[:notice]).to eq("User is now being monitored")
|
||||
end
|
||||
|
||||
it "redirects to user page" do
|
||||
post :monitor_bluesky_user, params: { id: composite_param }
|
||||
expect(response).to redirect_to(domain_user_path(bluesky_user))
|
||||
end
|
||||
|
||||
it "authorizes the user" do
|
||||
expect(controller).to receive(:authorize).with(bluesky_user)
|
||||
post :monitor_bluesky_user, params: { id: composite_param }
|
||||
end
|
||||
end
|
||||
|
||||
context "when monitoring fails due to validation errors" do
|
||||
before do
|
||||
# Create existing monitor to trigger uniqueness validation failure
|
||||
Domain::Bluesky::MonitoredObject.create!(
|
||||
value: bluesky_user.did,
|
||||
kind: :user_did,
|
||||
)
|
||||
end
|
||||
|
||||
it "does not create a new monitored object" do
|
||||
expect {
|
||||
post :monitor_bluesky_user, params: { id: composite_param }
|
||||
}.not_to change(Domain::Bluesky::MonitoredObject, :count)
|
||||
end
|
||||
|
||||
it "fails to save the monitor due to uniqueness" do
|
||||
monitor = Domain::Bluesky::MonitoredObject.build_for_user(bluesky_user)
|
||||
expect(monitor.save).to be_falsey
|
||||
expect(monitor.errors[:value]).to include("has already been taken")
|
||||
end
|
||||
|
||||
it "does not enqueue any jobs" do
|
||||
SpecUtil.clear_enqueued_jobs!
|
||||
post :monitor_bluesky_user, params: { id: composite_param }
|
||||
expect(
|
||||
SpecUtil.enqueued_job_args(Domain::Bluesky::Job::ScanUserJob),
|
||||
).to be_empty
|
||||
expect(
|
||||
SpecUtil.enqueued_job_args(Domain::Bluesky::Job::ScanPostsJob),
|
||||
).to be_empty
|
||||
end
|
||||
|
||||
it "sets error flash message with validation errors" do
|
||||
post :monitor_bluesky_user, params: { id: composite_param }
|
||||
expect(flash[:alert]).to match(
|
||||
/Error monitoring user: .*has already been taken/,
|
||||
)
|
||||
end
|
||||
|
||||
it "redirects to user page" do
|
||||
post :monitor_bluesky_user, params: { id: composite_param }
|
||||
expect(response).to redirect_to(domain_user_path(bluesky_user))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user