summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changelogs/unreleased/blackst0ne-replace-spinach-project-issues-milestones-feature.yml5
-rw-r--r--features/project/issues/milestones.feature43
-rw-r--r--features/steps/project/issues/milestones.rb58
-rw-r--r--features/steps/shared/markdown.rb4
-rw-r--r--features/steps/shared/paths.rb8
-rw-r--r--spec/features/milestones/show_spec.rb26
-rw-r--r--spec/features/milestones/user_creates_milestone_spec.rb29
-rw-r--r--spec/features/milestones/user_deletes_milestone_spec.rb25
-rw-r--r--spec/features/milestones/user_views_milestone_spec.rb31
-rw-r--r--spec/features/milestones/user_views_milestones_spec.rb35
10 files changed, 125 insertions, 139 deletions
diff --git a/changelogs/unreleased/blackst0ne-replace-spinach-project-issues-milestones-feature.yml b/changelogs/unreleased/blackst0ne-replace-spinach-project-issues-milestones-feature.yml
new file mode 100644
index 00000000000..0dcac0a80eb
--- /dev/null
+++ b/changelogs/unreleased/blackst0ne-replace-spinach-project-issues-milestones-feature.yml
@@ -0,0 +1,5 @@
+---
+title: Replace the `project/issues/milestones.feature` spinach test with an rspec analog
+merge_request: 18300
+author: "@blackst0ne"
+type: other
diff --git a/features/project/issues/milestones.feature b/features/project/issues/milestones.feature
deleted file mode 100644
index 77c8ed6e5bf..00000000000
--- a/features/project/issues/milestones.feature
+++ /dev/null
@@ -1,43 +0,0 @@
-@project_issues
-Feature: Project Issues Milestones
- Background:
- Given I sign in as a user
- And I own project "Shop"
- And project "Shop" has milestone "v2.2"
- Given I visit project "Shop" milestones page
-
- Scenario: I should see active milestones
- Then I should see milestone "v2.2"
-
- Scenario: I should see milestone
- Given I click link "v2.2"
- Then I should see milestone "v2.2"
-
- @javascript
- Scenario: I create and delete new milestone
- Given I click link "New Milestone"
- And I submit new milestone "v2.3"
- Then I should see milestone "v2.3"
- Given I click button to remove milestone
- And I confirm in modal
- When I visit project "Shop" activity page
- Then I should see deleted milestone activity
-
- @javascript
- Scenario: I delete new milestone
- Given I click button to remove milestone
- And I confirm in modal
- And I should see no milestones
-
- @javascript
- Scenario: Listing closed issues
- Given the milestone has open and closed issues
- And I click link "v2.2"
- Then I should see 3 issues
-
- # Markdown
-
- Scenario: Headers inside the description should have ids generated for them.
- Given I click link "v2.2"
- # PLEASE USE the `have_header_with_correct_id_and_link(level, text, id, parent)` matcher on migrating this spec to rspec.
- Then Header "Description header" should have correct id and link
diff --git a/features/steps/project/issues/milestones.rb b/features/steps/project/issues/milestones.rb
index 4ce67aa651c..30927306a4f 100644
--- a/features/steps/project/issues/milestones.rb
+++ b/features/steps/project/issues/milestones.rb
@@ -4,35 +4,6 @@ class Spinach::Features::ProjectIssuesMilestones < Spinach::FeatureSteps
include SharedPaths
include SharedMarkdown
- step 'I should see milestone "v2.2"' do
- milestone = @project.milestones.find_by(title: "v2.2")
- expect(page).to have_content(milestone.title[0..10])
- expect(page).to have_content(milestone.expires_at)
- expect(page).to have_content("Issues")
- end
-
- step 'I click link "v2.2"' do
- click_link "v2.2"
- end
-
- step 'I click link "New Milestone"' do
- page.within('.nav-controls') do
- click_link "New milestone"
- end
- end
-
- step 'I submit new milestone "v2.3"' do
- fill_in "milestone_title", with: "v2.3"
- click_button "Create milestone"
- end
-
- step 'I should see milestone "v2.3"' do
- milestone = @project.milestones.find_by(title: "v2.3")
- expect(page).to have_content(milestone.title[0..10])
- expect(page).to have_content(milestone.expires_at)
- expect(page).to have_content("Issues")
- end
-
step 'project "Shop" has milestone "v2.2"' do
project = Project.find_by(name: "Shop")
milestone = create(:milestone,
@@ -43,36 +14,7 @@ class Spinach::Features::ProjectIssuesMilestones < Spinach::FeatureSteps
3.times { create(:issue, project: project, milestone: milestone) }
end
- step 'the milestone has open and closed issues' do
- project = Project.find_by(name: "Shop")
- milestone = project.milestones.find_by(title: 'v2.2')
-
- # 3 Open issues created above; create one closed issue
- create(:closed_issue, project: project, milestone: milestone)
- end
-
- step 'I should see deleted milestone activity' do
- expect(page).to have_content('opened milestone in')
- expect(page).to have_content('destroyed milestone in')
- end
-
When 'I click link "All Issues"' do
click_link 'All Issues'
end
-
- step 'I should see 3 issues' do
- expect(page).to have_selector('#tab-issues li.issuable-row', count: 4)
- end
-
- step 'I click button to remove milestone' do
- click_button 'Delete'
- end
-
- step 'I confirm in modal' do
- click_button 'Delete milestone'
- end
-
- step 'I should see no milestones' do
- expect(page).to have_content('No milestones to show')
- end
end
diff --git a/features/steps/shared/markdown.rb b/features/steps/shared/markdown.rb
index c66280127e9..9d522936fb6 100644
--- a/features/steps/shared/markdown.rb
+++ b/features/steps/shared/markdown.rb
@@ -10,10 +10,6 @@ module SharedMarkdown
expect(find(:xpath, "#{node.path}/..").text).to eq text
end
- step 'Header "Description header" should have correct id and link' do
- header_should_have_correct_id_and_link(1, 'Description header', 'description-header')
- end
-
step 'I should not see the Markdown preview' do
expect(find('.gfm-form .js-md-preview')).not_to be_visible
end
diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb
index 4ba83499e3c..3b4c839bcef 100644
--- a/features/steps/shared/paths.rb
+++ b/features/steps/shared/paths.rb
@@ -264,10 +264,6 @@ module SharedPaths
visit project_path(project)
end
- step 'I visit project "Shop" activity page' do
- visit activity_project_path(project)
- end
-
step 'I visit project "Forked Shop" merge requests page' do
visit project_merge_requests_path(@forked_project)
end
@@ -373,10 +369,6 @@ module SharedPaths
visit project_merge_requests_path(project)
end
- step 'I visit project "Shop" milestones page' do
- visit project_milestones_path(project)
- end
-
step 'I visit project "Shop" team page' do
visit project_project_members_path(project)
end
diff --git a/spec/features/milestones/show_spec.rb b/spec/features/milestones/show_spec.rb
deleted file mode 100644
index 50c5e0bb65f..00000000000
--- a/spec/features/milestones/show_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require 'rails_helper'
-
-describe 'Milestone show' do
- let(:user) { create(:user) }
- let(:project) { create(:project) }
- let(:milestone) { create(:milestone, project: project) }
- let(:labels) { create_list(:label, 2, project: project) }
- let(:issue_params) { { project: project, assignees: [user], author: user, milestone: milestone, labels: labels } }
-
- before do
- project.add_user(user, :developer)
- sign_in(user)
- end
-
- def visit_milestone
- visit project_milestone_path(project, milestone)
- end
-
- it 'avoids N+1 database queries' do
- create(:labeled_issue, issue_params)
- control = ActiveRecord::QueryRecorder.new { visit_milestone }
- create_list(:labeled_issue, 10, issue_params)
-
- expect { visit_milestone }.not_to exceed_query_limit(control)
- end
-end
diff --git a/spec/features/milestones/user_creates_milestone_spec.rb b/spec/features/milestones/user_creates_milestone_spec.rb
new file mode 100644
index 00000000000..8fd057d587c
--- /dev/null
+++ b/spec/features/milestones/user_creates_milestone_spec.rb
@@ -0,0 +1,29 @@
+require "rails_helper"
+
+describe "User creates milestone", :js do
+ set(:user) { create(:user) }
+ set(:project) { create(:project) }
+
+ before do
+ project.add_developer(user)
+ sign_in(user)
+
+ visit(new_project_milestone_path(project))
+ end
+
+ it "creates milestone" do
+ TITLE = "v2.3".freeze
+
+ fill_in("Title", with: TITLE)
+ fill_in("Description", with: "# Description header")
+ click_button("Create milestone")
+
+ expect(page).to have_content(TITLE)
+ .and have_content("Issues")
+ .and have_header_with_correct_id_and_link(1, "Description header", "description-header")
+
+ visit(activity_project_path(project))
+
+ expect(page).to have_content("#{user.name} opened milestone")
+ end
+end
diff --git a/spec/features/milestones/user_deletes_milestone_spec.rb b/spec/features/milestones/user_deletes_milestone_spec.rb
new file mode 100644
index 00000000000..414702daba4
--- /dev/null
+++ b/spec/features/milestones/user_deletes_milestone_spec.rb
@@ -0,0 +1,25 @@
+require "rails_helper"
+
+describe "User deletes milestone", :js do
+ set(:user) { create(:user) }
+ set(:project) { create(:project) }
+ set(:milestone) { create(:milestone, project: project) }
+
+ before do
+ project.add_developer(user)
+ sign_in(user)
+
+ visit(project_milestones_path(project))
+ end
+
+ it "deletes milestone" do
+ click_button("Delete")
+ click_button("Delete milestone")
+
+ expect(page).to have_content("No milestones to show")
+
+ visit(activity_project_path(project))
+
+ expect(page).to have_content("#{user.name} destroyed milestone")
+ end
+end
diff --git a/spec/features/milestones/user_views_milestone_spec.rb b/spec/features/milestones/user_views_milestone_spec.rb
new file mode 100644
index 00000000000..83d8e2ff9e9
--- /dev/null
+++ b/spec/features/milestones/user_views_milestone_spec.rb
@@ -0,0 +1,31 @@
+require "rails_helper"
+
+describe "User views milestone" do
+ set(:user) { create(:user) }
+ set(:project) { create(:project) }
+ set(:milestone) { create(:milestone, project: project) }
+ set(:labels) { create_list(:label, 2, project: project) }
+
+ before do
+ project.add_developer(user)
+ sign_in(user)
+ end
+
+ it "avoids N+1 database queries" do
+ ISSUE_PARAMS = { project: project, assignees: [user], author: user, milestone: milestone, labels: labels }.freeze
+
+ create(:labeled_issue, ISSUE_PARAMS)
+
+ control = ActiveRecord::QueryRecorder.new { visit_milestone }
+
+ create(:labeled_issue, ISSUE_PARAMS)
+
+ expect { visit_milestone }.not_to exceed_query_limit(control)
+ end
+
+ private
+
+ def visit_milestone
+ visit(project_milestone_path(project, milestone))
+ end
+end
diff --git a/spec/features/milestones/user_views_milestones_spec.rb b/spec/features/milestones/user_views_milestones_spec.rb
new file mode 100644
index 00000000000..bebe40f73fd
--- /dev/null
+++ b/spec/features/milestones/user_views_milestones_spec.rb
@@ -0,0 +1,35 @@
+require "rails_helper"
+
+describe "User views milestones" do
+ set(:user) { create(:user) }
+ set(:project) { create(:project) }
+ set(:milestone) { create(:milestone, project: project) }
+
+ before do
+ project.add_developer(user)
+ sign_in(user)
+
+ visit(project_milestones_path(project))
+ end
+
+ it "shows milestone" do
+ expect(page).to have_content(milestone.title)
+ .and have_content(milestone.expires_at)
+ .and have_content("Issues")
+ end
+
+ context "with issues" do
+ set(:issue) { create(:issue, project: project, milestone: milestone) }
+ set(:closed_issue) { create(:closed_issue, project: project, milestone: milestone) }
+
+ it "opens milestone" do
+ click_link(milestone.title)
+
+ expect(current_path).to eq(project_milestone_path(project, milestone))
+ expect(page).to have_content(milestone.title)
+ .and have_selector("#tab-issues li.issuable-row", count: 2)
+ .and have_content(issue.title)
+ .and have_content(closed_issue.title)
+ end
+ end
+end