Commit 170e1e54 authored by Dan Davison's avatar Dan Davison

Merge branch 'e2e-test-to-create-board-via-gui' into 'master'

Add end-to-end test for creating a group issue board via the GUI

See merge request gitlab-org/gitlab!18474
parents 5a57f58a 178c6901
......@@ -305,7 +305,11 @@ export default {
<div v-if="canAdminBoard">
<gl-dropdown-divider />
<gl-dropdown-item v-if="multipleIssueBoardsAvailable" @click.prevent="showPage('new')">
<gl-dropdown-item
v-if="multipleIssueBoardsAvailable"
data-qa-selector="create_new_board_button"
@click.prevent="showPage('new')"
>
{{ s__('IssueBoards|Create new board') }}
</gl-dropdown-item>
......
......@@ -15,6 +15,10 @@ module QA
module Component
autoload :DesignManagement, 'qa/ee/page/component/design_management'
module IssueBoard
autoload :Show, 'qa/ee/page/component/issue_board/show'
end
module WebIDE
autoload :WebTerminalPanel, 'qa/ee/page/component/web_ide/web_terminal_panel'
end
......@@ -29,12 +33,6 @@ module QA
autoload :SamlSSOSignIn, 'qa/ee/page/group/saml_sso_sign_in'
autoload :Members, 'qa/ee/page/group/members'
module Issue
module Board
autoload :Show, 'qa/ee/page/group/issue/board/show'
end
end
module Settings
autoload :SamlSSO, 'qa/ee/page/group/settings/saml_sso'
autoload :LDAPSync, 'qa/ee/page/group/settings/ldap_sync'
......@@ -96,10 +94,6 @@ module QA
module Issue
autoload :Index, 'qa/ee/page/project/issue/index'
autoload :Show, 'qa/ee/page/project/issue/show'
module Board
autoload :Show, 'qa/ee/page/project/issue/board/show'
end
end
module Wiki
......
# frozen_string_literal: true
module QA
module EE
module Page
module Component
module IssueBoard
class Show < QA::Page::Base
view 'app/assets/javascripts/boards/components/board_card.vue' do
element :board_card
end
view 'app/assets/javascripts/boards/components/board_form.vue' do
element :board_name_field
end
view 'app/assets/javascripts/boards/components/board_list.vue' do
element :board_list_cards_area
end
view 'app/assets/javascripts/boards/components/boards_selector.vue' do
element :boards_dropdown
element :boards_dropdown_content
element :create_new_board_button
end
view 'app/assets/javascripts/vue_shared/components/deprecated_modal.vue' do
element :save_changes_button
end
view 'app/assets/javascripts/vue_shared/components/sidebar/labels_select/base.vue' do
element :labels_dropdown_content
end
view 'app/assets/javascripts/vue_shared/components/sidebar/labels_select/dropdown_title.vue' do
element :labels_edit_button
end
view 'app/views/shared/boards/_show.html.haml' do
element :boards_list
end
view 'app/views/shared/boards/components/_board.html.haml' do
element :board_list
element :board_list_header
end
view 'ee/app/assets/javascripts/boards/components/board_scope.vue' do
element :board_scope_modal
end
view 'ee/app/assets/javascripts/boards/config_toggle.js' do
element :boards_config_button
end
view 'ee/app/assets/javascripts/boards/toggle_focus.js' do
element :focus_mode_button
end
# The `focused_board` method does not use `find_element` with an element defined
# with the attribute `data-qa-selector` since such element is not unique when the
# `is-focused` class is not set, and it was not possible to find a better solution.
def focused_board
find('.issue-boards-content.js-focus-mode-board.is-focused')
end
def board_scope_modal
find_element(:board_scope_modal)
end
def boards_dropdown
find_element(:boards_dropdown)
end
def boards_dropdown_content
find_element(:boards_dropdown_content)
end
def boards_list_cards_area_with_index(index)
wait_boards_list_finish_loading do
within_element_by_index(:board_list, index) do
find_element(:board_list_cards_area)
end
end
end
def boards_list_header_with_index(index)
wait_boards_list_finish_loading do
within_element_by_index(:board_list, index) do
find_element(:board_list_header)
end
end
end
def card_of_list_with_index(index)
wait_boards_list_finish_loading do
within_element_by_index(:board_list, index) do
find_element(:board_card)
end
end
end
def click_boards_config_button
click_element(:boards_config_button)
end
def click_boards_dropdown_button
# The dropdown button comes from the `GlDropdown` component of `@gitlab/ui`,
# so it wasn't possible to add a `data-qa-selector` to it.
find_element(:boards_dropdown).find('button').click
end
def click_focus_mode_button
click_element(:focus_mode_button)
end
def configure_by_label(label)
click_boards_config_button
click_element(:labels_edit_button)
find_element(:labels_dropdown_content).find('li', text: label).click
click_element(:save_changes_button)
wait_boards_list_finish_loading
end
def create_new_board(board_name)
click_boards_dropdown_button
click_element(:create_new_board_button)
set_name(board_name)
end
def has_modal_board_name_field?
has_element?(:board_name_field, wait: 1)
end
def set_name(name)
find_element(:board_name_field).set(name)
click_element(:save_changes_button)
end
private
def wait_boards_list_finish_loading
within_element(:boards_list) do
wait(reload: false, max: 5, interval: 1) do
finished_loading? && (block_given? ? yield : true)
end
end
end
end
end
end
end
end
end
# frozen_string_literal: true
module QA
module EE
module Page
module Group
module Issue
module Board
class Show < QA::Page::Base
view 'app/assets/javascripts/boards/components/boards_selector.vue' do
element :boards_dropdown
element :boards_dropdown_content
end
def boards_dropdown
find_element(:boards_dropdown)
end
def boards_dropdown_content
find_element(:boards_dropdown_content)
end
def click_boards_dropdown_button
# The dropdown button comes from the `GlDropdown` component of `@gitlab/ui`,
# so it wasn't possible to add a `data-qa-selector` to it.
find_element(:boards_dropdown).find('button').click
end
end
end
end
end
end
end
end
# frozen_string_literal: true
module QA
module EE
module Page
module Project
module Issue
module Board
class Show < QA::Page::Base
view 'app/assets/javascripts/boards/components/board_card.vue' do
element :board_card
end
view 'app/assets/javascripts/boards/components/board_form.vue' do
element :board_name_field
end
view 'app/assets/javascripts/boards/components/board_list.vue' do
element :board_list_cards_area
end
view 'app/assets/javascripts/boards/components/boards_selector.vue' do
element :boards_dropdown
end
view 'app/assets/javascripts/vue_shared/components/deprecated_modal.vue' do
element :save_changes_button
end
view 'app/assets/javascripts/vue_shared/components/sidebar/labels_select/base.vue' do
element :labels_dropdown_content
end
view 'app/assets/javascripts/vue_shared/components/sidebar/labels_select/dropdown_title.vue' do
element :labels_edit_button
end
view 'app/views/shared/boards/_show.html.haml' do
element :boards_list
end
view 'app/views/shared/boards/components/_board.html.haml' do
element :board_list
element :board_list_header
end
view 'ee/app/assets/javascripts/boards/components/board_scope.vue' do
element :board_scope_modal
end
view 'ee/app/assets/javascripts/boards/config_toggle.js' do
element :boards_config_button
end
view 'ee/app/assets/javascripts/boards/toggle_focus.js' do
element :focus_mode_button
end
# The `focused_board` method does not use `find_element` with an element defined
# with the attribute `data-qa-selector` since such element is not unique when the
# `is-focused` class is not set, and it was not possible to find a better solution.
def focused_board
find('.issue-boards-content.js-focus-mode-board.is-focused')
end
def board_scope_modal
find_element(:board_scope_modal)
end
def boards_dropdown
find_element(:boards_dropdown)
end
def boards_list_cards_area_with_index(index)
wait_boards_list_finish_loading do
within_element_by_index(:board_list, index) do
find_element(:board_list_cards_area)
end
end
end
def boards_list_header_with_index(index)
wait_boards_list_finish_loading do
within_element_by_index(:board_list, index) do
find_element(:board_list_header)
end
end
end
def card_of_list_with_index(index)
wait_boards_list_finish_loading do
within_element_by_index(:board_list, index) do
find_element(:board_card)
end
end
end
def click_boards_config_button
click_element(:boards_config_button)
end
def click_focus_mode_button
click_element(:focus_mode_button)
end
def configure_by_label(label)
click_boards_config_button
click_element(:labels_edit_button)
find_element(:labels_dropdown_content).find('li', text: label).click
click_element(:save_changes_button)
wait_boards_list_finish_loading
end
def has_modal_board_name_field?
has_element?(:board_name_field, wait: 1)
end
def set_name(name)
find_element(:board_name_field).set(name)
click_element(:save_changes_button)
end
private
def wait_boards_list_finish_loading
within_element(:boards_list) do
wait(reload: false, max: 5, interval: 1) do
finished_loading? && (block_given? ? yield : true)
end
end
end
end
end
end
end
end
end
end
......@@ -18,7 +18,7 @@ module QA
it 'renames the issue board' do
new_board_name = 'UX'
EE::Page::Project::Issue::Board::Show.perform do |show|
EE::Page::Component::IssueBoard::Show.perform do |show|
show.click_boards_config_button
show.set_name(new_board_name)
......
......@@ -25,7 +25,7 @@ module QA
end
it 'shows only issues that match the configured label' do
EE::Page::Project::Issue::Board::Show.perform do |show|
EE::Page::Component::IssueBoard::Show.perform do |show|
show.configure_by_label(doing)
expect(show).not_to have_content(issue_2)
......
# frozen_string_literal: true
require 'securerandom'
module QA
context 'Plan' do
describe 'Group issue boards' do
before do
Runtime::Browser.visit(:gitlab, Page::Main::Login)
Page::Main::Login.perform(&:sign_in_using_credentials)
group = QA::Resource::Group.fabricate_via_api!
Page::Main::Menu.perform(&:go_to_groups)
Page::Dashboard::Groups.perform do |groups|
groups.click_group(group.path)
end
Page::Group::Menu.perform(&:go_to_issue_boards)
end
it 'creates a group issue board via the GUI' do
EE::Page::Component::IssueBoard::Show.perform do |show|
new_board = "Board-#{SecureRandom.hex(4)}"
show.create_new_board(new_board)
expect(show.boards_dropdown).to have_content(new_board)
end
end
end
end
end
......@@ -18,7 +18,7 @@ module QA
project.visit!
Page::Project::Menu.perform(&:go_to_boards)
EE::Page::Project::Issue::Board::Show.perform do |show|
EE::Page::Component::IssueBoard::Show.perform do |show|
show.click_focus_mode_button
expect(show.focused_board).to be_visible
......
......@@ -29,7 +29,7 @@ module QA
end
it 'shows multiple group boards in the boards dropdown menu' do
EE::Page::Group::Issue::Board::Show.perform do |show|
EE::Page::Component::IssueBoard::Show.perform do |show|
show.click_boards_dropdown_button
expect(show.boards_dropdown_content).to have_content(board_1)
......
......@@ -29,10 +29,9 @@ module QA
end
it 'shows the just created board with a "Doing" (label) list, and an issue on it' do
EE::Page::Project::Issue::Board::Show.perform do |show|
EE::Page::Component::IssueBoard::Show.perform do |show|
expect(show.boards_dropdown).to have_content(label_board_list.board.name)
expect(show.boards_list_header_with_index(1)).to have_content(label)
expect(show.boards_list_cards_area_with_index(1)).to have_content(label)
expect(show.card_of_list_with_index(1)).to have_content(issue_title)
end
end
......@@ -55,7 +54,7 @@ module QA
end
it 'shows the just created board with a "1.0" (milestone) list, and an issue on it' do
EE::Page::Project::Issue::Board::Show.perform do |show|
EE::Page::Component::IssueBoard::Show.perform do |show|
expect(show.boards_dropdown).to have_content(milestone_board_list.board.name)
expect(show.boards_list_header_with_index(1)).to have_content('1.0')
expect(show.card_of_list_with_index(1)).to have_content(issue_title)
......
......@@ -26,7 +26,7 @@ module QA
end
it 'shows board configuration to user without edit permission' do
EE::Page::Project::Issue::Board::Show.perform do |show|
EE::Page::Component::IssueBoard::Show.perform do |show|
show.click_boards_config_button
expect(show.board_scope_modal).to be_visible
......
......@@ -34,7 +34,7 @@ module QA
end
it 'shows the sum of issues weights in the board list\'s header' do
EE::Page::Project::Issue::Board::Show.perform do |show|
EE::Page::Component::IssueBoard::Show.perform do |show|
expect(show.boards_list_header_with_index(1)).to have_content(weight_for_issue_1 + weight_for_issue_2)
end
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