My sidekiq gui needs to authenticate a user for admin rights before allowing access.
Is there a way to password protect and test the sidekiq gui controller directly? Instead of a feature test and instead of needing redis or mock redis?
Routes
if Rails.env.development?
mount Sidekiq::Web, at: :sidekiq
else
# https://stackoverflow.com/questions/12265421/how-can-i-password-protect-my-sidekiq-route-i-e-require-authentication-for-th
authenticate :user, ->(u) { u.admin? } do
mount Sidekiq::Web => "/sidekiq"
end
end
RSPEC
# frozen_string_literal: true
require "rails_helper"
RSpec.describe "Sidekiq::Web", type: :feature do
context "with admin user" do
let(:user) { create(:user, :admin) }
before { sign_in(user) }
specify "can able to access sidekiq GUI" do
visit sidekiq_web_path
within "div#navbar-menu" do
expect(page).to have_link("Dashboard")
end
end
end
context "with normal user" do
let(:user) { create(:user) }
before { sign_in(user) }
it "can not able to access sidekiq GUI" do
expect {
visit(sidekiq_web_path)
expect(page).to have_link("Dashboard")
}.to raise_error(ActionController::RoutingError)
end
end
end
Test Results:
Failures:
1) Sidekiq::Web with admin user can able to access sidekiq GUI
Failure/Error: raise CannotConnectError, "Error connecting to Redis on #{location} (#{error.class})"
Redis::CannotConnectError:
Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED)
# /app/vendor/bundle/ruby/2.7.0/gems/redis-4.2.2/lib/redis/client.rb:362:in `rescue in establish_connection'
# /app/vendor/bundle/ruby/2.7.0/gems/redis-4.2.2/lib/redis/client.rb:343:in `establish_connection'
# /app/vendor/bundle/ruby/2.7.0/gems/redis-4.2.2/lib/redis/client.rb:107:in `block in connect'