debian-mirror-gitlab/spec/features/projects/show/user_sees_setup_shortcut_buttons_spec.rb

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

336 lines
11 KiB
Ruby
Raw Normal View History

2019-10-12 21:52:04 +05:30
# frozen_string_literal: true
2018-10-15 14:42:47 +05:30
require 'spec_helper'
2020-06-23 00:09:42 +05:30
RSpec.describe 'Projects > Show > User sees setup shortcut buttons' do
2018-11-20 20:47:30 +05:30
# For "New file", "Add license" functionality,
2018-10-15 14:42:47 +05:30
# see spec/features/projects/files/project_owner_creates_license_file_spec.rb
# see spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb
2018-11-08 19:23:39 +05:30
include FakeBlobHelpers
2018-10-15 14:42:47 +05:30
let(:user) { create(:user) }
describe 'empty project' do
let(:project) { create(:project, :public, :empty_repo) }
let(:presenter) { project.present(current_user: user) }
describe 'as a normal user' do
before do
sign_in(user)
visit project_path(project)
end
2021-02-22 17:27:13 +05:30
it 'project buttons are not visible' do
2019-05-30 16:15:17 +05:30
visit project_path(project)
page.within('.project-buttons') do
2019-07-07 11:18:12 +05:30
expect(page).not_to have_link('New file')
expect(page).not_to have_link('Add README')
expect(page).not_to have_link('Add CHANGELOG')
expect(page).not_to have_link('Add CONTRIBUTING')
expect(page).not_to have_link('Enable Auto DevOps')
expect(page).not_to have_link('Auto DevOps enabled')
expect(page).not_to have_link('Add Kubernetes cluster')
2020-03-13 15:44:24 +05:30
expect(page).not_to have_link('Kubernetes')
2018-10-15 14:42:47 +05:30
end
end
end
2018-11-18 11:00:15 +05:30
describe 'as a maintainer' do
2018-10-15 14:42:47 +05:30
before do
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-10-15 14:42:47 +05:30
sign_in(user)
visit project_path(project)
end
2021-01-03 14:25:43 +05:30
it '"New file" button linked to IDE new file page' do
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2021-01-03 14:25:43 +05:30
expect(page).to have_link('New file', href: presenter.ide_edit_path(project, project.default_branch || 'master'))
2018-10-15 14:42:47 +05:30
end
end
2021-01-03 14:25:43 +05:30
it '"Add README" button linked to IDE new file populated for a README' do
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2021-01-03 14:25:43 +05:30
expect(page).to have_link('Add README', href: presenter.add_readme_ide_path)
2018-10-15 14:42:47 +05:30
end
end
2021-01-03 14:25:43 +05:30
it '"Add license" button linked to IDE new file populated for a license' do
2019-12-26 22:10:19 +05:30
page.within('.project-buttons') do
2021-01-03 14:25:43 +05:30
expect(page).to have_link('Add LICENSE', href: presenter.add_license_ide_path)
2018-10-15 14:42:47 +05:30
end
end
2020-07-28 23:09:34 +05:30
context 'Gitlab::CurrentSettings.default_branch_name is available' do
before do
expect(Gitlab::CurrentSettings)
.to receive(:default_branch_name)
.at_least(:once)
.and_return('example_branch')
visit project_path(project)
end
2021-01-03 14:25:43 +05:30
it '"New file" button linked to IDE new file page' do
2020-07-28 23:09:34 +05:30
page.within('.project-buttons') do
2021-01-03 14:25:43 +05:30
expect(page).to have_link('New file', href: presenter.ide_edit_path(project, 'example_branch'))
2020-07-28 23:09:34 +05:30
end
end
end
2018-10-15 14:42:47 +05:30
end
end
describe 'populated project' do
let(:project) { create(:project, :public, :repository) }
let(:presenter) { project.present(current_user: user) }
describe 'as a normal user' do
before do
sign_in(user)
visit project_path(project)
end
2018-11-20 20:47:30 +05:30
context 'when Auto DevOps is enabled' do
it '"Auto DevOps enabled" button not linked' do
visit project_path(project)
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2018-11-20 20:47:30 +05:30
expect(page).to have_text('Auto DevOps enabled')
end
2018-10-15 14:42:47 +05:30
end
end
2018-11-20 20:47:30 +05:30
context 'when Auto DevOps is not enabled' do
let(:project) { create(:project, :public, :repository, auto_devops_attributes: { enabled: false }) }
2018-10-15 14:42:47 +05:30
2018-11-20 20:47:30 +05:30
it 'no Auto DevOps button if can not manage pipelines' do
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2018-11-20 20:47:30 +05:30
expect(page).not_to have_link('Enable Auto DevOps')
expect(page).not_to have_link('Auto DevOps enabled')
end
2018-10-15 14:42:47 +05:30
end
2018-11-20 20:47:30 +05:30
it 'no Kubernetes cluster button if can not manage clusters' do
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2018-11-20 20:47:30 +05:30
expect(page).not_to have_link('Add Kubernetes cluster')
2020-03-13 15:44:24 +05:30
expect(page).not_to have_link('Kubernetes')
2018-11-20 20:47:30 +05:30
end
2018-10-15 14:42:47 +05:30
end
end
end
2018-11-18 11:00:15 +05:30
describe 'as a maintainer' do
2018-10-15 14:42:47 +05:30
before do
allow_any_instance_of(AutoDevopsHelper).to receive(:show_auto_devops_callout?).and_return(false)
2018-11-18 11:00:15 +05:30
project.add_maintainer(user)
2018-10-15 14:42:47 +05:30
sign_in(user)
2018-11-08 19:23:39 +05:30
end
2018-10-15 14:42:47 +05:30
2019-02-15 15:39:39 +05:30
context 'README button' do
2018-11-08 19:23:39 +05:30
before do
allow(Project).to receive(:find_by_full_path)
.with(project.full_path, follow_redirects: true)
.and_return(project)
end
2019-02-15 15:39:39 +05:30
context 'when the project has a populated README' do
it 'show the "README" anchor' do
2018-11-08 19:23:39 +05:30
visit project_path(project)
expect(project.repository.readme).not_to be_nil
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2021-01-03 14:25:43 +05:30
expect(page).not_to have_link('Add README', href: presenter.add_readme_ide_path)
2019-02-15 15:39:39 +05:30
expect(page).to have_link('README', href: presenter.readme_path)
2018-11-08 19:23:39 +05:30
end
end
2019-02-15 15:39:39 +05:30
context 'when the project has an empty README' do
it 'show the "README" anchor' do
2018-11-08 19:23:39 +05:30
allow(project.repository).to receive(:readme).and_return(fake_blob(path: 'README.md', data: '', size: 0))
visit project_path(project)
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
expect(page).not_to have_link('Add README', href: presenter.add_readme_path)
expect(page).to have_link('README', href: presenter.readme_path)
2018-11-08 19:23:39 +05:30
end
end
end
end
2019-02-15 15:39:39 +05:30
context 'when the project does not have a README' do
2021-01-03 14:25:43 +05:30
it 'shows the single file editor "Add README" button' do
2021-02-22 17:27:13 +05:30
allow(project.repository).to receive(:readme_path).and_return(nil)
2018-11-08 19:23:39 +05:30
visit project_path(project)
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
expect(page).to have_link('Add README', href: presenter.add_readme_path)
2018-11-08 19:23:39 +05:30
end
end
end
2018-10-15 14:42:47 +05:30
end
2019-02-15 15:39:39 +05:30
it 'no "Add CHANGELOG" button if the project already has a changelog' do
2018-11-08 19:23:39 +05:30
visit project_path(project)
2018-10-15 14:42:47 +05:30
expect(project.repository.changelog).not_to be_nil
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
expect(page).not_to have_link('Add CHANGELOG')
2018-10-15 14:42:47 +05:30
end
end
2018-11-20 20:47:30 +05:30
it 'no "Add license" button if the project already has a license' do
2018-11-08 19:23:39 +05:30
visit project_path(project)
2018-10-15 14:42:47 +05:30
expect(project.repository.license_blob).not_to be_nil
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2019-12-26 22:10:19 +05:30
expect(page).not_to have_link('Add LICENSE')
2018-10-15 14:42:47 +05:30
end
end
2019-02-15 15:39:39 +05:30
it 'no "Add CONTRIBUTING" button if the project already has a contribution guide' do
2018-11-08 19:23:39 +05:30
visit project_path(project)
2018-10-15 14:42:47 +05:30
expect(project.repository.contribution_guide).not_to be_nil
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
expect(page).not_to have_link('Add CONTRIBUTING')
2018-10-15 14:42:47 +05:30
end
end
describe 'GitLab CI configuration button' do
2018-11-20 20:47:30 +05:30
context 'when Auto DevOps is enabled' do
it 'no "Set up CI/CD" button if the project has Auto DevOps enabled' do
visit project_path(project)
2018-10-15 14:42:47 +05:30
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2018-11-20 20:47:30 +05:30
expect(page).not_to have_link('Set up CI/CD')
end
2018-10-15 14:42:47 +05:30
end
end
2018-11-20 20:47:30 +05:30
context 'when Auto DevOps is not enabled' do
let(:project) { create(:project, :public, :repository, auto_devops_attributes: { enabled: false }) }
2018-10-15 14:42:47 +05:30
2018-11-20 20:47:30 +05:30
it '"Set up CI/CD" button linked to new file populated for a .gitlab-ci.yml' do
visit project_path(project)
2018-10-15 14:42:47 +05:30
2018-11-20 20:47:30 +05:30
expect(project.repository.gitlab_ci_yml).to be_nil
2018-10-15 14:42:47 +05:30
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2021-04-29 21:17:54 +05:30
expect(page).to have_link('Set up CI/CD', href: project_ci_pipeline_editor_path(project))
2018-11-20 20:47:30 +05:30
end
2018-10-15 14:42:47 +05:30
end
2021-04-29 21:17:54 +05:30
it '"Set up CI/CD" button is renamed if the project already has a .gitlab-ci.yml' do
2018-11-20 20:47:30 +05:30
Files::CreateService.new(
project,
project.creator,
start_branch: 'master',
branch_name: 'master',
commit_message: "Add .gitlab-ci.yml",
file_path: '.gitlab-ci.yml',
file_content: File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml'))
).execute
2018-10-15 14:42:47 +05:30
2018-11-20 20:47:30 +05:30
expect(project.repository.gitlab_ci_yml).not_to be_nil
2018-10-15 14:42:47 +05:30
2018-11-20 20:47:30 +05:30
visit project_path(project)
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2018-11-20 20:47:30 +05:30
expect(page).not_to have_link('Set up CI/CD')
2021-04-29 21:17:54 +05:30
expect(page).to have_link('CI/CD configuration')
2018-11-20 20:47:30 +05:30
end
2018-10-15 14:42:47 +05:30
end
end
end
describe 'Auto DevOps button' do
2018-11-20 20:47:30 +05:30
context 'when Auto DevOps is enabled' do
it '"Auto DevOps enabled" anchor linked to settings page' do
visit project_path(project)
2018-11-08 19:23:39 +05:30
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2018-11-20 20:47:30 +05:30
expect(page).to have_link('Auto DevOps enabled', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings'))
end
2018-10-15 14:42:47 +05:30
end
end
2018-11-20 20:47:30 +05:30
context 'when Auto DevOps is not enabled' do
let(:project) { create(:project, :public, :repository, auto_devops_attributes: { enabled: false }) }
2018-10-15 14:42:47 +05:30
2018-11-20 20:47:30 +05:30
it '"Enable Auto DevOps" button linked to settings page' do
visit project_path(project)
2018-10-15 14:42:47 +05:30
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2018-11-20 20:47:30 +05:30
expect(page).to have_link('Enable Auto DevOps', href: project_settings_ci_cd_path(project, anchor: 'autodevops-settings'))
end
2018-10-15 14:42:47 +05:30
end
2018-11-20 20:47:30 +05:30
it 'no Auto DevOps button if Auto DevOps callout is shown' do
allow_any_instance_of(AutoDevopsHelper).to receive(:show_auto_devops_callout?).and_return(true)
2018-10-15 14:42:47 +05:30
2018-11-20 20:47:30 +05:30
visit project_path(project)
2018-10-15 14:42:47 +05:30
2018-11-20 20:47:30 +05:30
expect(page).to have_selector('.js-autodevops-banner')
2018-10-15 14:42:47 +05:30
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2018-11-20 20:47:30 +05:30
expect(page).not_to have_link('Enable Auto DevOps')
expect(page).not_to have_link('Auto DevOps enabled')
end
2018-10-15 14:42:47 +05:30
end
2018-11-20 20:47:30 +05:30
it 'no "Enable Auto DevOps" button when .gitlab-ci.yml already exists' do
Files::CreateService.new(
project,
project.creator,
start_branch: 'master',
branch_name: 'master',
commit_message: "Add .gitlab-ci.yml",
file_path: '.gitlab-ci.yml',
file_content: File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml'))
).execute
2018-10-15 14:42:47 +05:30
2018-11-20 20:47:30 +05:30
expect(project.repository.gitlab_ci_yml).not_to be_nil
2018-10-15 14:42:47 +05:30
2018-11-20 20:47:30 +05:30
visit project_path(project)
2018-10-15 14:42:47 +05:30
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2018-11-20 20:47:30 +05:30
expect(page).not_to have_link('Enable Auto DevOps')
expect(page).not_to have_link('Auto DevOps enabled')
end
2018-10-15 14:42:47 +05:30
end
end
end
describe 'Kubernetes cluster button' do
it '"Add Kubernetes cluster" button linked to clusters page' do
2018-11-08 19:23:39 +05:30
visit project_path(project)
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2022-03-02 08:16:31 +05:30
expect(page).to have_link('Add Kubernetes cluster', href: project_clusters_path(project))
2018-10-15 14:42:47 +05:30
end
end
it '"Kubernetes cluster" button linked to cluster page' do
cluster = create(:cluster, :provided_by_gcp, projects: [project])
visit project_path(project)
2019-02-15 15:39:39 +05:30
page.within('.project-buttons') do
2020-03-13 15:44:24 +05:30
expect(page).to have_link('Kubernetes', href: project_cluster_path(project, cluster))
2018-10-15 14:42:47 +05:30
end
end
end
end
end
end