diff options
Diffstat (limited to 'features')
-rw-r--r-- | features/dashboard/dashboard.feature | 1 | ||||
-rw-r--r-- | features/project/forked_merge_requests.feature | 41 | ||||
-rw-r--r-- | features/project/merge_requests.feature | 1 | ||||
-rw-r--r-- | features/steps/dashboard/dashboard.rb | 1 | ||||
-rw-r--r-- | features/steps/dashboard/dashboard_event_filters.rb | 2 | ||||
-rw-r--r-- | features/steps/dashboard/dashboard_merge_requests.rb | 20 | ||||
-rw-r--r-- | features/steps/group/group.rb | 3 | ||||
-rw-r--r-- | features/steps/project/deploy_keys.rb | 3 | ||||
-rw-r--r-- | features/steps/project/project_fork.rb | 7 | ||||
-rw-r--r-- | features/steps/project/project_forked_merge_requests.rb | 138 | ||||
-rw-r--r-- | features/steps/project/project_merge_requests.rb | 18 | ||||
-rw-r--r-- | features/steps/shared/paths.rb | 12 | ||||
-rw-r--r-- | features/support/env.rb | 4 |
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 |