diff options
author | Aleksandr Soborov <asoborov@gmail.com> | 2018-10-17 12:17:32 +0000 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2018-10-17 12:17:32 +0000 |
commit | a68b6315f194be52ca0a5c672458c489d3dc0e42 (patch) | |
tree | 4927e3de5b308f4b15c607939ba634044e0f20e1 | |
parent | d32ac958ddb76290cf32759952907b1b67cfd440 (diff) | |
download | gitlab-ce-a68b6315f194be52ca0a5c672458c489d3dc0e42.tar.gz |
Extend Create New Merge Request test to also add a label
-rw-r--r-- | app/views/layouts/nav/sidebar/_project.html.haml | 4 | ||||
-rw-r--r-- | app/views/projects/labels/index.html.haml | 2 | ||||
-rw-r--r-- | app/views/shared/issuable/_label_dropdown.html.haml | 2 | ||||
-rw-r--r-- | app/views/shared/issuable/_sidebar.html.haml | 2 | ||||
-rw-r--r-- | app/views/shared/labels/_form.html.haml | 8 | ||||
-rw-r--r-- | qa/qa.rb | 6 | ||||
-rw-r--r-- | qa/qa/factory/resource/label.rb | 39 | ||||
-rw-r--r-- | qa/qa/factory/resource/merge_request.rb | 4 | ||||
-rw-r--r-- | qa/qa/page/label/index.rb | 15 | ||||
-rw-r--r-- | qa/qa/page/label/new.rb | 30 | ||||
-rw-r--r-- | qa/qa/page/merge_request/new.rb | 10 | ||||
-rw-r--r-- | qa/qa/page/merge_request/show.rb | 11 | ||||
-rw-r--r-- | qa/qa/page/project/menu.rb | 13 | ||||
-rw-r--r-- | qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb | 16 |
14 files changed, 150 insertions, 12 deletions
diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index 3625224fbcd..174033f3d49 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -86,7 +86,7 @@ - if project_nav_tab? :issues = 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 = sprite_icon('issues') %span.nav-item-name @@ -115,7 +115,7 @@ = boards_link_text = 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 = _('Labels') diff --git a/app/views/projects/labels/index.html.haml b/app/views/projects/labels/index.html.haml index 11a05eada30..06ee883d6dc 100644 --- a/app/views/projects/labels/index.html.haml +++ b/app/views/projects/labels/index.html.haml @@ -8,7 +8,7 @@ - if can_admin_label - content_for(:header_content) do .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 #promote-label-modal diff --git a/app/views/shared/issuable/_label_dropdown.html.haml b/app/views/shared/issuable/_label_dropdown.html.haml index 6eb1f8f0853..d5fb85ba0f3 100644 --- a/app/views/shared/issuable/_label_dropdown.html.haml +++ b/app/views/shared/issuable/_label_dropdown.html.haml @@ -20,7 +20,7 @@ = hidden_field_tag data_options[:field_name], use_id ? label.try(:id) : label.try(:title), id: nil .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 %span.dropdown-toggle-text{ class: ("is-default" if apply_is_default_styles) } = multi_label_name(selected, label_name) diff --git a/app/views/shared/issuable/_sidebar.html.haml b/app/views/shared/issuable/_sidebar.html.haml index aa136af1955..10ffe8dd37f 100644 --- a/app/views/shared/issuable/_sidebar.html.haml +++ b/app/views/shared/issuable/_sidebar.html.haml @@ -98,7 +98,7 @@ = 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' - .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? - selected_labels.each do |label| = link_to_label(label, subject: issuable.project, type: issuable.to_ability_name) diff --git a/app/views/shared/labels/_form.html.haml b/app/views/shared/labels/_form.html.haml index 335c34a4632..7619d0a2e9c 100644 --- a/app/views/shared/labels/_form.html.haml +++ b/app/views/shared/labels/_form.html.haml @@ -4,18 +4,18 @@ .form-group.row = f.label :title, class: 'col-form-label col-sm-2' .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 = f.label :description, class: 'col-form-label col-sm-2' .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 = f.label :color, "Background color", class: 'col-form-label col-sm-2' .col-sm-10 .input-group .input-group-prepend .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 Choose any color. %br @@ -30,5 +30,5 @@ - if @label.persisted? = f.submit 'Save changes', class: 'btn btn-success js-save-button' - 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' @@ -45,6 +45,7 @@ module QA autoload :Group, 'qa/factory/resource/group' autoload :Issue, 'qa/factory/resource/issue' autoload :Project, 'qa/factory/resource/project' + autoload :Label, 'qa/factory/resource/label' autoload :MergeRequest, 'qa/factory/resource/merge_request' autoload :ProjectImportedFromGithub, 'qa/factory/resource/project_imported_from_github' autoload :MergeRequestFromFork, 'qa/factory/resource/merge_request_from_fork' @@ -240,6 +241,11 @@ module QA autoload :Banner, 'qa/page/layout/banner' end + module Label + autoload :New, 'qa/page/label/new' + autoload :Index, 'qa/page/label/index' + end + module MergeRequest autoload :New, 'qa/page/merge_request/new' autoload :Show, 'qa/page/merge_request/show' diff --git a/qa/qa/factory/resource/label.rb b/qa/qa/factory/resource/label.rb new file mode 100644 index 00000000000..4080f15bf66 --- /dev/null +++ b/qa/qa/factory/resource/label.rb @@ -0,0 +1,39 @@ +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 diff --git a/qa/qa/factory/resource/merge_request.rb b/qa/qa/factory/resource/merge_request.rb index ddb62bd0a68..c4620348202 100644 --- a/qa/qa/factory/resource/merge_request.rb +++ b/qa/qa/factory/resource/merge_request.rb @@ -56,6 +56,10 @@ module QA page.fill_title(@title) page.fill_description(@description) page.choose_milestone(@milestone) if @milestone + labels.each do |label| + page.select_label(label) + end + page.create_merge_request end end diff --git a/qa/qa/page/label/index.rb b/qa/qa/page/label/index.rb new file mode 100644 index 00000000000..323acd57743 --- /dev/null +++ b/qa/qa/page/label/index.rb @@ -0,0 +1,15 @@ +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 diff --git a/qa/qa/page/label/new.rb b/qa/qa/page/label/new.rb new file mode 100644 index 00000000000..b5422dc9400 --- /dev/null +++ b/qa/qa/page/label/new.rb @@ -0,0 +1,30 @@ +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 diff --git a/qa/qa/page/merge_request/new.rb b/qa/qa/page/merge_request/new.rb index 83cc4bbbace..1f8f1fbca8e 100644 --- a/qa/qa/page/merge_request/new.rb +++ b/qa/qa/page/merge_request/new.rb @@ -22,6 +22,10 @@ module QA element :issuable_dropdown_menu_milestone end + view 'app/views/shared/issuable/_label_dropdown.html.haml' do + element :issuable_label + end + def create_merge_request click_element :issuable_create_button end @@ -40,6 +44,12 @@ module QA click_on milestone.title end end + + def select_label(label) + click_element :issuable_label + + click_link label.title + end end end end diff --git a/qa/qa/page/merge_request/show.rb b/qa/qa/page/merge_request/show.rb index b40e90ef4ad..376606afb5d 100644 --- a/qa/qa/page/merge_request/show.rb +++ b/qa/qa/page/merge_request/show.rb @@ -23,6 +23,10 @@ module QA element :squash_checkbox end + view 'app/views/shared/issuable/_sidebar.html.haml' do + element :labels_block + end + def fast_forward_possible? !has_text?('Fast-forward merge is not possible') end @@ -64,6 +68,13 @@ module QA 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! # The merge button is disabled on load wait do diff --git a/qa/qa/page/project/menu.rb b/qa/qa/page/project/menu.rb index b32d5ea772b..bc125d1af88 100644 --- a/qa/qa/page/project/menu.rb +++ b/qa/qa/page/project/menu.rb @@ -22,6 +22,7 @@ module QA element :activity_link, "title: _('Activity')" # rubocop:disable QA/ElementWithPattern element :wiki_link_text, "Wiki" # rubocop:disable QA/ElementWithPattern element :milestones_link + element :labels_link end view 'app/assets/javascripts/fly_out_nav.js' do @@ -104,8 +105,20 @@ module QA end end + def go_to_labels + hover_issues { click_element :labels_link } + end + private + def hover_issues + within_sidebar do + find_element(:issues_item).hover + + yield + end + end + def hover_settings within_sidebar do find('.qa-settings-item').hover diff --git a/qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb b/qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb index bcf55a02a61..f59bfb6b64d 100644 --- a/qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb @@ -16,16 +16,26 @@ module QA milestone.project = current_project 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| merge_request.title = 'This is a merge request with a milestone' merge_request.description = 'Great feature with milestone' merge_request.project = current_project merge_request.milestone = current_milestone + merge_request.labels.push(new_label) end - expect(page).to have_content('This is a merge request with a milestone') - expect(page).to have_content('Great feature with milestone') - expect(page).to have_content(/Opened [\w\s]+ ago/) + Page::MergeRequest::Show.perform do |merge_request| + expect(merge_request).to have_content('This is a merge request with a milestone') + 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| expect(sidebar).to have_milestone(current_milestone.title) |