summaryrefslogtreecommitdiff
path: root/features
diff options
context:
space:
mode:
Diffstat (limited to 'features')
-rw-r--r--features/dashboard/dashboard.feature1
-rw-r--r--features/project/forked_merge_requests.feature41
-rw-r--r--features/project/merge_requests.feature1
-rw-r--r--features/steps/dashboard/dashboard.rb1
-rw-r--r--features/steps/dashboard/dashboard_event_filters.rb2
-rw-r--r--features/steps/dashboard/dashboard_merge_requests.rb20
-rw-r--r--features/steps/group/group.rb3
-rw-r--r--features/steps/project/deploy_keys.rb3
-rw-r--r--features/steps/project/project_fork.rb7
-rw-r--r--features/steps/project/project_forked_merge_requests.rb138
-rw-r--r--features/steps/project/project_merge_requests.rb18
-rw-r--r--features/steps/shared/paths.rb12
-rw-r--r--features/support/env.rb4
13 files changed, 232 insertions, 19 deletions
diff --git a/features/dashboard/dashboard.feature b/features/dashboard/dashboard.feature
index 695148b5cdf..e249f392de7 100644
--- a/features/dashboard/dashboard.feature
+++ b/features/dashboard/dashboard.feature
@@ -16,6 +16,7 @@ Feature: Dashboard
And I visit dashboard page
Then I should see groups list
+ @javascript
Scenario: I should see last push widget
Then I should see last push widget
And I click "Create Merge Request" link
diff --git a/features/project/forked_merge_requests.feature b/features/project/forked_merge_requests.feature
new file mode 100644
index 00000000000..9f79fb8e53a
--- /dev/null
+++ b/features/project/forked_merge_requests.feature
@@ -0,0 +1,41 @@
+Feature: Project Forked Merge Requests
+ Background:
+ Given I sign in as a user
+ And I am a member of project "Shop"
+ And I have a project forked off of "Shop" called "Forked Shop"
+
+
+ @javascript
+ Scenario: I can visit the target projects commit for a forked merge request
+ Given I visit project "Forked Shop" merge requests page
+ And I click link "New Merge Request"
+ And I fill out a "Merge Request On Forked Project" merge request
+ And I follow the target commit link
+ Then I should see the commit under the forked from project
+
+ Scenario: I submit new unassigned merge request to a forked project
+ Given I visit project "Forked Shop" merge requests page
+ And I click link "New Merge Request"
+ And I fill out a "Merge Request On Forked Project" merge request
+ And I submit the merge request
+ Then I should see merge request "Merge Request On Forked Project"
+
+
+ Scenario: I should see a push widget for forked merge requests
+ Given project "Forked Shop" has push event
+ And I visit dashboard page
+ Then I should see last push widget
+ And I click "Create Merge Request on fork" link
+ Then I see prefilled new Merge Request page for the forked project
+
+
+ Scenario: I can edit a forked merge request
+ Given I visit project "Forked Shop" merge requests page
+ And I click link "New Merge Request"
+ And I fill out a "Merge Request On Forked Project" merge request
+ And I submit the merge request
+ And I should see merge request "Merge Request On Forked Project"
+ And I click link edit "Merge Request On Forked Project"
+ Then I see prefilled "Merge Request On Forked Project"
+
+
diff --git a/features/project/merge_requests.feature b/features/project/merge_requests.feature
index 5b8becbb6c9..63f27c3acc3 100644
--- a/features/project/merge_requests.feature
+++ b/features/project/merge_requests.feature
@@ -29,6 +29,7 @@ Feature: Project Merge Requests
And I click link "Close"
Then I should see closed merge request "Bug NS-04"
+ @javascript
Scenario: I submit new unassigned merge request
Given I click link "New Merge Request"
And I submit new merge request "Wiki Feature"
diff --git a/features/steps/dashboard/dashboard.rb b/features/steps/dashboard/dashboard.rb
index 329571ac6ef..596b5a78170 100644
--- a/features/steps/dashboard/dashboard.rb
+++ b/features/steps/dashboard/dashboard.rb
@@ -22,6 +22,7 @@ class Dashboard < Spinach::FeatureSteps
Then 'I see prefilled new Merge Request page' do
current_path.should == new_project_merge_request_path(@project)
+ find("#merge_request_target_project_id").value.should == @project.id.to_s
find("#merge_request_source_branch").value.should == "new_design"
find("#merge_request_target_branch").value.should == "master"
find("#merge_request_title").value.should == "New Design"
diff --git a/features/steps/dashboard/dashboard_event_filters.rb b/features/steps/dashboard/dashboard_event_filters.rb
index 09da4e6756f..d0fe5c9b64b 100644
--- a/features/steps/dashboard/dashboard_event_filters.rb
+++ b/features/steps/dashboard/dashboard_event_filters.rb
@@ -61,7 +61,7 @@ class EventFilters < Spinach::FeatureSteps
end
And 'this project has merge request event' do
- merge_request = create :merge_request, author: @user, project: @project
+ merge_request = create :merge_request, author: @user, source_project: @project, target_project: @project
Event.create(
project: @project,
action: Event::MERGED,
diff --git a/features/steps/dashboard/dashboard_merge_requests.rb b/features/steps/dashboard/dashboard_merge_requests.rb
index 7cfa8a13ff8..6c1fa39f081 100644
--- a/features/steps/dashboard/dashboard_merge_requests.rb
+++ b/features/steps/dashboard/dashboard_merge_requests.rb
@@ -6,18 +6,24 @@ class DashboardMergeRequests < Spinach::FeatureSteps
merge_requests = @user.merge_requests
merge_requests.each do |mr|
page.should have_content(mr.title[0..10])
- page.should have_content(mr.project.name)
+ page.should have_content(mr.target_project.name)
+ page.should have_content(mr.source_project.name)
end
end
And 'I have authored merge requests' do
- project1 = create :project
- project2 = create :project
+ project1_source = create :project
+ project1_target= create :project
+ project2_source = create :project
+ project2_target = create :project
- project1.team << [@user, :master]
- project2.team << [@user, :master]
- merge_request1 = create :merge_request, author: @user, project: project1
- merge_request2 = create :merge_request, author: @user, project: project2
+ project1_source.team << [@user, :master]
+ project1_target.team << [@user, :master]
+ project2_source.team << [@user, :master]
+ project2_target.team << [@user, :master]
+
+ merge_request1 = create :merge_request, author: @user, source_project: project1_source, target_project: project1_target
+ merge_request2 = create :merge_request, author: @user, source_project: project2_source, target_project: project2_target
end
end
diff --git a/features/steps/group/group.rb b/features/steps/group/group.rb
index a6b9aa606c6..6f18f6185f5 100644
--- a/features/steps/group/group.rb
+++ b/features/steps/group/group.rb
@@ -60,7 +60,8 @@ class Groups < Spinach::FeatureSteps
Given 'project from group has merge requests assigned to me' do
create :merge_request,
- project: project,
+ source_project: project,
+ target_project: project,
assignee: current_user,
author: current_user
end
diff --git a/features/steps/project/deploy_keys.rb b/features/steps/project/deploy_keys.rb
index 7f7492bfd6d..bd0801784f7 100644
--- a/features/steps/project/deploy_keys.rb
+++ b/features/steps/project/deploy_keys.rb
@@ -3,10 +3,13 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps
include SharedProject
include SharedPaths
+
+
step 'project has deploy key' do
create(:deploy_keys_project, project: @project)
end
+
step 'I should see project deploy keys' do
within '.enabled-keys' do
page.should have_content deploy_key.title
diff --git a/features/steps/project/project_fork.rb b/features/steps/project/project_fork.rb
index 775af0c5c58..4aa1e44b91e 100644
--- a/features/steps/project/project_fork.rb
+++ b/features/steps/project/project_fork.rb
@@ -4,6 +4,8 @@ class ForkProject < Spinach::FeatureSteps
include SharedProject
step 'I click link "Fork"' do
+ page.should have_content "Shop"
+ page.should have_content "Fork"
Gitlab::Shell.any_instance.stub(:fork_repository).and_return(true)
click_link "Fork"
end
@@ -14,12 +16,17 @@ class ForkProject < Spinach::FeatureSteps
@project.team << [@user, :reporter]
end
+
step 'I should see the forked project page' do
page.should have_content "Project was successfully forked."
current_path.should include current_user.namespace.path
+ @forked_project = Project.find_by_namespace_id(current_user.namespace.path)
end
step 'I already have a project named "Shop" in my namespace' do
+ current_user.namespace ||= create(:namespace)
+ current_user.namespace.should_not be_nil
+ current_user.namespace.path.should_not be_nil
@my_project = create(:project_with_code, name: "Shop", namespace: current_user.namespace)
end
diff --git a/features/steps/project/project_forked_merge_requests.rb b/features/steps/project/project_forked_merge_requests.rb
new file mode 100644
index 00000000000..4740be8625e
--- /dev/null
+++ b/features/steps/project/project_forked_merge_requests.rb
@@ -0,0 +1,138 @@
+class ProjectForkedMergeRequests < Spinach::FeatureSteps
+ include SharedAuthentication
+ include SharedProject
+ include SharedNote
+ include SharedPaths
+
+
+ Given 'I am a member of project "Shop"' do
+ @project = Project.find_by_name "Shop"
+ @project ||= create(:project_with_code, name: "Shop")
+ @project.team << [@user, :reporter]
+ end
+
+ And 'I have a project forked off of "Shop" called "Forked Shop"' do
+ @forking_user = @user
+ forked_project_link = build(:forked_project_link)
+ @forked_project = Project.find_by_name "Forked Shop"
+ @forked_project ||= create(:source_project_with_code, name: "Forked Shop", forked_project_link: forked_project_link, creator_id: @forking_user.id)
+ forked_project_link.forked_from_project = @project
+ forked_project_link.forked_to_project = @forked_project
+ forked_project_link.save!
+ end
+
+
+ Given 'I click link "New Merge Request"' do
+ click_link "New Merge Request"
+ end
+
+
+ Then 'I should see merge request "Merge Request On Forked Project"' do
+ page.should have_content "Merge Request On Forked Project"
+ @project.merge_requests.size.should >= 1
+ @merge_request = @project.merge_requests.last
+ current_path.should == project_merge_request_path(@project, @merge_request)
+ @merge_request.title.should == "Merge Request On Forked Project"
+ @merge_request.source_project.should == @forked_project
+ end
+
+ And 'I fill out a "Merge Request On Forked Project" merge request' do
+ fill_in "merge_request_title", with: "Merge Request On Forked Project"
+ find(:select, "merge_request_source_project_id", {}).value.should == @forked_project.id.to_s
+ find(:select, "merge_request_target_project_id", {}).value.should == @forked_project.id.to_s
+
+ select @project.path_with_namespace, from: "merge_request_target_project_id"
+ find(:select, "merge_request_target_project_id", {}).value.should == @project.id.to_s
+
+ select "master", from: "merge_request_source_branch"
+ find(:select, "merge_request_source_branch", {}).value.should == "master"
+ select "stable", from: "merge_request_target_branch"
+ find(:select, "merge_request_target_branch", {}).value.should == "stable"
+ end
+
+ And 'I submit the merge request' do
+ click_button "Submit merge request"
+ end
+
+ And 'I follow the target commit link' do
+ commit = @project.repository.commit
+ click_link commit.short_id(8)
+ end
+
+ Then 'I should see the commit under the forked from project' do
+ commit = @project.repository.commit
+ page.should have_content(commit.message)
+ end
+
+ And 'I click "Create Merge Request on fork" link' do
+ click_link "Create Merge Request on fork"
+ end
+
+ Then 'I see prefilled new Merge Request page for the forked project' do
+ current_path.should == new_project_merge_request_path(@forked_project)
+ find("#merge_request_source_project_id").value.should == @forked_project.id.to_s
+ find("#merge_request_target_project_id").value.should == @project.id.to_s
+ find("#merge_request_source_branch").value.should == "new_design"
+ find("#merge_request_target_branch").value.should == "master"
+ find("#merge_request_title").value.should == "New Design"
+ end
+
+ Then 'I should see last push widget' do
+ page.should have_content "You pushed to new_design"
+ page.should have_link "Create Merge Request"
+ end
+
+ Given 'project "Forked Shop" has push event' do
+ @forked_project = Project.find_by_name("Forked Shop")
+
+ data = {
+ before: "0000000000000000000000000000000000000000",
+ after: "0220c11b9a3e6c69dc8fd35321254ca9a7b98f7e",
+ ref: "refs/heads/new_design",
+ user_id: @user.id,
+ user_name: @user.name,
+ repository: {
+ name: @forked_project.name,
+ url: "localhost/rubinius",
+ description: "",
+ homepage: "localhost/rubinius",
+ private: true
+ }
+ }
+
+ @event = Event.create(
+ project: @forked_project,
+ action: Event::PUSHED,
+ data: data,
+ author_id: @user.id
+ )
+ end
+
+
+ Then 'I click link edit "Merge Request On Forked Project"' do
+ #there are other edit buttons in this page for replies
+# links = page.all("a.btn.grouped")
+# links.each {|e|puts e.inspect }
+ #TODO:[IA-08] there has got to be a better way to find this button -- there are multiple "Edit" buttons, so that won't work, maybe if we give it an explicit class in the haml
+ #click_link "Edit" # doesn't work, multiple "Edit" buttons
+ # find(:link, "a.btn:nth-child(3)").click
+ # find(:link, "/html/body/div[2]/div/div/h3/span[5]/a[2]").click
+ page.first(:xpath, "/html/body/div[2]/div/div/h3/span[5]/a[2]").click
+ end
+
+ Then 'I see prefilled "Merge Request On Forked Project"' do
+ current_path.should == edit_project_merge_request_path(@project, @merge_request)
+ page.should have_content "Edit merge request #{@merge_request.id}"
+ find("#merge_request_source_project_id").value.should == @forked_project.id.to_s
+ find("#merge_request_target_project_id").value.should == @project.id.to_s
+ find("#merge_request_source_branch").value.should == "master"
+ find("#merge_request_target_branch").value.should == "stable"
+ find("#merge_request_title").value.should == "Merge Request On Forked Project"
+ end
+
+
+ def project
+ @project ||= Project.find_by_name!("Shop")
+ end
+
+end
diff --git a/features/steps/project/project_merge_requests.rb b/features/steps/project/project_merge_requests.rb
index ea434412bb2..0ebfe961392 100644
--- a/features/steps/project/project_merge_requests.rb
+++ b/features/steps/project/project_merge_requests.rb
@@ -24,6 +24,7 @@ class ProjectMergeRequests < Spinach::FeatureSteps
page.should have_content "Wiki Feature"
end
+
Then 'I should see closed merge request "Bug NS-04"' do
merge_request = MergeRequest.find_by_title!("Bug NS-04")
merge_request.closed?.should be_true
@@ -56,30 +57,35 @@ class ProjectMergeRequests < Spinach::FeatureSteps
end
And 'I submit new merge request "Wiki Feature"' do
- fill_in "merge_request_title", with: "Wiki Feature"
- select "bootstrap", from: "merge_request_source_branch"
- select "master", from: "merge_request_target_branch"
+ fill_in "merge_request_title", :with => "Wiki Feature"
+ select project.path_with_namespace, :from => "merge_request_target_project_id"
+ select "master", :from => "merge_request_source_branch"
+ select "stable", :from => "merge_request_target_branch"
+ find(:select, "merge_request_target_branch", {}).find(:option, "stable", {}).value.should == "stable"
click_button "Submit merge request"
end
And 'project "Shop" have "Bug NS-04" open merge request' do
create(:merge_request,
title: "Bug NS-04",
- project: project,
+ source_project: project,
+ target_project: project,
author: project.users.first)
end
And 'project "Shop" have "Bug NS-05" open merge request with diffs inside' do
create(:merge_request_with_diffs,
title: "Bug NS-05",
- project: project,
+ source_project: project,
+ target_project: project,
author: project.users.first)
end
And 'project "Shop" have "Feature NS-03" closed merge request' do
create(:closed_merge_request,
title: "Feature NS-03",
- project: project,
+ source_project: project,
+ target_project: project,
author: project.users.first)
end
diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb
index 67e14121c6d..ca852f8f08f 100644
--- a/features/steps/shared/paths.rb
+++ b/features/steps/shared/paths.rb
@@ -184,6 +184,10 @@ module SharedPaths
visit project_path(project)
end
+ step 'I visit project "Forked Shop" merge requests page' do
+ visit project_merge_requests_path(@forked_project)
+ end
+
step 'I visit edit project "Shop" page' do
visit edit_project_path(project)
end
@@ -239,18 +243,22 @@ module SharedPaths
step 'I visit merge request page "Bug NS-04"' do
mr = MergeRequest.find_by_title("Bug NS-04")
- visit project_merge_request_path(mr.project, mr)
+ visit project_merge_request_path(mr.target_project, mr)
end
step 'I visit merge request page "Bug NS-05"' do
mr = MergeRequest.find_by_title("Bug NS-05")
- visit project_merge_request_path(mr.project, mr)
+ visit project_merge_request_path(mr.target_project, mr)
end
step 'I visit project "Shop" merge requests page' do
visit project_merge_requests_path(project)
end
+ step 'I visit forked project "Shop" merge requests page' do
+ visit project_merge_requests_path(project)
+ end
+
step 'I visit project "Shop" milestones page' do
visit project_milestones_path(project)
end
diff --git a/features/support/env.rb b/features/support/env.rb
index 1693a588993..5dce3402083 100644
--- a/features/support/env.rb
+++ b/features/support/env.rb
@@ -35,8 +35,7 @@ Capybara.ignore_hidden_elements = false
DatabaseCleaner.strategy = :truncation
Spinach.hooks.before_scenario do
- TestEnv.init(mailer: false)
-
+ TestEnv.setup_stubs
DatabaseCleaner.start
end
@@ -45,6 +44,7 @@ Spinach.hooks.after_scenario do
end
Spinach.hooks.before_run do
+ TestEnv.init(mailer: false, init_repos: true, repos: false)
RSpec::Mocks::setup self
include FactoryGirl::Syntax::Methods