Commit eba09382 authored by Dmytro Zaporozhets's avatar Dmytro Zaporozhets

Merge branch '33905-add-feature-tests-for-vue-packages-list' into 'master'

Add feature tests for the new Vue packages list

See merge request gitlab-org/gitlab!26656
parents 3f4db402 d70d625a
...@@ -213,6 +213,7 @@ export default { ...@@ -213,6 +213,7 @@ export default {
:busy="isLoading" :busy="isLoading"
stacked="md" stacked="md"
class="package-list-table" class="package-list-table"
data-qa-selector="packages-table"
> >
<template #table-busy> <template #table-busy>
<packages-list-loader :is-group="isGroupPage" /> <packages-list-loader :is-group="isGroupPage" />
...@@ -246,7 +247,7 @@ export default { ...@@ -246,7 +247,7 @@ export default {
<gl-link <gl-link
v-gl-tooltip.hover v-gl-tooltip.hover
:title="item.projectPathName" :title="item.projectPathName"
:href="item.project_path" :href="`/${item.project_path}`"
class="flex-truncate-child" class="flex-truncate-child"
> >
{{ item.projectPathName }} {{ item.projectPathName }}
......
...@@ -185,15 +185,32 @@ describe 'Group Packages' do ...@@ -185,15 +185,32 @@ describe 'Group Packages' do
end end
end end
context 'wtih vue_package_list feature flag enabled' do context 'wtih vue_package_list feature flag enabled', :js do
before do before do
stub_feature_flags(vue_package_list: true)
visit_group_packages visit_group_packages
end end
it 'load an empty placeholder' do context 'when there are packages' do
expect(page.has_selector?('#js-vue-packages-list')).to be_truthy let_it_be(:second_project) { create(:project, name: 'second-project', group: group) }
let_it_be(:conan_package) { create(:conan_package, project: project) }
let_it_be(:maven_package) { create(:maven_package, project: second_project) }
let_it_be(:packages) { [maven_package, conan_package] }
it_behaves_like 'packages list', check_project_name: true
it_behaves_like 'package details link'
it 'allows you to navigate to the project page' do
page.within('[data-qa-selector="packages-table"]') do
click_link project.name
end end
expect(page).to have_current_path(project_path(project))
expect(page).to have_content(project.name)
end
end
it_behaves_like 'when there are no packages'
end end
def visit_group_packages def visit_group_packages
......
...@@ -5,8 +5,8 @@ require 'spec_helper' ...@@ -5,8 +5,8 @@ require 'spec_helper'
describe 'Packages' do describe 'Packages' do
include SortingHelper include SortingHelper
let(:user) { create(:user) } let_it_be(:user) { create(:user) }
let(:project) { create(:project) } let_it_be(:project) { create(:project) }
before do before do
sign_in(user) sign_in(user)
...@@ -162,17 +162,37 @@ describe 'Packages' do ...@@ -162,17 +162,37 @@ describe 'Packages' do
end end
end end
context 'wtih vue_package_list ff enabled' do context 'wtih vue_package_list ff enabled', :js do
before do before do
stub_feature_flags(vue_package_list: true)
visit_project_packages visit_project_packages
end end
it 'load an empty placeholder' do context 'when there are packages' do
expect(page.has_selector?('#js-vue-packages-list')).to be_truthy let_it_be(:conan_package) { create(:conan_package, project: project) }
let_it_be(:maven_package) { create(:maven_package, project: project) }
let_it_be(:packages) { [maven_package, conan_package] }
it_behaves_like 'packages list'
it_behaves_like 'package details link'
context 'deleting a package' do
let_it_be(:project) { create(:project) }
let_it_be(:package) { create(:package, project: project) }
it 'allows you to delete a package' do
first('[title="Remove package"]').click
click_button('Delete package')
expect(page).to have_content 'Package deleted successfully'
expect(page).not_to have_content(package.name)
end
end end
end end
it_behaves_like 'when there are no packages'
end
def visit_project_packages def visit_project_packages
visit project_packages_path(project) visit project_packages_path(project)
end end
......
# frozen_string_literal: true
RSpec.shared_examples 'packages list' do |check_project_name: false|
it 'shows a list of packages' do
wait_for_requests
packages.each_with_index do |pkg, index|
package_row = package_table_row(index)
expect(package_row).to have_content(pkg.name)
expect(package_row).to have_content(pkg.version)
expect(package_row).to have_content(pkg.project.name) if check_project_name
end
end
def package_table_row(index)
page.all(packages_table_selector)[index].text
end
end
RSpec.shared_examples 'package details link' do |property|
let(:package) { packages.first }
it 'navigates to the correct url' do
page.within(packages_table_selector) do
click_link package.name
end
expect(page).to have_current_path(project_package_path(package.project, package))
page.within('.detail-page-header') do
expect(page).to have_content(package.name)
end
page.within('[data-qa-selector="package_information_content"]') do
expect(page).to have_content('Installation')
expect(page).to have_content('Registry Setup')
end
end
end
RSpec.shared_examples 'when there are no packages' do
it 'displays the empty message' do
expect(page).to have_content('There are no packages yet')
end
end
def packages_table_selector
'[data-qa-selector="packages-table"] tbody tr'
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment