Commit 935df5d1 authored by Walmyr Lima's avatar Walmyr Lima

Remove duplication creating an issue board module

There was some duplication in the show page object of group and
project issue boards, so now this is a component that can be used
by both group and project issue boards since they share the same
elements and methods.

Also, update the affected tests accordingly.
parent 11e1f732
......@@ -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)
......
......@@ -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,7 +29,7 @@ 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)
......@@ -55,7 +55,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