docker_manager/spec/requests/admin_controller_spec.rb
Bianca Nenciu 3a43aa6be7
DEV: Speed up /admin/docker/repos.json spec (#237)
Requesting /admin/docker/repos.json with a lot of plugins installed can
take a lot of time because of the large number of calls to the 'git'
CLI that are used to retrieve various information about the plugin
(eg. branch, latest commit, remote URL, etc).

This is not a problem in production because of memoization and the
much lower number of installed plugins, but it is a problem in test
environment where specs requesting this page can take 10+ seconds with
~100 installed plugins.

This commit speeds up by stubbing the `find_all` method to return only
the first few repositories.
2024-09-04 13:58:00 +03:00

55 lines
1.3 KiB
Ruby

# frozen_string_literal: true
RSpec.describe DockerManager::AdminController do
describe "anonymous user" do
it "should be a 404" do
get "/admin/update"
expect(response.status).to eq(404)
end
end
describe "when user is not an admin" do
it "should 404" do
sign_in(Fabricate(:user))
get "/admin/update"
expect(response.status).to eq(404)
end
end
describe "when user is an admin" do
it "should return the right response" do
sign_in(Fabricate(:admin))
get "/admin/update"
expect(response.status).to eq(200)
end
it "should redirect to the new route" do
sign_in(Fabricate(:admin))
get "/admin/upgrade"
expect(response.status).to eq(301)
uri = URI.parse(response.headers["Location"])
expect(uri.path).to eq("/admin/update")
end
end
describe "#repos" do
before do
# Return only the first 3 repos to reduce the number of calls to 'git' CLI
repos = DockerManager::GitRepo.find_all
DockerManager::GitRepo.stubs(:find_all).returns(repos[0...3])
end
it "should return the right response" do
sign_in(Fabricate(:admin))
get "/admin/docker/repos.json"
expect(response.status).to eq(200)
expect(response.parsed_body["repos"].first["official"]).to eq(false)
end
end
end