Merge branch 'qa-e2e-tests-scoped-labels' into 'master'
Backport of EE changes from MR !13763 See merge request gitlab-org/gitlab-ce!28983
This commit is contained in:
commit
85391f8a45
14 changed files with 98 additions and 24 deletions
|
@ -91,7 +91,7 @@ module DropdownsHelper
|
|||
|
||||
def dropdown_filter(placeholder, search_id: nil)
|
||||
content_tag :div, class: "dropdown-input" do
|
||||
filter_output = search_field_tag search_id, nil, class: "dropdown-input-field", placeholder: placeholder, autocomplete: 'off'
|
||||
filter_output = search_field_tag search_id, nil, class: "dropdown-input-field qa-dropdown-input-field", placeholder: placeholder, autocomplete: 'off'
|
||||
filter_output << icon('search', class: "dropdown-input-search")
|
||||
filter_output << icon('times', class: "dropdown-input-clear js-dropdown-input-clear", role: "button")
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
= _('Labels')
|
||||
= icon('spinner spin', class: 'hidden block-loading', 'aria-hidden': 'true')
|
||||
- if can_edit_issuable
|
||||
= link_to _('Edit'), '#', class: 'js-sidebar-dropdown-toggle edit-link float-right'
|
||||
= link_to _('Edit'), '#', class: 'js-sidebar-dropdown-toggle edit-link qa-edit-link-labels float-right'
|
||||
.value.issuable-show-labels.dont-hide.hide-collapsed.qa-labels-block{ class: ("has-labels" if selected_labels.any?) }
|
||||
- if selected_labels.any?
|
||||
- selected_labels.each do |label_hash|
|
||||
|
@ -118,7 +118,7 @@
|
|||
%span.dropdown-toggle-text{ class: ("is-default" if selected_labels.empty?) }
|
||||
= multi_label_name(selected_labels, "Labels")
|
||||
= icon('chevron-down', 'aria-hidden': 'true')
|
||||
.dropdown-menu.dropdown-select.dropdown-menu-paging.dropdown-menu-labels.dropdown-menu-selectable.dropdown-extended-height
|
||||
.dropdown-menu.dropdown-select.dropdown-menu-paging.qa-dropdown-menu-labels.dropdown-menu-labels.dropdown-menu-selectable.dropdown-extended-height
|
||||
= render partial: "shared/issuable/label_page_default"
|
||||
- if issuable_sidebar.dig(:current_user, :can_admin_label)
|
||||
= render partial: "shared/issuable/label_page_create"
|
||||
|
|
|
@ -357,13 +357,13 @@ In the following we describe the changes needed in each of the resource files me
|
|||
|
||||
Now, let's make it possible to create an issue resource through the API.
|
||||
|
||||
First, in the [issue resource](https://gitlab.com/gitlab-org/gitlab-ee/blob/d3584e80b4236acdf393d815d604801573af72cc/qa/qa/resource/issue.rb), let's expose its labels attribute.
|
||||
First, in the [issue resource](https://gitlab.com/gitlab-org/gitlab-ee/blob/d3584e80b4236acdf393d815d604801573af72cc/qa/qa/resource/issue.rb), let's expose its id and labels attributes.
|
||||
|
||||
Add the following `attribute :labels` right above the [`attribute :title`](https://gitlab.com/gitlab-org/gitlab-ee/blob/d3584e80b4236acdf393d815d604801573af72cc/qa/qa/resource/issue.rb#L15).
|
||||
Add the following `attribute :id` and `attribute :labels` right above the [`attribute :title`](https://gitlab.com/gitlab-org/gitlab-ee/blob/d3584e80b4236acdf393d815d604801573af72cc/qa/qa/resource/issue.rb#L15).
|
||||
|
||||
> This line is needed to allow for labels to be automatically added to an issue when fabricating it via API.
|
||||
> This line is needed to allow for the issue fabrication, and for labels to be automatically added to the issue when fabricating it via API.
|
||||
|
||||
> We add the new line above the existing attribute to keep them alphabetically organized.
|
||||
> We add the attributes above the existing attribute to keep them alphabetically organized.
|
||||
|
||||
Next, add the following code right below the [`fabricate!`](https://gitlab.com/gitlab-org/gitlab-ee/blob/d3584e80b4236acdf393d815d604801573af72cc/qa/qa/resource/issue.rb#L27) method.
|
||||
|
||||
|
|
|
@ -197,6 +197,10 @@ module QA
|
|||
views.map(&:elements).flatten
|
||||
end
|
||||
|
||||
def send_keys_to_element(name, keys)
|
||||
find_element(name).send_keys(keys)
|
||||
end
|
||||
|
||||
class DSL
|
||||
attr_reader :views
|
||||
|
||||
|
|
|
@ -8,11 +8,6 @@ module QA
|
|||
include Page::Component::Issuable::Common
|
||||
include Page::Component::Note
|
||||
|
||||
view 'app/views/shared/notes/_form.html.haml' do
|
||||
element :new_note_form, 'new-note' # rubocop:disable QA/ElementWithPattern
|
||||
element :new_note_form, 'attr: :note' # rubocop:disable QA/ElementWithPattern
|
||||
end
|
||||
|
||||
view 'app/assets/javascripts/notes/components/comment_form.vue' do
|
||||
element :comment_button
|
||||
element :comment_input
|
||||
|
@ -27,6 +22,21 @@ module QA
|
|||
element :noteable_note_item
|
||||
end
|
||||
|
||||
view 'app/helpers/dropdowns_helper.rb' do
|
||||
element :dropdown_input_field
|
||||
end
|
||||
|
||||
view 'app/views/shared/notes/_form.html.haml' do
|
||||
element :new_note_form, 'new-note' # rubocop:disable QA/ElementWithPattern
|
||||
element :new_note_form, 'attr: :note' # rubocop:disable QA/ElementWithPattern
|
||||
end
|
||||
|
||||
view 'app/views/shared/issuable/_sidebar.html.haml' do
|
||||
element :labels_block
|
||||
element :edit_link_labels
|
||||
element :dropdown_menu_labels
|
||||
end
|
||||
|
||||
# Adds a comment to an issue
|
||||
# attachment option should be an absolute path
|
||||
def comment(text, attachment: nil, filter: :all_activities)
|
||||
|
@ -47,6 +57,10 @@ module QA
|
|||
end
|
||||
end
|
||||
|
||||
def select_all_activities_filter
|
||||
select_filter_with_text('Show all activity')
|
||||
end
|
||||
|
||||
def select_comments_only_filter
|
||||
select_filter_with_text('Show comments only')
|
||||
end
|
||||
|
@ -55,8 +69,26 @@ module QA
|
|||
select_filter_with_text('Show history only')
|
||||
end
|
||||
|
||||
def select_all_activities_filter
|
||||
select_filter_with_text('Show all activity')
|
||||
def select_labels_and_refresh(labels)
|
||||
click_element(:edit_link_labels)
|
||||
|
||||
labels.each do |label|
|
||||
within_element(:dropdown_menu_labels, text: label) do
|
||||
send_keys_to_element(:dropdown_input_field, [label, :enter])
|
||||
end
|
||||
end
|
||||
|
||||
click_body
|
||||
|
||||
labels.each do |label|
|
||||
has_element?(:labels_block, text: label)
|
||||
end
|
||||
|
||||
refresh
|
||||
end
|
||||
|
||||
def text_of_labels_block
|
||||
find_element(:labels_block)
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -12,6 +12,8 @@ module QA
|
|||
end
|
||||
end
|
||||
|
||||
attribute :id
|
||||
attribute :labels
|
||||
attribute :title
|
||||
|
||||
def fabricate!
|
||||
|
@ -25,6 +27,21 @@ module QA
|
|||
page.create_new_issue
|
||||
end
|
||||
end
|
||||
|
||||
def api_get_path
|
||||
"/projects/#{project.id}/issues/#{id}"
|
||||
end
|
||||
|
||||
def api_post_path
|
||||
"/projects/#{project.id}/issues"
|
||||
end
|
||||
|
||||
def api_post_body
|
||||
{
|
||||
labels: [labels],
|
||||
title: title
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -34,6 +34,27 @@ module QA
|
|||
page.click_label_create_button
|
||||
end
|
||||
end
|
||||
|
||||
def resource_web_url(resource)
|
||||
super
|
||||
rescue ResourceURLMissingError
|
||||
# this particular resource does not expose a web_url property
|
||||
end
|
||||
|
||||
def api_get_path
|
||||
raise NotImplementedError, "The Labels API doesn't expose a single-resource endpoint so this method cannot be properly implemented."
|
||||
end
|
||||
|
||||
def api_post_path
|
||||
"/projects/#{project}/labels"
|
||||
end
|
||||
|
||||
def api_post_body
|
||||
{
|
||||
color: @color,
|
||||
name: @title
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,7 +9,7 @@ module QA
|
|||
Runtime::Browser.visit(:gitlab, Page::Main::Login)
|
||||
Page::Main::Login.perform(&:sign_in_using_credentials)
|
||||
|
||||
Resource::Issue.fabricate! do |issue|
|
||||
Resource::Issue.fabricate_via_browser_ui! do |issue|
|
||||
issue.title = issue_title
|
||||
end
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ module QA
|
|||
Runtime::Browser.visit(:gitlab, Page::Main::Login)
|
||||
Page::Main::Login.act { sign_in_using_credentials }
|
||||
|
||||
Resource::Issue.fabricate! do |issue|
|
||||
Resource::Issue.fabricate_via_browser_ui! do |issue|
|
||||
issue.title = issue_title
|
||||
end
|
||||
end
|
||||
|
|
|
@ -9,7 +9,7 @@ module QA
|
|||
Runtime::Browser.visit(:gitlab, Page::Main::Login)
|
||||
Page::Main::Login.act { sign_in_using_credentials }
|
||||
|
||||
Resource::Issue.fabricate! do |issue|
|
||||
Resource::Issue.fabricate_via_browser_ui! do |issue|
|
||||
issue.title = issue_title
|
||||
end
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ module QA
|
|||
|
||||
expect(page).to have_content(merge_request_title)
|
||||
expect(page).to have_content(merge_request_description)
|
||||
expect(page).to have_content(/Opened [\w\s]+ ago/)
|
||||
expect(page).to have_content('Opened just now')
|
||||
end
|
||||
|
||||
it 'user creates a new merge request with a milestone and label' do
|
||||
|
@ -41,7 +41,7 @@ module QA
|
|||
milestone.project = current_project
|
||||
end
|
||||
|
||||
new_label = Resource::Label.fabricate! do |label|
|
||||
new_label = Resource::Label.fabricate_via_browser_ui! do |label|
|
||||
label.project = current_project
|
||||
label.title = 'qa-mr-test-label'
|
||||
label.description = 'Merge Request label'
|
||||
|
@ -62,7 +62,7 @@ module QA
|
|||
Page::MergeRequest::Show.perform do |merge_request|
|
||||
expect(merge_request).to have_content(merge_request_title)
|
||||
expect(merge_request).to have_content(merge_request_description)
|
||||
expect(merge_request).to have_content(/Opened [\w\s]+ ago/)
|
||||
expect(merge_request).to have_content('Opened just now')
|
||||
expect(merge_request).to have_assignee(gitlab_account_username)
|
||||
expect(merge_request).to have_label(new_label.title)
|
||||
end
|
||||
|
|
|
@ -19,7 +19,7 @@ module QA
|
|||
|
||||
it 'shows results for the original request and AJAX requests' do
|
||||
# Issue pages always make AJAX requests
|
||||
Resource::Issue.fabricate! do |issue|
|
||||
Resource::Issue.fabricate_via_browser_ui! do |issue|
|
||||
issue.title = 'Performance bar test'
|
||||
end
|
||||
|
||||
|
|
|
@ -125,7 +125,7 @@ module QA
|
|||
super
|
||||
end
|
||||
|
||||
def within_element(name)
|
||||
def within_element(name, text: nil)
|
||||
log("within element :#{name}")
|
||||
|
||||
element = super
|
||||
|
|
|
@ -135,9 +135,9 @@ describe QA::Support::Page::Logging do
|
|||
end
|
||||
|
||||
it 'logs within_element' do
|
||||
expect { subject.within_element(:element) }
|
||||
expect { subject.within_element(:element, text: nil) }
|
||||
.to output(/within element :element/).to_stdout_from_any_process
|
||||
expect { subject.within_element(:element) }
|
||||
expect { subject.within_element(:element, text: nil) }
|
||||
.to output(/end within element :element/).to_stdout_from_any_process
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue