Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2022-04-27 03:10:49 +00:00
parent b9a77f953c
commit d399afc946
16 changed files with 94 additions and 10 deletions

View File

@ -22,7 +22,7 @@
selected: f.object.source_project_id
.merge-request-select.dropdown
= f.hidden_field :source_branch
= dropdown_toggle f.object.source_branch.presence || _("Select source branch"), { toggle: "dropdown", 'field-name': "#{f.object_name}[source_branch]", 'refs-url': refs_project_path(@source_project), selected: f.object.source_branch }, { toggle_class: "js-compare-dropdown js-source-branch monospace" }
= dropdown_toggle f.object.source_branch.presence || _("Select source branch"), { toggle: "dropdown", 'field-name': "#{f.object_name}[source_branch]", 'refs-url': refs_project_path(@source_project), selected: f.object.source_branch, qa_selector: "source_branch_dropdown" }, { toggle_class: "js-compare-dropdown js-source-branch monospace" }
.dropdown-menu.dropdown-menu-selectable.js-source-branch-dropdown.git-revision-dropdown
= dropdown_title(_("Select source branch"))
= dropdown_filter(_("Search branches"))
@ -62,4 +62,4 @@
- if @merge_request.errors.any?
= form_errors(@merge_request)
= f.submit 'Compare branches and continue', class: "gl-button btn btn-confirm mr-compare-btn"
= f.submit 'Compare branches and continue', class: "gl-button btn btn-confirm mr-compare-btn", data: { qa_selector: "compare_branches_button" }

View File

@ -42,4 +42,4 @@
- if project_select_button
= render 'shared/new_project_item_select', path: 'merge_requests/new', label: _('merge request'), type: :merge_requests, with_feature_enabled: 'merge_requests'
- else
= link_to _('New merge request'), button_path, class: 'gl-button btn btn-confirm', title: _('New merge request'), id: 'new_merge_request_link'
= link_to _('New merge request'), button_path, class: 'gl-button btn btn-confirm', title: _('New merge request'), id: 'new_merge_request_link', data: { qa_selector: "new_merge_request_button" }

View File

@ -10,6 +10,26 @@ module QA
Page::Project::Settings::Main.perform(&:expand_merge_requests_settings)
Page::Project::Settings::MergeRequest.perform(&:enable_merge_train)
end
# Opens the form to create a new merge request.
# It tries to use the "Create merge request" button that appears after
# a commit is pushed, but if that button isn't available, it uses the
# "New merge request" button on the page that lists merge requests.
#
# @param [String] source_branch the branch to be merged
def create_new(source_branch:)
if Page::Project::Show.perform(&:has_create_merge_request_button?)
Page::Project::Show.perform(&:new_merge_request)
return
end
Page::Project::Menu.perform(&:click_merge_requests)
Page::MergeRequest::Index.perform(&:click_new_merge_request)
Page::MergeRequest::New.perform do |merge_request|
merge_request.select_source_branch(source_branch)
merge_request.click_compare_branches_and_continue
end
end
end
end
end

View File

@ -218,6 +218,15 @@ module QA
page.validate_elements_present! if page
end
# Uses capybara to locate and click an element instead of `click_element`.
# This can be used when it's not possible to add a QA selector but we still want to log the click
#
# @param [String] method the capybara method to use
# @param [String] locator the selector used to find the element
def click_via_capybara(method, locator)
page.public_send(method, locator)
end
def fill_element(name, content)
find_element(name).set(content)
end

View File

@ -0,0 +1,17 @@
# frozen_string_literal: true
module QA
module Page
module MergeRequest
class Index < Page::Base
view 'app/views/shared/empty_states/_merge_requests.html.haml' do
element :new_merge_request_button
end
def click_new_merge_request
click_element(:new_merge_request_button)
end
end
end
end
end

View File

@ -12,6 +12,11 @@ module QA
element :issuable_form_description
end
view 'app/views/projects/merge_requests/creations/_new_compare.html.haml' do
element :compare_branches_button
element :source_branch_dropdown
end
view 'app/views/projects/merge_requests/show.html.haml' do
element :diffs_tab
end
@ -27,6 +32,10 @@ module QA
"to customize #{scanner_name} settings."
end
def click_compare_branches_and_continue
click_element(:compare_branches_button)
end
def create_merge_request
click_element(:issuable_create_button, Page::MergeRequest::Show)
end
@ -43,6 +52,12 @@ module QA
def has_file?(file_name)
has_element?(:file_name_content, text: file_name)
end
def select_source_branch(branch)
click_element(:source_branch_dropdown)
fill_element(:dropdown_input_field, branch)
click_via_capybara(:click_on, branch)
end
end
end
end

View File

@ -120,6 +120,10 @@ module QA
click_element(:new_issue_link)
end
def has_create_merge_request_button?
has_css?(element_selector_css(:create_merge_request))
end
def has_file?(name)
return false unless has_element?(:file_tree_table)
@ -144,7 +148,7 @@ module QA
def new_merge_request
wait_until(reload: true) do
has_css?(element_selector_css(:create_merge_request))
has_create_merge_request_button?
end
click_element :create_merge_request

