diff options
Diffstat (limited to 'spec/features/projects')
23 files changed, 272 insertions, 99 deletions
diff --git a/spec/features/projects/blobs/edit_spec.rb b/spec/features/projects/blobs/edit_spec.rb index c30c8dda852..3f1c10b3688 100644 --- a/spec/features/projects/blobs/edit_spec.rb +++ b/spec/features/projects/blobs/edit_spec.rb @@ -179,12 +179,14 @@ RSpec.describe 'Editing file blob', :js do end context 'with protected branch' do - before do - visit project_edit_blob_path(project, tree_join(protected_branch, file_path)) - end - it 'shows blob editor with patch branch' do - expect(find('.js-branch-name').value).to eq('patch-1') + freeze_time do + visit project_edit_blob_path(project, tree_join(protected_branch, file_path)) + + epoch = Time.now.strftime('%s%L').last(5) + + expect(find('.js-branch-name').value).to eq "#{user.username}-protected-branch-patch-#{epoch}" + end end end end diff --git a/spec/features/projects/blobs/user_creates_new_blob_in_new_project_spec.rb b/spec/features/projects/blobs/user_creates_new_blob_in_new_project_spec.rb index fda2992af8d..6b9fd41059d 100644 --- a/spec/features/projects/blobs/user_creates_new_blob_in_new_project_spec.rb +++ b/spec/features/projects/blobs/user_creates_new_blob_in_new_project_spec.rb @@ -23,8 +23,6 @@ RSpec.describe 'User creates new blob', :js do ide_commit - click_button('Commit') - expect(page).to have_content('All changes are committed') expect(project.repository.blob_at('master', 'dummy-file').data).to eql("Hello world\n") end diff --git a/spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb b/spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb index 023e00a3e02..3069405ba63 100644 --- a/spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb +++ b/spec/features/projects/blobs/user_follows_pipeline_suggest_nudge_spec.rb @@ -10,7 +10,6 @@ RSpec.describe 'User follows pipeline suggest nudge spec when feature is enabled describe 'viewing the new blob page' do before do - stub_experiment_for_user(suggest_pipeline: true) sign_in(user) end diff --git a/spec/features/projects/ci/editor_spec.rb b/spec/features/projects/ci/editor_spec.rb new file mode 100644 index 00000000000..7012cc6edaa --- /dev/null +++ b/spec/features/projects/ci/editor_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Pipeline Editor', :js do + include Spec::Support::Helpers::Features::EditorLiteSpecHelpers + + let(:project) { create(:project, :repository) } + let(:user) { create(:user) } + + before do + sign_in(user) + project.add_developer(user) + + visit project_ci_pipeline_editor_path(project) + end + + it 'user sees the Pipeline Editor page' do + expect(page).to have_content('Pipeline Editor') + end +end diff --git a/spec/features/projects/ci/lint_spec.rb b/spec/features/projects/ci/lint_spec.rb index eb2efb4357d..466c7ba215e 100644 --- a/spec/features/projects/ci/lint_spec.rb +++ b/spec/features/projects/ci/lint_spec.rb @@ -11,7 +11,6 @@ RSpec.describe 'CI Lint', :js do let(:content_selector) { '.content .view-lines' } before do - stub_feature_flags(ci_lint_vue: false) project.add_developer(user) sign_in(user) @@ -26,7 +25,6 @@ RSpec.describe 'CI Lint', :js do describe 'YAML parsing' do shared_examples 'validates the YAML' do before do - stub_feature_flags(ci_lint_vue: false) click_on 'Validate' end @@ -68,14 +66,6 @@ RSpec.describe 'CI Lint', :js do it_behaves_like 'validates the YAML' end - - describe 'YAML revalidate' do - let(:yaml_content) { 'my yaml content' } - - it 'loads previous YAML content after validation' do - expect(page).to have_field('content', with: 'my yaml content', visible: false, type: 'textarea') - end - end end describe 'YAML clearing' do @@ -89,7 +79,7 @@ RSpec.describe 'CI Lint', :js do end it 'YAML content is cleared' do - expect(page).to have_field('content', with: '', visible: false, type: 'textarea') + expect(page).to have_field(class: 'inputarea', with: '', visible: false, type: 'textarea') end end end diff --git a/spec/features/projects/container_registry_spec.rb b/spec/features/projects/container_registry_spec.rb index 7514a26f020..45bf35a6aab 100644 --- a/spec/features/projects/container_registry_spec.rb +++ b/spec/features/projects/container_registry_spec.rb @@ -10,6 +10,10 @@ RSpec.describe 'Container Registry', :js do create(:container_repository, name: 'my/image') end + let(:nameless_container_repository) do + create(:container_repository, name: '') + end + before do sign_in(user) project.add_developer(user) @@ -96,6 +100,20 @@ RSpec.describe 'Container Registry', :js do end end + describe 'image repo details when image has no name' do + before do + stub_container_registry_tags(tags: %w[latest], with_manifest: true) + project.container_repositories << nameless_container_repository + visit_container_registry + end + + it 'renders correctly' do + find('a[data-testid="details-link"]').click + + expect(page).to have_content 'latest' + end + end + context 'when there are more than 10 images' do before do create_list(:container_repository, 12, project: project) diff --git a/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb b/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb index d28e31c08dc..42f8daf9d5e 100644 --- a/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb +++ b/spec/features/projects/files/project_owner_sees_link_to_create_license_file_in_empty_project_spec.rb @@ -27,9 +27,7 @@ RSpec.describe 'Projects > Files > Project owner sees a link to create a license ide_commit - click_button('Commit') - - expect(current_path).to eq("/-/ide/project/#{project.full_path}/tree/master/-/") + expect(current_path).to eq("/-/ide/project/#{project.full_path}/tree/master/-/LICENSE/") expect(page).to have_content('All changes are committed') diff --git a/spec/features/projects/files/user_browses_files_spec.rb b/spec/features/projects/files/user_browses_files_spec.rb index a6126fbcb33..4e9e129042c 100644 --- a/spec/features/projects/files/user_browses_files_spec.rb +++ b/spec/features/projects/files/user_browses_files_spec.rb @@ -87,26 +87,22 @@ RSpec.describe "User browses files" do end it "shows correct files and links" do - # rubocop:disable Lint/Void - # Test the full URLs of links instead of relative paths by `have_link(text: "...", href: "...")`. - find("a", text: /^empty$/)["href"] == project_tree_url(project, "markdown") - find("a", text: /^#id$/)["href"] == project_tree_url(project, "markdown", anchor: "#id") - find("a", text: %r{^/#id$})["href"] == project_tree_url(project, "markdown", anchor: "#id") - find("a", text: /^README.md#id$/)["href"] == project_blob_url(project, "markdown/README.md", anchor: "#id") - find("a", text: %r{^d/README.md#id$})["href"] == project_blob_url(project, "d/markdown/README.md", anchor: "#id") - # rubocop:enable Lint/Void - expect(current_path).to eq(project_tree_path(project, "markdown")) expect(page).to have_content("README.md") - .and have_content("CHANGELOG") - .and have_content("Welcome to GitLab GitLab is a free project and repository management application") - .and have_link("GitLab API doc") - .and have_link("GitLab API website") - .and have_link("Rake tasks") - .and have_link("backup and restore procedure") - .and have_link("GitLab API doc directory") - .and have_link("Maintenance") - .and have_header_with_correct_id_and_link(2, "Application details", "application-details") + .and have_content("CHANGELOG") + .and have_content("Welcome to GitLab GitLab is a free project and repository management application") + .and have_link("GitLab API doc") + .and have_link("GitLab API website") + .and have_link("Rake tasks") + .and have_link("backup and restore procedure") + .and have_link("GitLab API doc directory") + .and have_link("Maintenance") + .and have_header_with_correct_id_and_link(2, "Application details", "application-details") + .and have_link("empty", href: "") + .and have_link("#id", href: "#id") + .and have_link("/#id", href: project_blob_path(project, "markdown/README.md", anchor: "id")) + .and have_link("README.md#id", href: project_blob_path(project, "markdown/README.md", anchor: "id")) + .and have_link("d/README.md#id", href: project_blob_path(project, "markdown/db/README.md", anchor: "id")) end it "shows correct content of file" do @@ -114,10 +110,10 @@ RSpec.describe "User browses files" do expect(current_path).to eq(project_blob_path(project, "markdown/doc/api/README.md")) expect(page).to have_content("All API requests require authentication") - .and have_content("Contents") - .and have_link("Users") - .and have_link("Rake tasks") - .and have_header_with_correct_id_and_link(1, "GitLab API", "gitlab-api") + .and have_content("Contents") + .and have_link("Users") + .and have_link("Rake tasks") + .and have_header_with_correct_id_and_link(1, "GitLab API", "gitlab-api") click_link("Users") @@ -148,16 +144,13 @@ RSpec.describe "User browses files" do click_link("d") end - # rubocop:disable Lint/Void - # Test the full URLs of links instead of relative paths by `have_link(text: "...", href: "...")`. - find("a", text: "..")["href"] == project_tree_url(project, "markdown/d") - # rubocop:enable Lint/Void + expect(page).to have_link("..", href: project_tree_path(project, "markdown/")) page.within(".tree-table") do click_link("README.md") end - # Test the full URLs of links instead of relative paths by `have_link(text: "...", href: "...")`. - find("a", text: /^empty$/)["href"] == project_blob_url(project, "markdown/d/README.md") + + expect(page).to have_link("empty", href: "") end it "shows correct content of directory" do diff --git a/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb b/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb index de1fcc9d787..b5d5527bbfe 100644 --- a/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb +++ b/spec/features/projects/issues/design_management/user_uploads_designs_spec.rb @@ -51,7 +51,7 @@ RSpec.describe 'User uploads new design', :js do end def upload_design(fixture, count:) - attach_file(:design_file, fixture, match: :first, make_visible: true) + attach_file(:upload_file, fixture, match: :first, make_visible: true) wait_for('designs uploaded') do issue.reload.designs.count == count diff --git a/spec/features/projects/jobs_spec.rb b/spec/features/projects/jobs_spec.rb index 404c3e93586..e19337e1ff5 100644 --- a/spec/features/projects/jobs_spec.rb +++ b/spec/features/projects/jobs_spec.rb @@ -1013,7 +1013,7 @@ RSpec.describe 'Jobs', :clean_gitlab_redis_shared_state do before do job.run! visit project_job_path(project, job) - find('.js-cancel-job').click + find('[data-testid="cancel-button"]').click end it 'loads the page and shows all needed controls' do @@ -1030,7 +1030,7 @@ RSpec.describe 'Jobs', :clean_gitlab_redis_shared_state do visit project_job_path(project, job) wait_for_requests - find('.js-retry-button').click + find('[data-testid="retry-button"]').click end it 'shows the right status and buttons' do @@ -1057,6 +1057,31 @@ RSpec.describe 'Jobs', :clean_gitlab_redis_shared_state do end end end + + context "Job that failed because of a forward deployment failure" do + let(:job) { create(:ci_build, :forward_deployment_failure, pipeline: pipeline) } + + before do + visit project_job_path(project, job) + wait_for_requests + + find('[data-testid="retry-button"]').click + end + + it 'shows a modal to warn the user' do + page.within('.modal-header') do + expect(page).to have_content 'Are you sure you want to retry this job?' + end + end + + it 'retries the job' do + find('[data-testid="retry-button-modal"]').click + + within '[data-testid="ci-header-content"]' do + expect(page).to have_content('pending') + end + end + end end describe "GET /:project/jobs/:id/download", :js do diff --git a/spec/features/projects/navbar_spec.rb b/spec/features/projects/navbar_spec.rb index 4ff3827b240..25791b393bc 100644 --- a/spec/features/projects/navbar_spec.rb +++ b/spec/features/projects/navbar_spec.rb @@ -67,4 +67,23 @@ RSpec.describe 'Project navbar' do it_behaves_like 'verified navigation bar' end + + context 'when invite team members is not available' do + it 'does not display the js-invite-members-trigger' do + visit project_path(project) + + expect(page).not_to have_selector('.js-invite-members-trigger') + end + end + + context 'when invite team members is available' do + it 'includes the div for js-invite-members-trigger' do + stub_feature_flags(invite_members_group_modal: true) + allow_any_instance_of(InviteMembersHelper).to receive(:invite_members_allowed?).and_return(true) + + visit project_path(project) + + expect(page).to have_selector('.js-invite-members-trigger') + end + end end diff --git a/spec/features/projects/pages_spec.rb b/spec/features/projects/pages_spec.rb index c3eea0195a6..11f712fde81 100644 --- a/spec/features/projects/pages_spec.rb +++ b/spec/features/projects/pages_spec.rb @@ -365,7 +365,7 @@ RSpec.shared_examples 'pages settings editing' do end let!(:artifact) do - create(:ci_job_artifact, :archive, + create(:ci_job_artifact, :archive, :correct_checksum, file: fixture_file_upload(File.join('spec/fixtures/pages.zip')), job: ci_build) end diff --git a/spec/features/projects/pipeline_schedules_spec.rb b/spec/features/projects/pipeline_schedules_spec.rb index 1e2cd3c0a69..94e3331b173 100644 --- a/spec/features/projects/pipeline_schedules_spec.rb +++ b/spec/features/projects/pipeline_schedules_spec.rb @@ -24,7 +24,7 @@ RSpec.describe 'Pipeline Schedules', :js do it 'displays the required information description' do page.within('.pipeline-schedule-table-row') do expect(page).to have_content('pipeline schedule') - expect(find(".next-run-cell time")['data-original-title']) + expect(find(".next-run-cell time")['title']) .to include(pipeline_schedule.real_next_run.strftime('%b %-d, %Y')) expect(page).to have_link('master') expect(page).to have_link("##{pipeline.id}") diff --git a/spec/features/projects/pipelines/pipeline_spec.rb b/spec/features/projects/pipelines/pipeline_spec.rb index 51826d867cd..ac3566fbbdd 100644 --- a/spec/features/projects/pipelines/pipeline_spec.rb +++ b/spec/features/projects/pipelines/pipeline_spec.rb @@ -14,6 +14,7 @@ RSpec.describe 'Pipeline', :js do before do sign_in(user) project.add_role(user, role) + stub_feature_flags(graphql_pipeline_details: false) end shared_context 'pipeline builds' do @@ -345,7 +346,7 @@ RSpec.describe 'Pipeline', :js do it 'shows Pipeline, Jobs, DAG and Failed Jobs tabs with link' do expect(page).to have_link('Pipeline') expect(page).to have_link('Jobs') - expect(page).to have_link('DAG') + expect(page).to have_link('Needs') expect(page).to have_link('Failed Jobs') end @@ -892,7 +893,7 @@ RSpec.describe 'Pipeline', :js do it 'shows Pipeline, Jobs and DAG tabs with link' do expect(page).to have_link('Pipeline') expect(page).to have_link('Jobs') - expect(page).to have_link('DAG') + expect(page).to have_link('Needs') end it 'shows counter in Jobs tab' do diff --git a/spec/features/projects/pipelines/pipelines_spec.rb b/spec/features/projects/pipelines/pipelines_spec.rb index 3e78dfc3bc7..450524b8d70 100644 --- a/spec/features/projects/pipelines/pipelines_spec.rb +++ b/spec/features/projects/pipelines/pipelines_spec.rb @@ -12,6 +12,7 @@ RSpec.describe 'Pipelines', :js do before do sign_in(user) + stub_feature_flags(graphql_pipeline_details: false) project.add_developer(user) project.update!(auto_devops_attributes: { enabled: false }) end diff --git a/spec/features/projects/releases/user_views_edit_release_spec.rb b/spec/features/projects/releases/user_views_edit_release_spec.rb index 9115a135aeb..bb54b6be9c4 100644 --- a/spec/features/projects/releases/user_views_edit_release_spec.rb +++ b/spec/features/projects/releases/user_views_edit_release_spec.rb @@ -4,7 +4,7 @@ require 'spec_helper' RSpec.describe 'User edits Release', :js do let_it_be(:project) { create(:project, :repository) } - let_it_be(:release) { create(:release, project: project, name: 'The first release' ) } + let_it_be(:release) { create(:release, :with_milestones, milestones_count: 1, project: project, name: 'The first release' ) } let_it_be(:user) { create(:user) } before do diff --git a/spec/features/projects/releases/user_views_releases_spec.rb b/spec/features/projects/releases/user_views_releases_spec.rb index 323c57570c3..aabbc8cea7b 100644 --- a/spec/features/projects/releases/user_views_releases_spec.rb +++ b/spec/features/projects/releases/user_views_releases_spec.rb @@ -3,8 +3,14 @@ require 'spec_helper' RSpec.describe 'User views releases', :js do + let_it_be(:today) { Time.zone.now } + let_it_be(:yesterday) { today - 1.day } + let_it_be(:tomorrow) { today + 1.day } + let_it_be(:project) { create(:project, :repository, :private) } - let_it_be(:release) { create(:release, project: project, name: 'The first release' ) } + let_it_be(:release_v1) { create(:release, project: project, tag: 'v1', name: 'The first release', released_at: yesterday, created_at: today) } + let_it_be(:release_v2) { create(:release, project: project, tag: 'v2-with-a/slash', name: 'The second release', released_at: today, created_at: yesterday) } + let_it_be(:release_v3) { create(:release, project: project, tag: 'v3', name: 'The third release', released_at: tomorrow, created_at: tomorrow) } let_it_be(:maintainer) { create(:user) } let_it_be(:guest) { create(:user) } @@ -17,38 +23,36 @@ RSpec.describe 'User views releases', :js do context('when the user is a maintainer') do before do sign_in(maintainer) - end - it 'sees the release' do visit project_releases_path(project) + end - expect(page).to have_content(release.name) - expect(page).to have_content(release.tag) - expect(page).not_to have_content('Upcoming Release') + it 'sees the release' do + page.within("##{release_v1.tag}") do + expect(page).to have_content(release_v1.name) + expect(page).to have_content(release_v1.tag) + expect(page).not_to have_content('Upcoming Release') + end end context 'when there is a link as an asset' do - let!(:release_link) { create(:release_link, release: release, url: url ) } + let!(:release_link) { create(:release_link, release: release_v1, url: url ) } let(:url) { "#{project.web_url}/-/jobs/1/artifacts/download" } - let(:direct_asset_link) { Gitlab::Routing.url_helpers.project_release_url(project, release) << release_link.filepath } + let(:direct_asset_link) { Gitlab::Routing.url_helpers.project_release_url(project, release_v1) << "/downloads#{release_link.filepath}" } it 'sees the link' do - visit project_releases_path(project) - - page.within('.js-assets-list') do + page.within("##{release_v1.tag} .js-assets-list") do expect(page).to have_link release_link.name, href: direct_asset_link expect(page).not_to have_css('[data-testid="external-link-indicator"]') end end context 'when there is a link redirect' do - let!(:release_link) { create(:release_link, release: release, name: 'linux-amd64 binaries', filepath: '/binaries/linux-amd64', url: url) } + let!(:release_link) { create(:release_link, release: release_v1, name: 'linux-amd64 binaries', filepath: '/binaries/linux-amd64', url: url) } let(:url) { "#{project.web_url}/-/jobs/1/artifacts/download" } it 'sees the link' do - visit project_releases_path(project) - - page.within('.js-assets-list') do + page.within("##{release_v1.tag} .js-assets-list") do expect(page).to have_link release_link.name, href: direct_asset_link expect(page).not_to have_css('[data-testid="external-link-indicator"]') end @@ -59,9 +63,7 @@ RSpec.describe 'User views releases', :js do let(:url) { 'http://google.com/download' } it 'sees that the link is external resource' do - visit project_releases_path(project) - - page.within('.js-assets-list') do + page.within("##{release_v1.tag} .js-assets-list") do expect(page).to have_css('[data-testid="external-link-indicator"]') end end @@ -69,23 +71,57 @@ RSpec.describe 'User views releases', :js do end context 'with an upcoming release' do - let(:tomorrow) { Time.zone.now + 1.day } - let!(:release) { create(:release, project: project, released_at: tomorrow ) } - it 'sees the upcoming tag' do - visit project_releases_path(project) - - expect(page).to have_content('Upcoming Release') + page.within("##{release_v3.tag}") do + expect(page).to have_content('Upcoming Release') + end end end context 'with a tag containing a slash' do it 'sees the release' do - release = create :release, project: project, tag: 'debian/2.4.0-1' - visit project_releases_path(project) + page.within("##{release_v2.tag.parameterize}") do + expect(page).to have_content(release_v2.name) + expect(page).to have_content(release_v2.tag) + end + end + end + + context 'sorting' do + def sort_page(by:, direction:) + within '[data-testid="releases-sort"]' do + find('.dropdown-toggle').click + + click_button(by, class: 'dropdown-item') + + find('.sorting-direction-button').click if direction == :ascending + end + end + + shared_examples 'releases sort order' do + it "sorts the releases #{description}" do + card_titles = page.all('.release-block .card-title', minimum: expected_releases.count) + + card_titles.each_with_index do |title, index| + expect(title).to have_content(expected_releases[index].name) + end + end + end + + context "when the page is sorted by the default sort order" do + let(:expected_releases) { [release_v3, release_v2, release_v1] } + + it_behaves_like 'releases sort order' + end + + context "when the page is sorted by created_at ascending " do + let(:expected_releases) { [release_v2, release_v1, release_v3] } + + before do + sort_page by: 'Created date', direction: :ascending + end - expect(page).to have_content(release.name) - expect(page).to have_content(release.tag) + it_behaves_like 'releases sort order' end end end @@ -98,14 +134,14 @@ RSpec.describe 'User views releases', :js do it 'renders release info except for Git-related data' do visit project_releases_path(project) - within('.release-block') do - expect(page).to have_content(release.description) + within('.release-block', match: :first) do + expect(page).to have_content(release_v3.description) # The following properties (sometimes) include Git info, # so they are not rendered for Guest users - expect(page).not_to have_content(release.name) - expect(page).not_to have_content(release.tag) - expect(page).not_to have_content(release.commit.short_id) + expect(page).not_to have_content(release_v3.name) + expect(page).not_to have_content(release_v3.tag) + expect(page).not_to have_content(release_v3.commit.short_id) end end end diff --git a/spec/features/projects/settings/registry_settings_spec.rb b/spec/features/projects/settings/registry_settings_spec.rb index 4e1b53ffc87..cb333bdb428 100644 --- a/spec/features/projects/settings/registry_settings_spec.rb +++ b/spec/features/projects/settings/registry_settings_spec.rb @@ -15,10 +15,10 @@ RSpec.describe 'Project > Settings > CI/CD > Container registry tag expiration p before do project.update!(container_registry_enabled: container_registry_enabled_on_project) + project.container_expiration_policy.update!(enabled: true) sign_in(user) stub_container_registry_config(enabled: container_registry_enabled) - stub_feature_flags(new_variables_ui: false) end context 'as owner' do @@ -33,13 +33,13 @@ RSpec.describe 'Project > Settings > CI/CD > Container registry tag expiration p subject within '#js-registry-policies' do - within '.card-body' do + within '.gl-card-body' do select('7 days until tags are automatically removed', from: 'Expiration interval:') select('Every day', from: 'Expiration schedule:') select('50 tags per image name', from: 'Number of tags to retain:') fill_in('Tags with names matching this regex pattern will expire:', with: '.*-production') end - submit_button = find('.card-footer .btn.btn-success') + submit_button = find('.gl-card-footer .btn.btn-success') expect(submit_button).not_to be_disabled submit_button.click end @@ -51,10 +51,10 @@ RSpec.describe 'Project > Settings > CI/CD > Container registry tag expiration p subject within '#js-registry-policies' do - within '.card-body' do + within '.gl-card-body' do fill_in('Tags with names matching this regex pattern will expire:', with: '*-production') end - submit_button = find('.card-footer .btn.btn-success') + submit_button = find('.gl-card-footer .btn.btn-success') expect(submit_button).not_to be_disabled submit_button.click end @@ -85,7 +85,7 @@ RSpec.describe 'Project > Settings > CI/CD > Container registry tag expiration p within '#js-registry-policies' do case result when :available_section - expect(find('.card-header')).to have_content('Tag expiration policy') + expect(find('.gl-card-header')).to have_content('Tag expiration policy') when :disabled_message expect(find('.gl-alert-title')).to have_content('Cleanup policy for tags is disabled') end diff --git a/spec/features/projects/settings/service_desk_setting_spec.rb b/spec/features/projects/settings/service_desk_setting_spec.rb index 7856ab1fb4e..59e6f54da2f 100644 --- a/spec/features/projects/settings/service_desk_setting_spec.rb +++ b/spec/features/projects/settings/service_desk_setting_spec.rb @@ -28,6 +28,6 @@ RSpec.describe 'Service Desk Setting', :js do project.reload expect(project.service_desk_enabled).to be_truthy expect(project.service_desk_address).to be_present - expect(find('.incoming-email').value).to eq(project.service_desk_address) + expect(find('[data-testid="incoming-email"]').value).to eq(project.service_desk_address) end end diff --git a/spec/features/projects/settings/webhooks_settings_spec.rb b/spec/features/projects/settings/webhooks_settings_spec.rb index d184f08bd89..528fd58cbe6 100644 --- a/spec/features/projects/settings/webhooks_settings_spec.rb +++ b/spec/features/projects/settings/webhooks_settings_spec.rb @@ -45,6 +45,7 @@ RSpec.describe 'Projects > Settings > Webhook Settings' do expect(page).to have_content('Merge requests events') expect(page).to have_content('Pipeline events') expect(page).to have_content('Wiki page events') + expect(page).to have_content('Releases events') end it 'create webhook' do diff --git a/spec/features/projects/show/schema_markup_spec.rb b/spec/features/projects/show/schema_markup_spec.rb new file mode 100644 index 00000000000..e651798af23 --- /dev/null +++ b/spec/features/projects/show/schema_markup_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Projects > Show > Schema Markup' do + let_it_be(:project) { create(:project, :repository, :public, :with_avatar, description: 'foobar', tag_list: 'tag1, tag2') } + + it 'shows SoftwareSourceCode structured markup', :js do + visit project_path(project) + wait_for_all_requests + + aggregate_failures do + expect(page).to have_selector('[itemscope][itemtype="http://schema.org/SoftwareSourceCode"]') + expect(page).to have_selector('img[itemprop="image"]') + expect(page).to have_selector('[itemprop="name"]', text: project.name) + expect(page).to have_selector('[itemprop="identifier"]', text: "Project ID: #{project.id}") + expect(page).to have_selector('[itemprop="abstract"]', text: project.description) + expect(page).to have_selector('[itemprop="license"]', text: project.repository.license.name) + expect(find_all('[itemprop="keywords"]').map(&:text)).to match_array(project.tag_list.map(&:capitalize)) + expect(page).to have_selector('[itemprop="about"]') + end + end +end diff --git a/spec/features/projects/snippets/create_snippet_spec.rb b/spec/features/projects/snippets/create_snippet_spec.rb index 28fe0a0b7e1..0ed9e23c7f8 100644 --- a/spec/features/projects/snippets/create_snippet_spec.rb +++ b/spec/features/projects/snippets/create_snippet_spec.rb @@ -62,7 +62,7 @@ RSpec.describe 'Projects > Snippets > Create Snippet', :js do click_button('Create snippet') wait_for_requests - link = find('a.no-attachment-icon img[alt="banana_sample"]')['src'] + link = find('a.no-attachment-icon img.js-lazy-loaded[alt="banana_sample"]')['src'] expect(link).to match(%r{/#{Regexp.escape(project.full_path)}/uploads/\h{32}/banana_sample\.gif\z}) end diff --git a/spec/features/projects/terraform_spec.rb b/spec/features/projects/terraform_spec.rb new file mode 100644 index 00000000000..2680dfb2b13 --- /dev/null +++ b/spec/features/projects/terraform_spec.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Terraform', :js do + let_it_be(:project) { create(:project) } + + let(:user) { project.creator } + + before do + gitlab_sign_in(user) + end + + context 'when user does not have any terraform states and visits index page' do + before do + visit project_terraform_index_path(project) + end + + it 'sees an empty state' do + expect(page).to have_content('Get started with Terraform') + end + end + + context 'when user has a terraform state' do + let_it_be(:terraform_state) { create(:terraform_state, :locked, project: project) } + + context 'when user visits the index page' do + before do + visit project_terraform_index_path(project) + end + + it 'displays a tab with states count' do + expect(page).to have_content("States #{project.terraform_states.size}") + end + + it 'displays a table with terraform states' do + expect(page).to have_selector( + '[data-testid="terraform-states-table"] tbody tr', + count: project.terraform_states.size + ) + end + + it 'displays terraform information' do + expect(page).to have_content(terraform_state.name) + end + end + end +end |