summaryrefslogtreecommitdiff
path: root/features
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2016-01-13 16:38:42 +0100
committerRémy Coutable <remy@rymai.me>2016-01-13 17:05:54 +0100
commit5e452d3794ffa4996611ecf53c6098f4a3913d4a (patch)
treec7678ec3ef43629e17a41bb5b63b43ceb80031e3 /features
parent5efbfa14d4666655edd6d79a3a352a134382b664 (diff)
downloadgitlab-ce-5e452d3794ffa4996611ecf53c6098f4a3913d4a.tar.gz
Improve & adds specs for Issue/MR references
- Improve specs for private Issue/MR referenced in public Issue - Add specs for private Issue/MR referenced in public MR
Diffstat (limited to 'features')
-rw-r--r--features/project/issues/references.feature28
-rw-r--r--features/project/merge_requests/references.feature31
-rw-r--r--features/steps/project/issues/references.rb101
-rw-r--r--features/steps/project/merge_requests/references.rb7
-rw-r--r--features/steps/shared/issuable.rb134
-rw-r--r--features/steps/shared/note.rb4
-rw-r--r--features/steps/shared/project.rb48
7 files changed, 218 insertions, 135 deletions
diff --git a/features/project/issues/references.feature b/features/project/issues/references.feature
index bf7a4c6cb91..4ae2d653337 100644
--- a/features/project/issues/references.feature
+++ b/features/project/issues/references.feature
@@ -2,30 +2,32 @@
Feature: Project Issues References
Background:
Given I sign in as "John Doe"
+ And public project "Community"
And "John Doe" owns public project "Community"
- And project "Community" has "Public Issue 01" open issue
+ And project "Community" has "Community issue" open issue
And I logout
And I sign in as "Mary Jane"
- And "Mary Jane" owns private project "Private Library"
- And project "Private Library" has "Fix NS-01" open merge request
- And project "Private Library" has "Private Issue 01" open issue
- And I visit merge request page "Fix NS-01"
- And I leave a comment referencing issue "Public Issue 01" from "Fix NS-01" merge request
- And I visit issue page "Private Issue 01"
- And I leave a comment referencing issue "Public Issue 01" from "Private Issue 01" issue
+ And private project "Enterprise"
+ And "Mary Jane" owns private project "Enterprise"
+ And project "Enterprise" has "Enterprise issue" open issue
+ And project "Enterprise" has "Enterprise fix" open merge request
+ And I visit issue page "Enterprise issue"
+ And I leave a comment referencing issue "Community issue"
+ And I visit merge request page "Enterprise fix"
+ And I leave a comment referencing issue "Community issue"
And I logout
@javascript
Scenario: Viewing the public issue as a "John Doe"
Given I sign in as "John Doe"
- When I visit issue page "Public Issue 01"
+ When I visit issue page "Community issue"
Then I should not see any related merge requests
And I should see no notes at all
@javascript
Scenario: Viewing the public issue as "Mary Jane"
Given I sign in as "Mary Jane"
- When I visit issue page "Public Issue 01"
- Then I should see the "Fix NS-01" related merge request
- And I should see a note linking to "Fix NS-01" merge request
- And I should see a note linking to "Private Issue 01" issue
+ When I visit issue page "Community issue"
+ Then I should see the "Enterprise fix" related merge request
+ And I should see a note linking to "Enterprise fix" merge request
+ And I should see a note linking to "Enterprise issue" issue
diff --git a/features/project/merge_requests/references.feature b/features/project/merge_requests/references.feature
new file mode 100644
index 00000000000..571612261a9
--- /dev/null
+++ b/features/project/merge_requests/references.feature
@@ -0,0 +1,31 @@
+@project_merge_requests
+Feature: Project Merge Requests References
+ Background:
+ Given I sign in as "John Doe"
+ And public project "Community"
+ And "John Doe" owns public project "Community"
+ And project "Community" has "Community fix" open merge request
+ And I logout
+ And I sign in as "Mary Jane"
+ And private project "Enterprise"
+ And "Mary Jane" owns private project "Enterprise"
+ And project "Enterprise" has "Enterprise issue" open issue
+ And project "Enterprise" has "Enterprise fix" open merge request
+ And I visit issue page "Enterprise issue"
+ And I leave a comment referencing issue "Community fix"
+ And I visit merge request page "Enterprise fix"
+ And I leave a comment referencing issue "Community fix"
+ And I logout
+
+ @javascript
+ Scenario: Viewing the public issue as a "John Doe"
+ Given I sign in as "John Doe"
+ When I visit issue page "Community fix"
+ Then I should see no notes at all
+
+ @javascript
+ Scenario: Viewing the public issue as "Mary Jane"
+ Given I sign in as "Mary Jane"
+ When I visit issue page "Community fix"
+ And I should see a note linking to "Enterprise fix" merge request
+ And I should see a note linking to "Enterprise issue" issue
diff --git a/features/steps/project/issues/references.rb b/features/steps/project/issues/references.rb
index 9c7725e8c14..69e8b5cbde5 100644
--- a/features/steps/project/issues/references.rb
+++ b/features/steps/project/issues/references.rb
@@ -1,106 +1,7 @@
class Spinach::Features::ProjectIssuesReferences < Spinach::FeatureSteps
include SharedAuthentication
+ include SharedIssuable
include SharedNote
include SharedProject
include SharedUser
-
- step 'project "Community" has "Public Issue 01" open issue' do
- project = Project.find_by(name: 'Community')
- create(:issue,
- title: 'Public Issue 01',
- project: project,
- author: project.users.first,
- description: '# Description header'
- )
- end
-
- step 'project "Private Library" has "Fix NS-01" open merge request' do
- project = Project.find_by(name: 'Private Library')
- create(:merge_request,
- title: 'Fix NS-01',
- source_project: project,
- target_project: project,
- source_branch: 'fix',
- target_branch: 'master',
- author: project.users.first,
- description: '# Description header'
- )
- end
-
- step 'project "Private Library" has "Private Issue 01" open issue' do
- project = Project.find_by(name: 'Private Library')
- create(:issue,
- title: 'Private Issue 01',
- project: project,
- author: project.users.first,
- description: '# Description header'
- )
- end
-
- step 'I leave a comment referencing issue "Public Issue 01" from "Fix NS-01" merge request' do
- project = Project.find_by(name: 'Private Library')
- issue = Issue.find_by!(title: 'Public Issue 01')
-
- page.within(".js-main-target-form") do
- fill_in "note[note]", with: "##{issue.to_reference(project)}"
- click_button "Add Comment"
- end
- end
-
- step 'I leave a comment referencing issue "Public Issue 01" from "Private Issue 01" issue' do
- project = Project.find_by(name: 'Private Library')
- issue = Issue.find_by!(title: 'Public Issue 01')
-
- page.within(".js-main-target-form") do
- fill_in "note[note]", with: "##{issue.to_reference(project)}"
- click_button "Add Comment"
- end
- end
-
- step 'I visit merge request page "Fix NS-01"' do
- mr = MergeRequest.find_by(title: "Fix NS-01")
- visit namespace_project_merge_request_path(mr.target_project.namespace, mr.target_project, mr)
- end
-
- step 'I visit issue page "Private Issue 01"' do
- issue = Issue.find_by(title: "Private Issue 01")
- visit namespace_project_issue_path(issue.project.namespace, issue.project, issue)
- end
-
- step 'I visit issue page "Public Issue 01"' do
- issue = Issue.find_by(title: "Public Issue 01")
- visit namespace_project_issue_path(issue.project.namespace, issue.project, issue)
- end
-
- step 'I should not see any related merge requests' do
- page.within '.issue-details' do
- expect(page).not_to have_content('.merge-requests')
- end
- end
-
- step 'I should see the "Fix NS-01" related merge request' do
- page.within '.merge-requests' do
- expect(page).to have_content("1 Related Merge Request")
- expect(page).to have_content('Fix NS-01')
- end
- end
-
- step 'I should see a note linking to "Fix NS-01" merge request' do
- project = Project.find_by(name: 'Community')
- mr = MergeRequest.find_by(title: 'Fix NS-01')
- page.within('.notes') do
- expect(page).to have_content('Mary Jane')
- expect(page).to have_content("mentioned in merge request #{mr.to_reference(project)}")
- end
- end
-
- step 'I should see a note linking to "Private Issue 01" issue' do
- project = Project.find_by(name: 'Community')
- issue = Issue.find_by(title: 'Private Issue 01')
- page.within('.notes') do
- expect(page).to have_content('Mary Jane')
- expect(page).to have_content("mentioned in issue #{issue.to_reference(project)}")
- end
- end
-
end
diff --git a/features/steps/project/merge_requests/references.rb b/features/steps/project/merge_requests/references.rb
new file mode 100644
index 00000000000..ab2ae6847a2
--- /dev/null
+++ b/features/steps/project/merge_requests/references.rb
@@ -0,0 +1,7 @@
+class Spinach::Features::ProjectMergeRequestsReferences < Spinach::FeatureSteps
+ include SharedAuthentication
+ include SharedIssuable
+ include SharedNote
+ include SharedProject
+ include SharedUser
+end
diff --git a/features/steps/shared/issuable.rb b/features/steps/shared/issuable.rb
index e6d1b8b8efc..4c5f7488efb 100644
--- a/features/steps/shared/issuable.rb
+++ b/features/steps/shared/issuable.rb
@@ -5,6 +5,99 @@ module SharedIssuable
find(:css, '.issuable-edit').click
end
+ step 'project "Community" has "Community issue" open issue' do
+ create_issuable_for_project(
+ project_name: 'Community',
+ title: 'Community issue'
+ )
+ end
+
+ step 'project "Community" has "Community fix" open merge request' do
+ create_issuable_for_project(
+ project_name: 'Community',
+ type: :merge_request,
+ title: 'Community fix'
+ )
+ end
+
+ step 'project "Enterprise" has "Enterprise issue" open issue' do
+ create_issuable_for_project(
+ project_name: 'Enterprise',
+ title: 'Enterprise issue'
+ )
+ end
+
+ step 'project "Enterprise" has "Enterprise fix" open merge request' do
+ create_issuable_for_project(
+ project_name: 'Enterprise',
+ type: :merge_request,
+ title: 'Enterprise fix'
+ )
+ end
+
+ step 'I leave a comment referencing issue "Community issue"' do
+ leave_reference_comment(
+ issuable: Issue.find_by(title: 'Community issue'),
+ from_project_name: 'Enterprise'
+ )
+ end
+
+ step 'I leave a comment referencing issue "Community fix"' do
+ leave_reference_comment(
+ issuable: MergeRequest.find_by(title: 'Community fix'),
+ from_project_name: 'Enterprise'
+ )
+ end
+
+ step 'I visit issue page "Enterprise issue"' do
+ issue = Issue.find_by(title: 'Enterprise issue')
+ visit namespace_project_issue_path(issue.project.namespace, issue.project, issue)
+ end
+
+ step 'I visit merge request page "Enterprise fix"' do
+ mr = MergeRequest.find_by(title: 'Enterprise fix')
+ visit namespace_project_merge_request_path(mr.target_project.namespace, mr.target_project, mr)
+ end
+
+ step 'I visit issue page "Community issue"' do
+ issue = Issue.find_by(title: 'Community issue')
+ visit namespace_project_issue_path(issue.project.namespace, issue.project, issue)
+ end
+
+ step 'I visit issue page "Community fix"' do
+ mr = MergeRequest.find_by(title: 'Community fix')
+ visit namespace_project_merge_request_path(mr.target_project.namespace, mr.target_project, mr)
+ end
+
+ step 'I should not see any related merge requests' do
+ page.within '.issue-details' do
+ expect(page).not_to have_content('.merge-requests')
+ end
+ end
+
+ step 'I should see the "Enterprise fix" related merge request' do
+ page.within '.merge-requests' do
+ expect(page).to have_content('1 Related Merge Request')
+ expect(page).to have_content('Enterprise fix')
+ end
+ end
+
+ step 'I should see a note linking to "Enterprise fix" merge request' do
+ visible_note(
+ issuable: MergeRequest.find_by(title: 'Enterprise fix'),
+ from_project_name: 'Community',
+ user_name: 'Mary Jane'
+ )
+ end
+
+ step 'I should see a note linking to "Enterprise issue" issue' do
+ visible_note(
+ issuable: Issue.find_by(title: 'Enterprise issue'),
+ from_project_name: 'Community',
+ user_name: 'Mary Jane'
+ )
+ end
+
step 'I click link "Edit" for the merge request' do
edit_issuable
end
@@ -12,4 +105,45 @@ module SharedIssuable
step 'I click link "Edit" for the issue' do
edit_issuable
end
+
+ def create_issuable_for_project(project_name:, title:, type: :issue)
+ project = Project.find_by(name: project_name)
+
+ attrs = {
+ title: title,
+ author: project.users.first,
+ description: '# Description header'
+ }
+
+ case type
+ when :issue
+ attrs.merge!(project: project)
+ when :merge_request
+ attrs.merge!(
+ source_project: project,
+ target_project: project,
+ source_branch: 'fix',
+ target_branch: 'master'
+ )
+ end
+
+ create(type, attrs)
+ end
+
+ def leave_reference_comment(issuable:, from_project_name:)
+ project = Project.find_by(name: from_project_name)
+
+ page.within('.js-main-target-form') do
+ fill_in 'note[note]', with: "##{issuable.to_reference(project)}"
+ click_button 'Add Comment'
+ end
+ end
+
+ def visible_note(issuable:, from_project_name:, user_name:)
+ project = Project.find_by(name: from_project_name)
+
+ expect(page).to have_content(user_name)
+ expect(page).to have_content("mentioned in #{issuable.class.to_s.titleize.downcase} #{issuable.to_reference(project)}")
+ end
+
end
diff --git a/features/steps/shared/note.rb b/features/steps/shared/note.rb
index 6de58c6e2b1..444d6726f99 100644
--- a/features/steps/shared/note.rb
+++ b/features/steps/shared/note.rb
@@ -107,9 +107,7 @@ module SharedNote
end
step 'I should see no notes at all' do
- page.within('.notes') do
- expect(page).to_not have_css('.note')
- end
+ expect(page).to_not have_css('.note')
end
# Markdown
diff --git a/features/steps/shared/project.rb b/features/steps/shared/project.rb
index 43a15f43470..5420c451519 100644
--- a/features/steps/shared/project.rb
+++ b/features/steps/shared/project.rb
@@ -161,31 +161,33 @@ module SharedProject
end
step '"John Doe" owns private project "Enterprise"' do
- user = user_exists("John Doe", username: "john_doe")
- project = Project.find_by(name: "Enterprise")
- project ||= create(:empty_project, name: "Enterprise", namespace: user.namespace)
- project.team << [user, :master]
+ user_owns_project(
+ user_name: 'John Doe',
+ project_name: 'Enterprise'
+ )
end
- step '"John Doe" owns internal project "Internal"' do
- user = user_exists("John Doe", username: "john_doe")
- project = Project.find_by(name: "Internal")
- project ||= create :empty_project, :internal, name: 'Internal', namespace: user.namespace
- project.team << [user, :master]
+ step '"Mary Jane" owns private project "Enterprise"' do
+ user_owns_project(
+ user_name: 'Mary Jane',
+ project_name: 'Enterprise'
+ )
end
- step '"John Doe" owns public project "Community"' do
- user = user_exists("John Doe", username: "john_doe")
- project = Project.find_by(name: "Community")
- project ||= create :empty_project, :public, name: 'Community', namespace: user.namespace
- project.team << [user, :master]
+ step '"John Doe" owns internal project "Internal"' do
+ user_owns_project(
+ user_name: 'John Doe',
+ project_name: 'Internal',
+ visibility: :internal
+ )
end
- step '"Mary Jane" owns private project "Private Library"' do
- user = user_exists('Mary Jane', username: 'mary_jane')
- project = Project.find_by(name: 'Private Library')
- project ||= create(:project, name: 'Private Library', namespace: user.namespace)
- project.team << [user, :master]
+ step '"John Doe" owns public project "Community"' do
+ user_owns_project(
+ user_name: 'John Doe',
+ project_name: 'Community',
+ visibility: :public
+ )
end
step 'public empty project "Empty Public Project"' do
@@ -220,4 +222,12 @@ module SharedProject
expect(page).to have_content("skipped")
end
end
+
+ def user_owns_project(user_name:, project_name:, visibility: :private)
+ user = user_exists(user_name, username: user_name.underscore)
+ project = Project.find_by(name: project_name)
+ project ||= create(:empty_project, visibility, name: project_name, namespace: user.namespace)
+ project.team << [user, :master]
+ end
+
end