Commit 4ca162db authored by Sanad Liaquat's avatar Sanad Liaquat

Merge branch 'dirty-fix-for-prepended-modules' into 'master'

Fix including/prepending QA modules

Closes #213208

See merge request gitlab-org/gitlab!28694
parents 95ccd4d2 4d36096c
......@@ -238,6 +238,53 @@ the view for code in a library.
In such rare cases it's reasonable to use CSS selectors in page object methods,
with a comment explaining why an `element` can't be added.
### Define Page concerns
Some pages share common behaviors, and/or are prepended with EE-specific modules that adds EE-specific methods.
These modules must:
1. Extend from the `QA::Page::PageConcern` module, with `extend QA::Page::PageConcern`.
1. Override the `self.prepended` method if they need to `include`/`prepend` other modules themselves, and/or define
`view` or `elements`.
1. Call `super` as the first thing in `self.prepended`.
1. Include/prepend other modules and define their `view`/`elements` in a `base.class_eval` block to ensure they're
defined in the class that prepends the module.
These steps ensure the sanity selectors check will detect problems properly.
For example, `qa/qa/ee/page/merge_request/show.rb` adds EE-specific methods to `qa/qa/page/merge_request/show.rb` (with
`QA::Page::MergeRequest::Show.prepend_if_ee('QA::EE::Page::MergeRequest::Show')`) and following is how it's implemented
(only showing the relevant part and refering to the 4 steps described above with inline comments):
```ruby
module QA
module EE
module Page
module MergeRequest
module Show
extend QA::Page::PageConcern # 1.
def self.prepended(base) # 2.
super # 3.
base.class_eval do # 4.
prepend Page::Component::LicenseManagement
view 'app/assets/javascripts/vue_merge_request_widget/components/states/sha_mismatch.vue' do
element :head_mismatch, "The source branch HEAD has recently changed."
end
[...]
end
end
end
end
end
end
end
```
## Running the test locally
During development, you can run the `qa:selectors` test by running
......
......@@ -162,6 +162,7 @@ module QA
autoload :Base, 'qa/page/base'
autoload :View, 'qa/page/view'
autoload :Element, 'qa/page/element'
autoload :PageConcern, 'qa/page/page_concern'
autoload :Validator, 'qa/page/validator'
autoload :Validatable, 'qa/page/validatable'
......@@ -248,7 +249,6 @@ module QA
end
module Settings
autoload :Common, 'qa/page/project/settings/common'
autoload :Advanced, 'qa/page/project/settings/advanced'
autoload :Main, 'qa/page/project/settings/main'
autoload :Repository, 'qa/page/project/settings/repository'
......@@ -409,6 +409,7 @@ module QA
autoload :Breadcrumbs, 'qa/page/component/breadcrumbs'
autoload :CiBadgeLink, 'qa/page/component/ci_badge_link'
autoload :ClonePanel, 'qa/page/component/clone_panel'
autoload :DesignManagement, 'qa/page/component/design_management'
autoload :LazyLoader, 'qa/page/component/lazy_loader'
autoload :LegacyClonePanel, 'qa/page/component/legacy_clone_panel'
autoload :Dropzone, 'qa/page/component/dropzone'
......
......@@ -5,8 +5,12 @@ module QA
module Page
module Admin
module Menu
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'app/views/layouts/nav/sidebar/_admin.html.haml' do
element :admin_settings_template_item
end
......
......@@ -7,8 +7,12 @@ module QA
module Overview
module Groups
module Edit
def self.included(page)
page.class_eval do
extend QA::Page::PageConcern
def self.included(base)
super
base.class_eval do
view 'ee/app/views/admin/_namespace_plan.html.haml' do
element :plan_dropdown
end
......
......@@ -5,8 +5,12 @@ module QA
module Page
module Component
module LicenseManagement
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'app/assets/javascripts/reports/components/report_item.vue' do
element :report_item_row
end
......
......@@ -5,8 +5,12 @@ module QA
module Page
module Component
module SecureReport
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'ee/app/assets/javascripts/security_dashboard/components/filter.vue' do
element :filter_dropdown, ':data-qa-selector="qaSelector"' # rubocop:disable QA/ElementWithPattern
element :filter_dropdown_content
......
......@@ -6,8 +6,12 @@ module QA
module Component
module WebIDE
module WebTerminalPanel
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'app/assets/javascripts/ide/components/panes/collapsible_sidebar.vue' do
element :ide_right_sidebar, %q(:data-qa-selector="`ide_${side}_sidebar`") # rubocop:disable QA/ElementWithPattern
element :terminal_tab_button, %q(:data-qa-selector="`${tab.title.toLowerCase()}_tab_button`") # rubocop:disable QA/ElementWithPattern
......
......@@ -5,8 +5,12 @@ module QA
module Page
module Dashboard
module Projects
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'app/views/shared/projects/_list.html.haml' do
element :projects_list
end
......
......@@ -5,8 +5,12 @@ module QA
module Page
module File
module Show
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'ee/app/views/projects/blob/_owners.html.haml' do
element :file_owner_content
element :link_file_owner
......
......@@ -5,10 +5,14 @@ module QA
module Page
module Group
module Menu
prepend QA::Page::Group::SubMenus::Common
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
prepend QA::Page::Group::SubMenus::Common
view 'ee/app/views/groups/ee/_settings_nav.html.haml' do
element :ldap_synchronization_link
element :audit_events_settings_link
......
......@@ -3,7 +3,8 @@
module QA
module EE
module Page
module Group::Secure
module Group
module Secure
class Show < QA::Page::Base
include Page::Component::SecureReport
......@@ -21,4 +22,5 @@ module QA
end
end
end
end
end
......@@ -6,11 +6,15 @@ module QA
module Group
module Settings
module General
prepend ::QA::Page::Component::Select2
prepend ::QA::Page::Settings::Common
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
prepend ::QA::Page::Component::Select2
prepend ::QA::Page::Settings::Common
view 'ee/app/views/groups/_custom_project_templates_setting.html.haml' do
element :custom_project_template_select
element :custom_project_templates
......
......@@ -8,6 +8,7 @@ module QA
view 'ee/app/assets/javascripts/insights/components/insights.vue' do
element :insights_dashboard_dropdown
end
view 'ee/app/assets/javascripts/insights/components/insights_page.vue' do
element :insights_charts
element :insights_page
......
......@@ -5,10 +5,14 @@ module QA
module Page
module MergeRequest
module New
include QA::Page::Component::Select2
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
prepend ::QA::Page::Component::Select2
def self.prepended(page)
page.module_eval do
view 'ee/app/assets/javascripts/approvals/components/app.vue' do
element :add_approvers_button
end
......
......@@ -5,10 +5,14 @@ module QA
module Page
module MergeRequest
module Show
include Page::Component::LicenseManagement
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
prepend Page::Component::LicenseManagement
def self.prepended(page)
page.module_eval do
view 'app/assets/javascripts/vue_merge_request_widget/components/states/sha_mismatch.vue' do
element :head_mismatch, "The source branch HEAD has recently changed." # rubocop:disable QA/ElementWithPattern
end
......
......@@ -5,6 +5,8 @@ module QA
module Page
module Profile
module Menu
extend QA::Page::PageConcern
def wait_for_key_to_replicate(text, max_wait: Runtime::Geo.max_file_replication_time)
wait_until(max_duration: max_wait) { page.has_text?(text) }
end
......
......@@ -6,8 +6,12 @@ module QA
module Project
module Issue
module Index
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'app/views/shared/issuable/_search_bar.html.haml' do
element :issue_filter_form, /form_tag.+class: 'filter-form / # rubocop:disable QA/ElementWithPattern
element :issue_filter_input, /%input.form-control.filtered-search/ # rubocop:disable QA/ElementWithPattern
......
......@@ -6,8 +6,12 @@ module QA
module Project
module Issue
module Show
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'ee/app/assets/javascripts/related_issues/components/add_issuable_form.vue' do
element :add_issue_button
end
......
......@@ -5,13 +5,22 @@ module QA
module Page
module Project
module Menu
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
prepend QA::Page::Project::SubMenus::Common
prepend SubMenus::SecurityCompliance
prepend SubMenus::Packages
prepend SubMenus::Project
prepend SubMenus::Repository
prepend SubMenus::Settings
end
end
end
end
end
end
end
......@@ -5,8 +5,12 @@ module QA
module Page
module Project
module New
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'ee/app/views/projects/_project_templates.html.haml' do
element :group_templates_tab
element :group_template_tab_badge
......
......@@ -7,8 +7,12 @@ module QA
module Operations
module Kubernetes
module Show
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'ee/app/views/clusters/clusters/_health.html.haml' do
element :cluster_health_section
end
......
......@@ -7,10 +7,14 @@ module QA
module Operations
module Metrics
module Show
extend QA::Page::PageConcern
EXPECTED_LABEL = 'Total (GB)'
def self.prepended(page)
page.module_eval do
def self.prepended(base)
super
base.class_eval do
view 'app/assets/javascripts/monitoring/components/alert_widget_form.vue' do
element :alert_query_dropdown
element :alert_query_option
......
# frozen_string_literal: true
module QA::EE
module Page::Project
module QA
module EE
module Page
module Project
module Pipeline
module Show
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
include Page::Component::LicenseManagement
include Page::Component::SecureReport
def self.prepended(page)
page.module_eval do
view 'ee/app/views/projects/pipelines/_tabs_holder.html.haml' do
element :security_tab
element :licenses_tab
......@@ -31,4 +37,6 @@ module QA::EE
end
end
end
end
end
end
......@@ -3,7 +3,8 @@
module QA
module EE
module Page
module Project::Secure
module Project
module Secure
class DependencyList < QA::Page::Base
view 'ee/app/assets/javascripts/dependencies/components/app.vue' do
element :dependency_list_all_count, "dependency_list_${label.toLowerCase().replace(' ', '_')" # rubocop:disable QA/ElementWithPattern
......@@ -16,4 +17,5 @@ module QA
end
end
end
end
end
......@@ -3,7 +3,8 @@
module QA
module EE
module Page
module Project::Secure
module Project
module Secure
class Show < QA::Page::Base
include Page::Component::SecureReport
......@@ -14,4 +15,5 @@ module QA
end
end
end
end
end
# frozen_string_literal: true
module QA::EE
module QA
module EE
module Page
module Project
module Settings
module CICD
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'ee/app/views/projects/settings/ci_cd/_managed_licenses.html.haml' do
element :license_compliance_settings_content
end
......@@ -22,4 +27,5 @@ module QA::EE
end
end
end
end
end
# frozen_string_literal: true
module QA::EE
module QA
module EE
module Page
module Project
module Settings
......@@ -64,4 +65,5 @@ module QA::EE
end
end
end
end
end
......@@ -6,10 +6,14 @@ module QA
module Project
module Settings
module MergeRequest
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
include Page::Component::SecureReport
def self.prepended(page)
page.module_eval do
view 'ee/app/views/projects/_merge_pipelines_settings.html.haml' do
element :merged_results_pipeline_checkbox
end
......
......@@ -6,8 +6,12 @@ module QA
module Project
module Settings
module MirroringRepositories
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'ee/app/views/projects/mirrors/_mirror_repos_form.html.haml' do
element :mirror_direction
end
......
......@@ -6,8 +6,12 @@ module QA
module Project
module Settings
module ProtectedBranches
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'ee/app/views/projects/protected_branches/ee/_create_protected_branch.html.haml' do
element :allowed_to_push_select
element :allowed_to_push_dropdown
......
......@@ -6,8 +6,12 @@ module QA
module Project
module Settings
module Repository
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'ee/app/views/projects/push_rules/_index.html.haml' do
element :push_rules_content
end
......
......@@ -5,6 +5,8 @@ module QA
module Page
module Project
module Show
extend QA::Page::PageConcern
def wait_for_repository_replication(max_wait: Runtime::Geo.max_file_replication_time)
QA::Runtime::Logger.debug(%Q[#{self.class.name} - wait_for_repository_replication])
wait_until_geo_max_replication_time(max_wait: max_wait) do
......
......@@ -6,8 +6,10 @@ module QA
module Project
module SubMenus
module Packages
def self.included(page)
page.class_eval do
extend QA::Page::PageConcern
def self.prepended(base)
base.class_eval do
view 'ee/app/views/layouts/nav/sidebar/_project_packages_link.html.haml' do
element :packages_link
end
......
......@@ -6,8 +6,10 @@ module QA
module Project
module SubMenus
module Repository
def self.included(page)
page.class_eval do
extend QA::Page::PageConcern
def self.prepended(base)
base.class_eval do
view 'ee/app/views/projects/sidebar/_repository_locked_files.html.haml' do
element :path_locks_link
end
......
......@@ -6,8 +6,10 @@ module QA
module Project
module SubMenus
module SecurityCompliance
def self.included(page)
page.class_eval do
extend QA::Page::PageConcern
def self.prepended(base)
base.class_eval do
view 'ee/app/views/layouts/nav/sidebar/_project_security_link.html.haml' do
element :security_dashboard_link
element :dependency_list_link
......
......@@ -6,10 +6,12 @@ module QA
module Project
module SubMenus
module Settings
include QA::Page::Project::SubMenus::Common
extend QA::Page::PageConcern
def self.included(base)
def self.prepended(base)
base.class_eval do
prepend QA::Page::Project::SubMenus::Common
view 'ee/app/views/projects/sidebar/_settings_audit_events.html.haml' do
element :audit_events_settings_link
end
......
......@@ -6,6 +6,8 @@ module QA
module Project
module Wiki
module Show
extend QA::Page::PageConcern
def wait_for_repository_replication(max_wait: Runtime::Geo.max_file_replication_time)
QA::Runtime::Logger.debug(%Q[#{self.class.name} - wait_for_repository_replication])
wait_until_geo_max_replication_time(max_wait: max_wait) do
......
......@@ -4,7 +4,11 @@ module QA
module Page
module Component
module Breadcrumbs
extend QA::Page::PageConcern
def self.included(base)
super
base.view 'app/views/layouts/nav/_breadcrumbs.html.haml' do
element :breadcrumb_links_content
end
......
......@@ -4,6 +4,8 @@ module QA
module Page
module Component
module CiBadgeLink
extend QA::Page::PageConcern
COMPLETED_STATUSES = %w[passed failed canceled blocked skipped manual].freeze # excludes created, pending, running
INCOMPLETE_STATUSES = %w[pending created running].freeze
......@@ -27,6 +29,8 @@ module QA
end
def self.included(base)
super
base.view 'app/assets/javascripts/vue_shared/components/ci_badge_link.vue' do
element :status_badge
end
......
......@@ -4,7 +4,11 @@ module QA
module Page
module Component
module ClonePanel
extend QA::Page::PageConcern
def self.included(base)
super
base.view 'app/views/projects/buttons/_clone.html.haml' do
element :clone_dropdown
element :clone_options
......
......@@ -4,7 +4,11 @@ module QA
module Page
module Component
module ConfirmModal
extend QA::Page::PageConcern
def self.included(base)
super
base.view 'app/views/shared/_confirm_modal.html.haml' do
element :confirm_modal
element :confirm_input
......
......@@ -4,7 +4,11 @@ module QA
module Page
module Component
module CustomMetric
extend QA::Page::PageConcern
def self.included(base)
super
base.view 'app/assets/javascripts/custom_metrics/components/custom_metrics_form_fields.vue' do
element :custom_metric_prometheus_title_field
element :custom_metric_prometheus_query_field
......
......@@ -4,8 +4,12 @@ module QA
module Page
module Component
module DesignManagement
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.included(base)
super
base.class_eval do
view 'app/assets/javascripts/design_management/components/design_notes/design_discussion.vue' do
element :design_discussion_content
end
......
......@@ -4,7 +4,11 @@ module QA
module Page
module Component
module GroupsFilter
extend QA::Page::PageConcern
def self.included(base)
super
base.view 'app/views/shared/groups/_search_form.html.haml' do
element :groups_filter
end
......
......@@ -5,7 +5,11 @@ module QA
module Component
module Issuable
module Common
extend QA::Page::PageConcern
def self.included(base)
super
base.view 'app/assets/javascripts/issue_show/components/title.vue' do
element :edit_button
element :title, required: true
......
......@@ -4,7 +4,11 @@ module QA
module Page
module Component
module LazyLoader
extend QA::Page::PageConcern
def self.included(base)
super
base.view 'app/assets/javascripts/lazy_loader.js' do
element :js_lazy_loaded
end
......
......@@ -4,7 +4,11 @@ module QA
module Page
module Component
module LegacyClonePanel
extend QA::Page::PageConcern
def self.included(base)
super
base.view 'app/views/shared/_clone_panel.html.haml' do
element :clone_dropdown
element :clone_options_dropdown, '.clone-options-dropdown' # rubocop:disable QA/ElementWithPattern
......
......@@ -4,7 +4,11 @@ module QA
module Page
module Component
module Note
extend QA::Page::PageConcern
def self.included(base)
super
base.view 'app/assets/javascripts/notes/components/comment_form.vue' do
element :note_dropdown
element :discussion_option
......
......@@ -5,8 +5,12 @@ module QA
module Component
module WebIDE
module Alert
def self.prepended(page)
page.module_eval do
extend QA::Page::PageConcern
def self.prepended(base)
super
base.class_eval do
view 'app/assets/javascripts/ide/components/error_message.vue' do
element :flash_alert
end
......
......@@ -5,7 +5,11 @@ module QA
module File
module Shared
module CommitButton
extend QA::Page::PageConcern
def self.included(base)
super
base.view 'app/views/projects/_commit_button.html.haml' do
element :commit_button
end
......
......@@ -5,7 +5,11 @@ module QA
module File
module Shared
module CommitMessage
extend QA::Page::PageConcern
def self.included(base)
super
base.view 'app/views/shared/_commit_message_container.html.haml' do
element :commit_message, "text_area_tag 'commit_message'" # rubocop:disable QA/ElementWithPattern
end
......
......@@ -5,7 +5,11 @@ module QA
module File
module Shared
module Editor
extend QA::Page::PageConcern
def self.included(base)
super
base.view 'app/views/projects/blob/_editor.html.haml' do
element :editor
end
......
......@@ -5,9 +5,12 @@ module QA
module Group
module SubMenus
module Common
extend QA::Page::PageConcern
include QA::Page::SubMenus::Common
def self.included(base)
super
base.class_eval do
view 'app/views/layouts/nav/sidebar/_group.html.haml' do
element :group_sidebar
......
# frozen_string_literal: true
module QA
module Page::Main
module Page
module Main
class Terms < Page::Base
view 'app/views/layouts/terms.html.haml' do
element :user_avatar, required: true
......@@ -18,4 +19,5 @@ module QA
end
end
end
end
end
module QA
module Page
module PageConcern
def included(base)
unless base.is_a?(Class)
raise "Expected #{self} to be prepended to a class, but #{base} is a module!"
end
unless base.ancestors.include?(::QA::Page::Base)
raise "Expected #{self} to be prepended to a class that inherits from ::QA::Page::Base, but #{base} doesn't!"
end
end
alias_method :prepended, :included
end
end
end
# frozen_string_literal: true
module QA::Page
module Project::Job
module QA
module Page
module Project
module Job
class Show < QA::Page::Base
include Component::CiBadgeLink
......@@ -50,4 +52,6 @@ module QA::Page
end
end
end
end
end
end
# frozen_string_literal: true
module QA::Page
module Project::Pipeline
module QA
module Page
module Project
module Pipeline
class Index < QA::Page::Base
view 'app/assets/javascripts/pipelines/components/pipeline_url.vue' do
element :pipeline_url_link
......@@ -40,4 +42,6 @@ module QA::Page
end
end
end
end
end
end
# frozen_string_literal: true
module QA::Page
module Project::Pipeline
module QA
module Page
module Project
module Pipeline
class Show < QA::Page::Base
include Component::CiBadgeLink
......@@ -71,6 +73,8 @@ module QA::Page
end
end
end
end
end
end
QA::Page::Project::Pipeline::Show.prepend_if_ee('QA::EE::Page::Project::Pipeline::Show')
......@@ -5,7 +5,7 @@ module QA
module Project
module Settings
class CICD < Page::Base
include Common
include QA::Page::Settings::Common
view 'app/views/projects/settings/ci_cd/show.html.haml' do
element :autodevops_settings_content
......
......@@ -5,7 +5,7 @@ module QA
module Project
module Settings
class CiVariables < Page::Base
include Common
include QA::Page::Settings::Common
view 'app/assets/javascripts/ci_variable_list/components/ci_variable_modal.vue' do
element :ci_variable_key_field
......
# frozen_string_literal: true
module QA
module Page
module Project
module Settings
module Common
include QA::Page::Settings::Common
end
end
end
end
end
......@@ -5,7 +5,7 @@ module QA
module Project
module Settings
class GeneralPipelines < Page::Base
include Common
include QA::Page::Settings::Common
view 'app/views/projects/settings/ci_cd/_form.html.haml' do
element :build_coverage_regex_field
......
......@@ -5,7 +5,7 @@ module QA
module Project
module Settings
class Main < Page::Base
include Common
include QA::Page::Settings::Common
include Component::Select2
include SubMenus::Project
......
......@@ -5,7 +5,7 @@ module QA
module Project
module Settings
class MergeRequest < QA::Page::Base
include Common
include QA::Page::Settings::Common
view 'app/views/projects/edit.html.haml' do
element :save_merge_request_changes
......
......@@ -5,7 +5,7 @@ module QA
module Project
module Settings
class Operations < Page::Base
include Common
include QA::Page::Settings::Common
view 'app/views/projects/settings/operations/_incidents.html.haml' do
element :incidents_settings_content
......
......@@ -5,7 +5,7 @@ module QA
module Project
module Settings
class Repository < Page::Base
include Common
include QA::Page::Settings::Common
view 'app/views/projects/protected_branches/shared/_index.html.haml' do
element :protected_branches_settings
......
......@@ -5,10 +5,14 @@ module QA
module Project
module SubMenus
module CiCd
include Page::Project::SubMenus::Common
extend QA::Page::PageConcern
def self.included(base)
super
base.class_eval do
include QA::Page::Project::SubMenus::Common
view 'app/views/layouts/nav/sidebar/_project.html.haml' do
element :link_pipelines
end
......
......@@ -5,6 +5,7 @@ module QA
module Project
module SubMenus
module Common
extend QA::Page::PageConcern
include QA::Page::SubMenus::Common
private
......
......@@ -5,10 +5,14 @@ module QA
module Project
module SubMenus
module Issues
include Page::Project::SubMenus::Common
extend QA::Page::PageConcern
def self.included(base)
super
base.class_eval do
include QA::Page::Project::SubMenus::Common
view 'app/views/layouts/nav/sidebar/_project.html.haml' do
element :issue_boards_link
element :issues_item
......
......@@ -5,10 +5,14 @@ module QA
module Project
module SubMenus
module Operations
include Page::Project::SubMenus::Common
extend QA::Page::PageConcern
def self.included(base)
super
base.class_eval do
include QA::Page::Project::SubMenus::Common
view 'app/views/layouts/nav/sidebar/_project.html.haml' do
element :operations_link
element :operations_environments_link
......
......@@ -5,10 +5,14 @@ module QA
module Project
module SubMenus
module Project
include Common
extend QA::Page::PageConcern
def self.included(base)
super
base.class_eval do
include QA::Page::Project::SubMenus::Common
view 'app/views/layouts/nav/sidebar/_project.html.haml' do
element :project_link
end
......
......@@ -5,10 +5,14 @@ module QA
module Project
module SubMenus
module Repository
include Page::Project::SubMenus::Common
extend QA::Page::PageConcern
def self.included(base)
super
base.class_eval do
include QA::Page::Project::SubMenus::Common
view 'app/views/layouts/nav/sidebar/_project.html.haml' do
element :project_menu_repo
element :branches_link
......@@ -44,5 +48,3 @@ module QA
end
end
end
QA::Page::Project::SubMenus::Repository.prepend_if_ee('QA::EE::Page::Project::SubMenus::Repository')
......@@ -5,10 +5,14 @@ module QA
module Project
module SubMenus
module Settings
include Page::Project::SubMenus::Common
extend QA::Page::PageConcern
def self.included(base)
super
base.class_eval do
include QA::Page::Project::SubMenus::Common
view 'app/views/layouts/nav/sidebar/_project.html.haml' do
element :settings_item
element :link_members_settings
......
# frozen_string_literal: true
module QA::Page
module QA
module Page
module Search
class Results < QA::Page::Base
view 'app/views/search/_category.html.haml' do
......@@ -52,4 +53,5 @@ module QA::Page
end
end
end
end
end
......@@ -2,7 +2,9 @@
require 'rspec/core'
module QA::Specs::Helpers
module QA
module Specs
module Helpers
module Quarantine
include RSpec::Core::Pending
......@@ -81,4 +83,6 @@ module QA::Specs::Helpers
(metadata.keys & included_filters.keys).empty?
end
end
end
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