1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'CI/CD Catalog settings', :js, feature_category: :pipeline_composition, quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/455829' do
let_it_be(:user) { create(:user) }
let_it_be_with_reload(:namespace) { create(:group) }
let_it_be_with_reload(:project_with_ci_components) do
create(
:project,
:catalog_resource_with_components,
description: "catalog resource description",
namespace: namespace
)
end
context 'when user is not the owner' do
before_all do
namespace.add_maintainer(user)
end
before do
sign_in(user)
end
it 'does not show the CI/CD toggle settings' do
expect(page).not_to have_content('CI/CD Catalog project')
end
end
context 'when user is the owner' do
before_all do
namespace.add_owner(user)
end
before do
sign_in(user)
end
it 'shows the CI/CD toggle settings' do
visit edit_project_path(project_with_ci_components)
wait_for_requests
expect(page).to have_content('CI/CD Catalog project')
end
context 'when a project is not a Catalog resource' do
before do
visit project_path(project_with_ci_components)
end
it 'does not render the CI/CD resource badge' do
expect(page).to have_content(project_with_ci_components.name)
expect(page).not_to have_content('CI/CD catalog resource')
end
end
describe 'when listing a project as a Catalog resource' do
let_it_be(:tag_name) { 'v0.1' }
before do
visit edit_project_path(project_with_ci_components)
find('[data-testid="catalog-resource-toggle"] button').click
wait_for_requests
end
it 'marks the project as a CI/CD Catalog' do
visit project_path(project_with_ci_components)
expect(page).to have_content('CI/CD Catalog project')
end
context 'and there are no releases' do
before do
visit explore_catalog_index_path
end
it 'does not add the resource to the catalog', :aggregate_failures do
expect(page).to have_content("CI/CD Catalog")
expect(find_all('[data-testid="catalog-resource-item"]').length).to be(0)
end
end
context 'and there is a release' do
before do
create(:release, :with_catalog_resource_version, tag: tag_name, author: user,
project: project_with_ci_components)
# This call to `publish` is necessary to simulate what creating a release would really do
project_with_ci_components.catalog_resource.publish!
visit explore_catalog_index_path
end
it 'adds the resource to the catalog', :aggregate_failures do
expect(page).to have_content("CI/CD Catalog")
expect(find_all('[data-testid="catalog-resource-item"]').length).to be(1)
expect(page).to have_content(tag_name)
end
end
end
describe 'when unlisting a project from the CI/CD Catalog' do
before do
create(:ci_catalog_resource, project: project_with_ci_components)
create(:release, :with_catalog_resource_version, tag: 'v0.1', author: user, project: project_with_ci_components)
project_with_ci_components.catalog_resource.publish!
visit edit_project_path(project_with_ci_components)
find('[data-testid="catalog-resource-toggle"] button').click
click_button 'Remove from the CI/CD catalog'
end
it 'removes the CI/CD Catalog tag on the project' do
visit project_path(project_with_ci_components)
expect(page).not_to have_content('CI/CD catalog resource')
end
it 'removes the resource from the catalog' do
visit explore_catalog_index_path
expect(page).not_to have_content(project_with_ci_components.name)
expect(find_all('[data-testid="catalog-resource-item"]').length).to be(0)
end
it 'does not destroy existing releases' do
visit project_releases_path(project_with_ci_components)
expect(page).to have_content(project_with_ci_components.releases.last.name)
end
end
end
end
|