View File

@ -83,7 +83,7 @@ module QA
populate_target_and_source_if_required
project.visit!
Page::Project::Show.perform(&:new_merge_request)
Flow::MergeRequest.create_new(source_branch: source_branch)
Page::MergeRequest::New.perform do |new_page|
new_page.fill_title(@title)
new_page.choose_template(@template) if @template

View File

@ -82,6 +82,12 @@ module QA
super
end
def click_via_capybara(method, locator)
log("clicking via capybara using '#{method}(#{locator})'")
super
end
def fill_element(name, content)
masked_content = name.to_s.match?(/token|key|password/) ? '*****' : content

View File

@ -15,6 +15,7 @@ RSpec.describe ::Mutations::BaseMutation do
context 'when argument is nullable and required' do
let(:mutation_class) do
Class.new(described_class) do
graphql_name 'BaseMutation'
argument :foo, GraphQL::Types::String, required: :nullable
end
end
@ -35,6 +36,7 @@ RSpec.describe ::Mutations::BaseMutation do
context 'when argument is required and NOT nullable' do
let(:mutation_class) do
Class.new(described_class) do
graphql_name 'BaseMutation'
argument :foo, GraphQL::Types::String, required: true
end
end

View File

@ -13,7 +13,7 @@ RSpec.describe Mutations::FindsByGid do
end
end
let(:query) { double('Query', schema: GitlabSchema) }
let(:query) { query_double(schema: GitlabSchema) }
let(:context) { GraphQL::Query::Context.new(query: query, object: nil, values: { current_user: user }) }
let(:user) { create(:user) }
let(:gid) { user.to_global_id }

View File

@ -3,6 +3,7 @@
require 'spec_helper'
RSpec.describe Mutations::MergeRequests::Accept do
include GraphqlHelpers
include AfterNextHelpers
subject(:mutation) { described_class.new(context: context, object: nil, field: nil) }
@ -12,7 +13,7 @@ RSpec.describe Mutations::MergeRequests::Accept do
let(:project) { create(:project, :public, :repository) }
let(:context) do
GraphQL::Query::Context.new(
query: double('query', schema: GitlabSchema),
query: query_double(schema: GitlabSchema),
values: { current_user: user },
object: nil
)

View File

@ -3,6 +3,8 @@
require 'spec_helper'
RSpec.describe Mutations::MergeRequests::Create do
include GraphqlHelpers
subject(:mutation) { described_class.new(object: nil, context: context, field: nil) }
let_it_be(:project) { create(:project, :public, :repository) }
@ -10,7 +12,7 @@ RSpec.describe Mutations::MergeRequests::Create do
let(:context) do
GraphQL::Query::Context.new(
query: double('query', schema: nil),
query: query_double(schema: nil),
values: { current_user: user },
object: nil
)

View File

@ -3,13 +3,15 @@
require 'spec_helper'
RSpec.describe Gitlab::Graphql::Pagination::Keyset::Connection do
include GraphqlHelpers
# https://gitlab.com/gitlab-org/gitlab/-/issues/334973
# The spec will be merged with connection_spec.rb in the future.
let(:nodes) { Project.all.order(id: :asc) }
let(:arguments) { {} }
let(:query_type) { GraphQL::ObjectType.new }
let(:schema) { GraphQL::Schema.define(query: query_type, mutation: nil)}
let(:context) { GraphQL::Query::Context.new(query: double('query', schema: schema), values: nil, object: nil) }
let(:context) { GraphQL::Query::Context.new(query: query_double(schema: schema), values: nil, object: nil) }
let_it_be(:column_order_id) { Gitlab::Pagination::Keyset::ColumnOrderDefinition.new(attribute_name: 'id', order_expression: Project.arel_table[:id].asc) }
let_it_be(:column_order_id_desc) { Gitlab::Pagination::Keyset::ColumnOrderDefinition.new(attribute_name: 'id', order_expression: Project.arel_table[:id].desc) }

View File

@ -3,11 +3,13 @@
require 'spec_helper'
RSpec.describe Gitlab::Graphql::Pagination::Keyset::Connection do
include GraphqlHelpers
let(:nodes) { Project.all.order(id: :asc) }
let(:arguments) { {} }
let(:query_type) { GraphQL::ObjectType.new }
let(:schema) { GraphQL::Schema.define(query: query_type, mutation: nil)}
let(:context) { GraphQL::Query::Context.new(query: double('query', schema: schema), values: nil, object: nil) }
let(:context) { GraphQL::Query::Context.new(query: query_double(schema: schema), values: nil, object: nil) }
subject(:connection) do
described_class.new(nodes, **{ context: context, max_page_size: 3 }.merge(arguments))

View File

@ -346,6 +346,10 @@ module GraphqlHelpers
end
end
def query_double(schema:)
double('query', schema: schema)
end
def wrap_fields(fields)
fields = Array.wrap(fields).map do |field|
case field