diff options
author | Daniel Davison <daniel.jj.davison@gmail.com> | 2018-05-03 20:09:53 -0400 |
---|---|---|
committer | ddavison <ddavison@gitlab.com> | 2018-06-26 12:18:33 -0400 |
commit | 7f5a52d7952e71aa94e8cabee323a81642bf39e8 (patch) | |
tree | 1819eb1051606987d1af5481c7495d31378a59d8 | |
parent | 8bf15ef4afa1834365eaeabbe8fc269108181e5c (diff) | |
download | gitlab-ce-7f5a52d7952e71aa94e8cabee323a81642bf39e8.tar.gz |
[QA] create test scenario for adding milestone to merge request.
-rw-r--r-- | app/views/groups/milestones/_form.html.haml | 4 | ||||
-rw-r--r-- | app/views/groups/milestones/index.html.haml | 2 | ||||
-rw-r--r-- | app/views/projects/milestones/_form.html.haml | 4 | ||||
-rw-r--r-- | app/views/shared/issuable/_milestone_dropdown.html.haml | 4 | ||||
-rw-r--r-- | app/views/shared/issuable/form/_metadata.html.haml | 2 | ||||
-rw-r--r-- | qa/qa.rb | 8 | ||||
-rw-r--r-- | qa/qa/factory/resource/merge_request.rb | 13 | ||||
-rw-r--r-- | qa/qa/factory/resource/project_milestone.rb | 34 | ||||
-rw-r--r-- | qa/qa/page/dashboard/milestones.rb | 20 | ||||
-rw-r--r-- | qa/qa/page/merge_request/new.rb | 30 | ||||
-rw-r--r-- | qa/qa/page/project/milestone/new.rb | 27 | ||||
-rw-r--r-- | qa/qa/page/project/milestone/show.rb | 14 | ||||
-rw-r--r-- | qa/qa/runtime/milestone.rb | 19 | ||||
-rw-r--r-- | qa/qa/specs/features/merge_request/create_spec.rb | 30 | ||||
-rw-r--r-- | qa/qa/specs/features/milestone/create_spec.rb | 7 |
15 files changed, 209 insertions, 9 deletions
diff --git a/app/views/groups/milestones/_form.html.haml b/app/views/groups/milestones/_form.html.haml index 6d35457a0ec..fe532274887 100644 --- a/app/views/groups/milestones/_form.html.haml +++ b/app/views/groups/milestones/_form.html.haml @@ -6,12 +6,12 @@ .form-group.row = f.label :title, "Title", class: "col-form-label col-sm-2" .col-sm-10 - = f.text_field :title, maxlength: 255, class: "form-control", required: true, autofocus: true + = f.text_field :title, maxlength: 255, class: "qa-milestone-title form-control", required: true, autofocus: true .form-group.row.milestone-description = f.label :description, "Description", class: "col-form-label col-sm-2" .col-sm-10 = render layout: 'projects/md_preview', locals: { url: group_preview_markdown_path } do - = render 'projects/zen', f: f, attr: :description, classes: 'note-textarea', placeholder: 'Write milestone description...', supports_autocomplete: false + = render 'projects/zen', f: f, attr: :description, classes: 'qa-milestone-description note-textarea', placeholder: 'Write milestone description...', supports_autocomplete: false .clearfix .error-alert diff --git a/app/views/groups/milestones/index.html.haml b/app/views/groups/milestones/index.html.haml index f5f621507b8..0a81978bd11 100644 --- a/app/views/groups/milestones/index.html.haml +++ b/app/views/groups/milestones/index.html.haml @@ -6,7 +6,7 @@ .nav-controls = render 'shared/milestones_sort_dropdown' - if can?(current_user, :admin_milestones, @group) - = link_to "New milestone", new_group_milestone_path(@group), class: "btn btn-new" + = link_to "New milestone", new_group_milestone_path(@group), class: "btn btn-new qa-new-milestone" .milestones %ul.content-list diff --git a/app/views/projects/milestones/_form.html.haml b/app/views/projects/milestones/_form.html.haml index 4cc59718715..7c936940d48 100644 --- a/app/views/projects/milestones/_form.html.haml +++ b/app/views/projects/milestones/_form.html.haml @@ -5,12 +5,12 @@ .form-group.row = f.label :title, "Title", class: "col-form-label col-sm-2" .col-sm-10 - = f.text_field :title, maxlength: 255, class: "form-control", required: true, autofocus: true + = f.text_field :title, maxlength: 255, class: "qa-milestone-title form-control", required: true, autofocus: true .form-group.row.milestone-description = f.label :description, "Description", class: "col-form-label col-sm-2" .col-sm-10 = render layout: 'projects/md_preview', locals: { url: preview_markdown_path(@project) } do - = render 'projects/zen', f: f, attr: :description, classes: 'note-textarea', placeholder: 'Write milestone description...' + = render 'projects/zen', f: f, attr: :description, classes: 'qa-milestone-description note-textarea', placeholder: 'Write milestone description...' = render 'shared/notes/hints' .clearfix .error-alert diff --git a/app/views/shared/issuable/_milestone_dropdown.html.haml b/app/views/shared/issuable/_milestone_dropdown.html.haml index 37625a4a163..c804b508a01 100644 --- a/app/views/shared/issuable/_milestone_dropdown.html.haml +++ b/app/views/shared/issuable/_milestone_dropdown.html.haml @@ -7,13 +7,13 @@ - dropdown_title = local_assigns.fetch(:dropdown_title, "Filter by milestone") - if selected.present? || params[:milestone_title].present? = hidden_field_tag(name, name == :milestone_title ? selected_text : selected.id) -= dropdown_tag(milestone_dropdown_label(selected_text), options: { title: dropdown_title, toggle_class: "js-milestone-select js-filter-submit #{extra_class}", filter: true, dropdown_class: "dropdown-menu-selectable dropdown-menu-milestone", += dropdown_tag(milestone_dropdown_label(selected_text), options: { title: dropdown_title, toggle_class: "qa-issuable-milestone-dropdown js-milestone-select js-filter-submit #{extra_class}", filter: true, dropdown_class: "qa-issuable-dropdown-menu-milestone dropdown-menu-selectable dropdown-menu-milestone", placeholder: "Search milestones", footer_content: project.present?, data: { show_no: true, show_menu_above: show_menu_above, show_any: show_any, show_upcoming: show_upcoming, show_started: show_started, field_name: name, selected: selected_text, project_id: project.try(:id), milestones: milestones_filter_dropdown_path, default_label: "Milestone" } }) do - if project %ul.dropdown-footer-list - if can? current_user, :admin_milestone, project %li - = link_to new_project_milestone_path(project), title: "New Milestone" do + = link_to new_project_milestone_path(project), class: 'qa-issuable-new-milestone', title: "New Milestone" do Create new %li = link_to project_milestones_path(project) do diff --git a/app/views/shared/issuable/form/_metadata.html.haml b/app/views/shared/issuable/form/_metadata.html.haml index bd87bb38e77..3b017c62a80 100644 --- a/app/views/shared/issuable/form/_metadata.html.haml +++ b/app/views/shared/issuable/form/_metadata.html.haml @@ -18,7 +18,7 @@ = form.label :milestone_id, "Milestone", class: "col-form-label #{has_due_date ? "col-md-2 col-lg-4" : "col-sm-2"}" .col-sm-10{ class: ("col-md-8" if has_due_date) } .issuable-form-select-holder - = render "shared/issuable/milestone_dropdown", selected: issuable.milestone, name: "#{issuable.class.model_name.param_key}[milestone_id]", show_any: false, show_upcoming: false, show_started: false, extra_class: "js-issuable-form-dropdown js-dropdown-keep-input", dropdown_title: "Select milestone" + = render "shared/issuable/milestone_dropdown", selected: issuable.milestone, name: "#{issuable.class.model_name.param_key}[milestone_id]", show_any: false, show_upcoming: false, show_started: false, extra_class: "qa-issuable-milestone-dropdown js-issuable-form-dropdown js-dropdown-keep-input", dropdown_title: "Select milestone" .form-group.row - has_labels = @labels && @labels.any? = form.label :label_ids, "Labels", class: "col-form-label #{has_due_date ? "col-md-2 col-lg-4" : "col-sm-2"}" @@ -7,6 +7,7 @@ module QA module Runtime autoload :Release, 'qa/runtime/release' autoload :User, 'qa/runtime/user' + autoload :Milestone, 'qa/runtime/milestone' autoload :Namespace, 'qa/runtime/namespace' autoload :Scenario, 'qa/runtime/scenario' autoload :Browser, 'qa/runtime/browser' @@ -46,6 +47,7 @@ module QA autoload :Runner, 'qa/factory/resource/runner' autoload :PersonalAccessToken, 'qa/factory/resource/personal_access_token' autoload :KubernetesCluster, 'qa/factory/resource/kubernetes_cluster' + autoload :ProjectMilestone, 'qa/factory/resource/project_milestone' autoload :Wiki, 'qa/factory/resource/wiki' end @@ -120,6 +122,7 @@ module QA module Dashboard autoload :Projects, 'qa/page/dashboard/projects' autoload :Groups, 'qa/page/dashboard/groups' + autoload :Milestones, 'qa/page/dashboard/milestones' end module Group @@ -160,6 +163,11 @@ module QA autoload :Index, 'qa/page/project/issue/index' end + module Milestone + autoload :New, 'qa/page/project/milestone/new' + autoload :Show, 'qa/page/project/milestone/show' + end + module Operations module Kubernetes autoload :Index, 'qa/page/project/operations/kubernetes/index' diff --git a/qa/qa/factory/resource/merge_request.rb b/qa/qa/factory/resource/merge_request.rb index 24d3597d993..84c487ba7cf 100644 --- a/qa/qa/factory/resource/merge_request.rb +++ b/qa/qa/factory/resource/merge_request.rb @@ -7,7 +7,10 @@ module QA attr_accessor :title, :description, :source_branch, - :target_branch + :target_branch, + :assignee, + :milestone, + :labels product :project do |factory| factory.project @@ -41,6 +44,9 @@ module QA @description = 'This is a test merge request' @source_branch = "qa-test-feature-#{SecureRandom.hex(8)}" @target_branch = "master" + @assignee = nil + @milestone = nil + @labels = [] end def fabricate! @@ -51,6 +57,11 @@ module QA Page::MergeRequest::New.perform do |page| page.fill_title(@title) page.fill_description(@description) + + page.choose_assignee(@assignee) + page.choose_milestone(@milestone) + page.choose_labels(@labels) + page.create_merge_request end end diff --git a/qa/qa/factory/resource/project_milestone.rb b/qa/qa/factory/resource/project_milestone.rb new file mode 100644 index 00000000000..659a344bf67 --- /dev/null +++ b/qa/qa/factory/resource/project_milestone.rb @@ -0,0 +1,34 @@ +module QA + module Factory + module Resource + class ProjectMilestone < Factory::Base + attr_accessor :description + + dependency Factory::Resource::Project, as: :project + + def title=(title) + @title = "#{title}-#{SecureRandom.hex(4)}" + @description = 'A milestone' + end + + product :title do + Page::Project::Milestone::Show.act { milestone_title } + end + + def fabricate! + Runtime::Browser.visit(:gitlab, Page::Dashboard::Milestones) + + Page::Dashboard::Milestones.perform do |milestone_page| + milestone_page.select_project_or_group(@project.name) + end + + Page::Project::Milestone::New.perform do |milestone_new| + milestone_new.set_title(@title) + milestone_new.set_description(@description) + milestone_new.create_new_milestone + end + end + end + end + end +end diff --git a/qa/qa/page/dashboard/milestones.rb b/qa/qa/page/dashboard/milestones.rb new file mode 100644 index 00000000000..78c9412f2f4 --- /dev/null +++ b/qa/qa/page/dashboard/milestones.rb @@ -0,0 +1,20 @@ +module QA + module Page + module Dashboard + class Milestones < Page::Base + view 'app/views/dashboard/milestone/index.html.haml' + + def select_project_or_group(project_or_group) + find('.new-project-item-select-button').click + + find('ul.select2-results > li', text: project_or_group).click + find('.new-project-item-link').click + end + + def self.path + '/dashboard/milestones' + end + end + end + end +end diff --git a/qa/qa/page/merge_request/new.rb b/qa/qa/page/merge_request/new.rb index ec94ff4ac98..b38ccdf392e 100644 --- a/qa/qa/page/merge_request/new.rb +++ b/qa/qa/page/merge_request/new.rb @@ -10,10 +10,19 @@ module QA element :issuable_form_title end + view 'app/views/shared/issuable/form/_metadata.html.haml' do + element :issuable_milestone_dropdown + end + view 'app/views/shared/form_elements/_description.html.haml' do element :issuable_form_description end + view 'app/views/shared/issuable/_milestone_dropdown.html.haml' do + element :issuable_dropdown_menu_milestone + element :issuable_new_milestone + end + def create_merge_request click_element :issuable_create_button end @@ -25,6 +34,27 @@ module QA def fill_description(description) fill_element :issuable_form_description, description end + + def choose_assignee(assignee) + unless assignee.nil? + # TODO Choose the Assignee + end + end + + def choose_milestone(milestone) + unless milestone.nil? + click_element :issuable_milestone_dropdown + within_element(:issuable_dropdown_menu_milestone) do + find("[data-milestone-id='#{milestone.title}'] > a", text: milestone.title).click + end + end + end + + def choose_labels(labels) + unless labels.nil? and labels.is_a? Array + # TODO: Choose Label(s) + end + end end end end diff --git a/qa/qa/page/project/milestone/new.rb b/qa/qa/page/project/milestone/new.rb new file mode 100644 index 00000000000..edeb6b45546 --- /dev/null +++ b/qa/qa/page/project/milestone/new.rb @@ -0,0 +1,27 @@ +module QA + module Page + module Project + module Milestone + class New < Page::Base + view 'app/views/projects/milestones/_form.html.haml' do + element :milestone_title + element :milestone_description + end + + def set_title(title) + fill_element :milestone_title, title + end + + def set_description(description) + fill_element :milestone_description, description + end + + def create_new_milestone + click_button 'Create milestone' + end + end + end + end + end +end + diff --git a/qa/qa/page/project/milestone/show.rb b/qa/qa/page/project/milestone/show.rb new file mode 100644 index 00000000000..02b495e20d5 --- /dev/null +++ b/qa/qa/page/project/milestone/show.rb @@ -0,0 +1,14 @@ +module QA + module Page + module Project + module Milestone + class Show < Page::Base + def milestone_title + find('h2.title').text + end + end + end + end + end +end + diff --git a/qa/qa/runtime/milestone.rb b/qa/qa/runtime/milestone.rb new file mode 100644 index 00000000000..ec64dcde564 --- /dev/null +++ b/qa/qa/runtime/milestone.rb @@ -0,0 +1,19 @@ +module QA + module Runtime + module Milestone + extend self + + def default_title + 'QA-Milestone' + end + + def title + Runtime::Env.milestone_title || default_title + end + + def description + Runtime::Env.milestone_description || 'This is a test milestone' + end + end + end +end diff --git a/qa/qa/specs/features/merge_request/create_spec.rb b/qa/qa/specs/features/merge_request/create_spec.rb index befbc0b281a..80d800d9eeb 100644 --- a/qa/qa/specs/features/merge_request/create_spec.rb +++ b/qa/qa/specs/features/merge_request/create_spec.rb @@ -13,5 +13,35 @@ module QA expect(page).to have_content('Great feature') expect(page).to have_content(/Opened [\w\s]+ ago/) end + + scenario 'user attaches a milestone to the merge request' do + Runtime::Browser.visit(:gitlab, Page::Main::Login) + Page::Main::Login.act { sign_in_using_credentials } + + current_project = Factory::Resource::Project.fabricate! do |project| + project.name = 'project-with-merge-request-and-milestone' + end + + current_milestone = Factory::Resource::ProjectMilestone.fabricate! do |milestone| + milestone.title = 'unique-milestone' + milestone.project = current_project + 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.assignee = + merge_request.milestone = current_milestone + # merge_request.labels = %w() + 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 less than a minute ago') + expect(page).to have_content(current_milestone.title) + end end end diff --git a/qa/qa/specs/features/milestone/create_spec.rb b/qa/qa/specs/features/milestone/create_spec.rb new file mode 100644 index 00000000000..2b7522af0cf --- /dev/null +++ b/qa/qa/specs/features/milestone/create_spec.rb @@ -0,0 +1,7 @@ +module QA + feature 'milestone', :core do + scenario 'user creates a milestone' do + # TODO stub + end + end +end |