summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Davison <daniel.jj.davison@gmail.com>2018-05-03 20:09:53 -0400
committerddavison <ddavison@gitlab.com>2018-06-26 12:18:33 -0400
commit7f5a52d7952e71aa94e8cabee323a81642bf39e8 (patch)
tree1819eb1051606987d1af5481c7495d31378a59d8
parent8bf15ef4afa1834365eaeabbe8fc269108181e5c (diff)
downloadgitlab-ce-7f5a52d7952e71aa94e8cabee323a81642bf39e8.tar.gz
[QA] create test scenario for adding milestone to merge request.
-rw-r--r--app/views/groups/milestones/_form.html.haml4
-rw-r--r--app/views/groups/milestones/index.html.haml2
-rw-r--r--app/views/projects/milestones/_form.html.haml4
-rw-r--r--app/views/shared/issuable/_milestone_dropdown.html.haml4
-rw-r--r--app/views/shared/issuable/form/_metadata.html.haml2
-rw-r--r--qa/qa.rb8
-rw-r--r--qa/qa/factory/resource/merge_request.rb13
-rw-r--r--qa/qa/factory/resource/project_milestone.rb34
-rw-r--r--qa/qa/page/dashboard/milestones.rb20
-rw-r--r--qa/qa/page/merge_request/new.rb30
-rw-r--r--qa/qa/page/project/milestone/new.rb27
-rw-r--r--qa/qa/page/project/milestone/show.rb14
-rw-r--r--qa/qa/runtime/milestone.rb19
-rw-r--r--qa/qa/specs/features/merge_request/create_spec.rb30
-rw-r--r--qa/qa/specs/features/milestone/create_spec.rb7
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"}"
diff --git a/qa/qa.rb b/qa/qa.rb
index 5013024e60f..337665c5cad 100644
--- a/qa/qa.rb
+++ b/qa/qa.rb
@@ -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