Commit a68b6315 authored by Aleksandr Soborov's avatar Aleksandr Soborov Committed by Rémy Coutable

Extend Create New Merge Request test to also add a label

parent d32ac958
...@@ -86,7 +86,7 @@ ...@@ -86,7 +86,7 @@
- if project_nav_tab? :issues - if project_nav_tab? :issues
= nav_link(controller: @project.issues_enabled? ? [:issues, :labels, :milestones, :boards] : :issues) do = nav_link(controller: @project.issues_enabled? ? [:issues, :labels, :milestones, :boards] : :issues) do
= link_to project_issues_path(@project), class: 'shortcuts-issues' do = link_to project_issues_path(@project), class: 'shortcuts-issues qa-issues-item' do
.nav-icon-container .nav-icon-container
= sprite_icon('issues') = sprite_icon('issues')
%span.nav-item-name %span.nav-item-name
...@@ -115,7 +115,7 @@ ...@@ -115,7 +115,7 @@
= boards_link_text = boards_link_text
= nav_link(controller: :labels) do = nav_link(controller: :labels) do
= link_to project_labels_path(@project), title: _('Labels') do = link_to project_labels_path(@project), title: _('Labels'), class: 'qa-labels-link' do
%span %span
= _('Labels') = _('Labels')
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
- if can_admin_label - if can_admin_label
- content_for(:header_content) do - content_for(:header_content) do
.nav-controls .nav-controls
= link_to _('New label'), new_project_label_path(@project), class: "btn btn-success" = link_to _('New label'), new_project_label_path(@project), class: "btn btn-success qa-label-create-new"
- if labels_or_filters - if labels_or_filters
#promote-label-modal #promote-label-modal
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
= hidden_field_tag data_options[:field_name], use_id ? label.try(:id) : label.try(:title), id: nil = hidden_field_tag data_options[:field_name], use_id ? label.try(:id) : label.try(:title), id: nil
.dropdown .dropdown
%button.dropdown-menu-toggle.js-label-select.js-multiselect{ class: classes.join(' '), type: "button", data: dropdown_data } %button.dropdown-menu-toggle.js-label-select.js-multiselect.qa-issuable-label{ class: classes.join(' '), type: "button", data: dropdown_data }
- apply_is_default_styles = (selected.nil? || selected.empty?) && !no_default_styles - apply_is_default_styles = (selected.nil? || selected.empty?) && !no_default_styles
%span.dropdown-toggle-text{ class: ("is-default" if apply_is_default_styles) } %span.dropdown-toggle-text{ class: ("is-default" if apply_is_default_styles) }
= multi_label_name(selected, label_name) = multi_label_name(selected, label_name)
......
...@@ -98,7 +98,7 @@ ...@@ -98,7 +98,7 @@
= icon('spinner spin', class: 'hidden block-loading', 'aria-hidden': 'true') = icon('spinner spin', class: 'hidden block-loading', 'aria-hidden': 'true')
- if can_edit_issuable - 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 float-right'
.value.issuable-show-labels.dont-hide.hide-collapsed{ class: ("has-labels" if selected_labels.any?) } .value.issuable-show-labels.dont-hide.hide-collapsed.qa-labels-block{ class: ("has-labels" if selected_labels.any?) }
- if selected_labels.any? - if selected_labels.any?
- selected_labels.each do |label| - selected_labels.each do |label|
= link_to_label(label, subject: issuable.project, type: issuable.to_ability_name) = link_to_label(label, subject: issuable.project, type: issuable.to_ability_name)
......
...@@ -4,18 +4,18 @@ ...@@ -4,18 +4,18 @@
.form-group.row .form-group.row
= f.label :title, class: 'col-form-label col-sm-2' = f.label :title, class: 'col-form-label col-sm-2'
.col-sm-10 .col-sm-10
= f.text_field :title, class: "form-control", required: true, autofocus: true = f.text_field :title, class: "form-control qa-label-title", required: true, autofocus: true
.form-group.row .form-group.row
= f.label :description, class: 'col-form-label col-sm-2' = f.label :description, class: 'col-form-label col-sm-2'
.col-sm-10 .col-sm-10
= f.text_field :description, class: "form-control js-quick-submit" = f.text_field :description, class: "form-control js-quick-submit qa-label-description"
.form-group.row .form-group.row
= f.label :color, "Background color", class: 'col-form-label col-sm-2' = f.label :color, "Background color", class: 'col-form-label col-sm-2'
.col-sm-10 .col-sm-10
.input-group .input-group
.input-group-prepend .input-group-prepend
.input-group-text.label-color-preview   .input-group-text.label-color-preview  
= f.text_field :color, class: "form-control" = f.text_field :color, class: "form-control qa-label-color"
.form-text.text-muted .form-text.text-muted
Choose any color. Choose any color.
%br %br
...@@ -30,5 +30,5 @@ ...@@ -30,5 +30,5 @@
- if @label.persisted? - if @label.persisted?
= f.submit 'Save changes', class: 'btn btn-success js-save-button' = f.submit 'Save changes', class: 'btn btn-success js-save-button'
- else - else
= f.submit 'Create label', class: 'btn btn-success js-save-button' = f.submit 'Create label', class: 'btn btn-success js-save-button qa-label-create-button'
= link_to 'Cancel', back_path, class: 'btn btn-cancel' = link_to 'Cancel', back_path, class: 'btn btn-cancel'
...@@ -45,6 +45,7 @@ module QA ...@@ -45,6 +45,7 @@ module QA
autoload :Group, 'qa/factory/resource/group' autoload :Group, 'qa/factory/resource/group'
autoload :Issue, 'qa/factory/resource/issue' autoload :Issue, 'qa/factory/resource/issue'
autoload :Project, 'qa/factory/resource/project' autoload :Project, 'qa/factory/resource/project'
autoload :Label, 'qa/factory/resource/label'
autoload :MergeRequest, 'qa/factory/resource/merge_request' autoload :MergeRequest, 'qa/factory/resource/merge_request'
autoload :ProjectImportedFromGithub, 'qa/factory/resource/project_imported_from_github' autoload :ProjectImportedFromGithub, 'qa/factory/resource/project_imported_from_github'
autoload :MergeRequestFromFork, 'qa/factory/resource/merge_request_from_fork' autoload :MergeRequestFromFork, 'qa/factory/resource/merge_request_from_fork'
...@@ -240,6 +241,11 @@ module QA ...@@ -240,6 +241,11 @@ module QA
autoload :Banner, 'qa/page/layout/banner' autoload :Banner, 'qa/page/layout/banner'
end end
module Label
autoload :New, 'qa/page/label/new'
autoload :Index, 'qa/page/label/index'
end
module MergeRequest module MergeRequest
autoload :New, 'qa/page/merge_request/new' autoload :New, 'qa/page/merge_request/new'
autoload :Show, 'qa/page/merge_request/show' autoload :Show, 'qa/page/merge_request/show'
......
require 'securerandom'
module QA
module Factory
module Resource
class Label < Factory::Base
attr_accessor :title,
:description,
:color
product(:title) { |factory| factory.title }
dependency Factory::Resource::Project, as: :project do |project|
project.name = 'project-with-label'
end
def initialize
@title = "qa-test-#{SecureRandom.hex(8)}"
@description = 'This is a test label'
@color = '#0033CC'
end
def fabricate!
project.visit!
Page::Project::Menu.act { go_to_labels }
Page::Label::Index.act { go_to_new_label }
Page::Label::New.perform do |page|
page.fill_title(@title)
page.fill_description(@description)
page.fill_color(@color)
page.create_label
end
end
end
end
end
end
...@@ -56,6 +56,10 @@ module QA ...@@ -56,6 +56,10 @@ module QA
page.fill_title(@title) page.fill_title(@title)
page.fill_description(@description) page.fill_description(@description)
page.choose_milestone(@milestone) if @milestone page.choose_milestone(@milestone) if @milestone
labels.each do |label|
page.select_label(label)
end
page.create_merge_request page.create_merge_request
end end
end end
......
module QA
module Page
module Label
class Index < Page::Base
view 'app/views/projects/labels/index.html.haml' do
element :label_create_new
end
def go_to_new_label
click_element :label_create_new
end
end
end
end
end
module QA
module Page
module Label
class New < Page::Base
view 'app/views/shared/labels/_form.html.haml' do
element :label_title
element :label_description
element :label_color
element :label_create_button
end
def create_label
click_element :label_create_button
end
def fill_title(title)
fill_element :label_title, title
end
def fill_description(description)
fill_element :label_description, description
end
def fill_color(color)
fill_element :label_color, color
end
end
end
end
end
...@@ -22,6 +22,10 @@ module QA ...@@ -22,6 +22,10 @@ module QA
element :issuable_dropdown_menu_milestone element :issuable_dropdown_menu_milestone
end end
view 'app/views/shared/issuable/_label_dropdown.html.haml' do
element :issuable_label
end
def create_merge_request def create_merge_request
click_element :issuable_create_button click_element :issuable_create_button
end end
...@@ -40,6 +44,12 @@ module QA ...@@ -40,6 +44,12 @@ module QA
click_on milestone.title click_on milestone.title
end end
end end
def select_label(label)
click_element :issuable_label
click_link label.title
end
end end
end end
end end
......
...@@ -23,6 +23,10 @@ module QA ...@@ -23,6 +23,10 @@ module QA
element :squash_checkbox element :squash_checkbox
end end
view 'app/views/shared/issuable/_sidebar.html.haml' do
element :labels_block
end
def fast_forward_possible? def fast_forward_possible?
!has_text?('Fast-forward merge is not possible') !has_text?('Fast-forward merge is not possible')
end end
...@@ -64,6 +68,13 @@ module QA ...@@ -64,6 +68,13 @@ module QA
end end
end end
def has_label?(label)
page.within(element_selector_css(:labels_block)) do
element = find('span', text: label)
!element.nil?
end
end
def merge! def merge!
# The merge button is disabled on load # The merge button is disabled on load
wait do wait do
......
...@@ -22,6 +22,7 @@ module QA ...@@ -22,6 +22,7 @@ module QA
element :activity_link, "title: _('Activity')" # rubocop:disable QA/ElementWithPattern element :activity_link, "title: _('Activity')" # rubocop:disable QA/ElementWithPattern
element :wiki_link_text, "Wiki" # rubocop:disable QA/ElementWithPattern element :wiki_link_text, "Wiki" # rubocop:disable QA/ElementWithPattern
element :milestones_link element :milestones_link
element :labels_link
end end
view 'app/assets/javascripts/fly_out_nav.js' do view 'app/assets/javascripts/fly_out_nav.js' do
...@@ -104,8 +105,20 @@ module QA ...@@ -104,8 +105,20 @@ module QA
end end
end end
def go_to_labels
hover_issues { click_element :labels_link }
end
private private
def hover_issues
within_sidebar do
find_element(:issues_item).hover
yield
end
end
def hover_settings def hover_settings
within_sidebar do within_sidebar do
find('.qa-settings-item').hover find('.qa-settings-item').hover
......
...@@ -16,16 +16,26 @@ module QA ...@@ -16,16 +16,26 @@ module QA
milestone.project = current_project milestone.project = current_project
end end
new_label = Factory::Resource::Label.fabricate! do |label|
label.project = current_project
label.title = 'qa-mr-test-label'
label.description = 'Merge Request label'
end
Factory::Resource::MergeRequest.fabricate! do |merge_request| Factory::Resource::MergeRequest.fabricate! do |merge_request|
merge_request.title = 'This is a merge request with a milestone' merge_request.title = 'This is a merge request with a milestone'
merge_request.description = 'Great feature with milestone' merge_request.description = 'Great feature with milestone'
merge_request.project = current_project merge_request.project = current_project
merge_request.milestone = current_milestone merge_request.milestone = current_milestone
merge_request.labels.push(new_label)
end end
expect(page).to have_content('This is a merge request with a milestone') Page::MergeRequest::Show.perform do |merge_request|
expect(page).to have_content('Great feature with milestone') expect(merge_request).to have_content('This is a merge request with a milestone')
expect(page).to have_content(/Opened [\w\s]+ ago/) expect(merge_request).to have_content('Great feature with milestone')
expect(merge_request).to have_content(/Opened [\w\s]+ ago/)
expect(merge_request).to have_label(new_label.title)
end
Page::Issuable::Sidebar.perform do |sidebar| Page::Issuable::Sidebar.perform do |sidebar|
expect(sidebar).to have_milestone(current_milestone.title) expect(sidebar).to have_milestone(current_milestone.title)
......
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