127 lines
3.2 KiB
Ruby
127 lines
3.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "spec_helper"
|
|
|
|
RSpec.describe "User interacts with deploy keys", :js do
|
|
let(:project) { create(:project, :repository) }
|
|
let(:user) { project.first_owner }
|
|
|
|
before do
|
|
sign_in(user)
|
|
end
|
|
|
|
shared_examples "attaches a key" do
|
|
it "attaches key" do
|
|
visit(project_deploy_keys_path(project))
|
|
|
|
page.within(".deploy-keys") do
|
|
find(".badge", text: "1").click
|
|
|
|
click_button("Enable")
|
|
|
|
expect(page).not_to have_selector(".gl-spinner")
|
|
expect(current_path).to eq(project_settings_repository_path(project))
|
|
|
|
find(".js-deployKeys-tab-enabled_keys").click
|
|
|
|
expect(page).to have_content(deploy_key.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "viewing deploy keys" do
|
|
let(:deploy_key) { create(:deploy_key) }
|
|
|
|
context "when project has keys" do
|
|
before do
|
|
create(:deploy_keys_project, project: project, deploy_key: deploy_key)
|
|
end
|
|
|
|
it "shows deploy keys" do
|
|
visit(project_deploy_keys_path(project))
|
|
|
|
page.within(".deploy-keys") do
|
|
expect(page).to have_content(deploy_key.title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when another project has keys" do
|
|
let(:another_project) { create(:project) }
|
|
|
|
before do
|
|
create(:deploy_keys_project, project: another_project, deploy_key: deploy_key)
|
|
|
|
another_project.add_maintainer(user)
|
|
end
|
|
|
|
it "shows deploy keys" do
|
|
visit(project_deploy_keys_path(project))
|
|
|
|
page.within(".deploy-keys") do
|
|
find('.js-deployKeys-tab-available_project_keys').click
|
|
|
|
expect(page).to have_content(deploy_key.title)
|
|
expect(find(".js-deployKeys-tab-available_project_keys .badge")).to have_content("1")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when there are public deploy keys" do
|
|
let!(:deploy_key) { create(:deploy_key, public: true) }
|
|
|
|
it "shows public deploy keys" do
|
|
visit(project_deploy_keys_path(project))
|
|
|
|
page.within(".deploy-keys") do
|
|
find(".js-deployKeys-tab-public_keys").click
|
|
|
|
expect(page).to have_content(deploy_key.title)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
context "adding deploy keys" do
|
|
before do
|
|
visit(project_deploy_keys_path(project))
|
|
end
|
|
|
|
it "adds new key" do
|
|
deploy_key_title = attributes_for(:key)[:title]
|
|
deploy_key_body = attributes_for(:key)[:key]
|
|
|
|
fill_in("deploy_key_title", with: deploy_key_title)
|
|
fill_in("deploy_key_key", with: deploy_key_body)
|
|
|
|
click_button("Add key")
|
|
|
|
expect(current_path).to eq(project_settings_repository_path(project))
|
|
|
|
page.within(".deploy-keys") do
|
|
expect(page).to have_content(deploy_key_title)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "attaching existing keys" do
|
|
context "from another project" do
|
|
let(:another_project) { create(:project) }
|
|
let(:deploy_key) { create(:deploy_key) }
|
|
|
|
before do
|
|
create(:deploy_keys_project, project: another_project, deploy_key: deploy_key)
|
|
|
|
another_project.add_maintainer(user)
|
|
end
|
|
|
|
it_behaves_like "attaches a key"
|
|
end
|
|
|
|
context "when keys are public" do
|
|
let!(:deploy_key) { create(:deploy_key, public: true) }
|
|
|
|
it_behaves_like "attaches a key"
|
|
end
|
|
end
|
|
end
|