forked_merge_requests.rb 6.6 KB
Newer Older
1
class Spinach::Features::ProjectForkedMergeRequests < Spinach::FeatureSteps
I
Izaak Alpert 已提交
2 3 4 5
  include SharedAuthentication
  include SharedProject
  include SharedNote
  include SharedPaths
6
  include Select2Helper
I
Izaak Alpert 已提交
7

8
  step 'I am a member of project "Shop"' do
S
skv 已提交
9
    @project = Project.find_by(name: "Shop")
10
    @project ||= create(:project, :repository, name: "Shop")
I
Izaak Alpert 已提交
11 12 13
    @project.team << [@user, :reporter]
  end

14
  step 'I have a project forked off of "Shop" called "Forked Shop"' do
D
Dmitriy Zaporozhets 已提交
15
    @forked_project = Projects::ForkService.new(@project, @user).execute
I
Izaak Alpert 已提交
16 17
  end

18
  step 'I click link "New Merge Request"' do
L
Luke "Jared" Bennett 已提交
19
    page.has_link?('New Merge Request') ? click_link("New Merge Request") : click_link('New merge request')
I
Izaak Alpert 已提交
20 21
  end

22
  step 'I should see merge request "Merge Request On Forked Project"' do
23
    expect(@project.merge_requests.size).to be >= 1
I
Izaak Alpert 已提交
24
    @merge_request = @project.merge_requests.last
25 26 27 28 29 30 31 32 33
    expect(current_path).to eq namespace_project_merge_request_path(@project.namespace, @project, @merge_request)
    expect(@merge_request.title).to eq "Merge Request On Forked Project"
    expect(@merge_request.source_project).to eq @forked_project
    expect(@merge_request.source_branch).to eq "fix"
    expect(@merge_request.target_branch).to eq "master"
    expect(page).to have_content @forked_project.path_with_namespace
    expect(page).to have_content @project.path_with_namespace
    expect(page).to have_content @merge_request.source_branch
    expect(page).to have_content @merge_request.target_branch
I
Izaak Alpert 已提交
34 35
  end

36
  step 'I fill out a "Merge Request On Forked Project" merge request' do
P
Phil Hughes 已提交
37 38 39
    expect(page).to have_content('Source branch')
    expect(page).to have_content('Target branch')

P
Phil Hughes 已提交
40 41 42 43 44 45 46 47
    first('.js-source-project').click
    first('.dropdown-source-project a', text: @forked_project.path_with_namespace)

    first('.js-target-project').click
    first('.dropdown-target-project a', text: @project.path_with_namespace)

    first('.js-source-branch').click
    first('.dropdown-source-branch .dropdown-content a', text: 'fix').click
48

49
    click_button "Compare branches and continue"
I
Izaak Alpert 已提交
50

51 52
    expect(page).to have_css("h3.page-title", text: "New Merge Request")

R
Rubén Dávila 已提交
53 54 55
    page.within 'form#new_merge_request' do
      fill_in "merge_request_title", with: "Merge Request On Forked Project"
    end
I
Izaak Alpert 已提交
56 57
  end

58
  step 'I submit the merge request' do
D
Douwe Maan 已提交
59
    click_button "Submit merge request"
I
Izaak Alpert 已提交
60 61
  end

62
  step 'I follow the target commit link' do
I
Izaak Alpert 已提交
63 64 65 66
    commit = @project.repository.commit
    click_link commit.short_id(8)
  end

67
  step 'I should see the commit under the forked from project' do
I
Izaak Alpert 已提交
68
    commit = @project.repository.commit
69
    expect(page).to have_content(commit.message)
I
Izaak Alpert 已提交
70 71
  end

72
  step 'I click "Create Merge Request on fork" link' do
I
Izaak Alpert 已提交
73 74 75
    click_link "Create Merge Request on fork"
  end

76
  step 'I see prefilled new Merge Request page for the forked project' do
77 78 79 80 81 82
    expect(current_path).to eq new_namespace_project_merge_request_path(@forked_project.namespace, @forked_project)
    expect(find("#merge_request_source_project_id").value).to eq @forked_project.id.to_s
    expect(find("#merge_request_target_project_id").value).to eq @project.id.to_s
    expect(find("#merge_request_source_branch").value).to have_content "new_design"
    expect(find("#merge_request_target_branch").value).to have_content "master"
    expect(find("#merge_request_title").value).to eq "New Design"
D
Dmitriy Zaporozhets 已提交
83 84
    verify_commit_link(".mr_target_commit", @project)
    verify_commit_link(".mr_source_commit", @forked_project)
I
Izaak Alpert 已提交
85 86
  end

87
  step 'I update the merge request title' do
88 89 90
    fill_in "merge_request_title", with: "An Edited Forked Merge Request"
  end

91
  step 'I save the merge request' do
92 93 94
    click_button "Save changes"
  end

95
  step 'I should see the edited merge request' do
96 97
    expect(page).to have_content "An Edited Forked Merge Request"
    expect(@project.merge_requests.size).to be >= 1
98
    @merge_request = @project.merge_requests.last
99 100 101 102 103 104 105 106
    expect(current_path).to eq namespace_project_merge_request_path(@project.namespace, @project, @merge_request)
    expect(@merge_request.source_project).to eq @forked_project
    expect(@merge_request.source_branch).to eq "fix"
    expect(@merge_request.target_branch).to eq "master"
    expect(page).to have_content @forked_project.path_with_namespace
    expect(page).to have_content @project.path_with_namespace
    expect(page).to have_content @merge_request.source_branch
    expect(page).to have_content @merge_request.target_branch
107 108
  end

109
  step 'I should see last push widget' do
110 111
    expect(page).to have_content "You pushed to new_design"
    expect(page).to have_link "Create Merge Request"
I
Izaak Alpert 已提交
112 113
  end

114
  step 'I click link edit "Merge Request On Forked Project"' do
I
Izaak Alpert 已提交
115
    find("#edit_merge_request").click
I
Izaak Alpert 已提交
116 117
  end

118
  step 'I see the edit page prefilled for "Merge Request On Forked Project"' do
119
    expect(current_path).to eq edit_namespace_project_merge_request_path(@project.namespace, @project, @merge_request)
120
    expect(page).to have_content "Edit merge request #{@merge_request.to_reference}"
121
    expect(find("#merge_request_title").value).to eq "Merge Request On Forked Project"
I
Izaak Alpert 已提交
122 123
  end

124
  step 'I fill out an invalid "Merge Request On Forked Project" merge request' do
P
Phil Hughes 已提交
125 126 127 128
    expect(find_by_id("merge_request_source_project_id", visible: false).value).to eq @forked_project.id.to_s
    expect(find_by_id("merge_request_target_project_id", visible: false).value).to eq @project.id.to_s
    expect(find_by_id("merge_request_source_branch", visible: false).value).to eq nil
    expect(find_by_id("merge_request_target_branch", visible: false).value).to eq "master"
129
    click_button "Compare branches"
I
Izaak Alpert 已提交
130 131
  end

132
  step 'I should see validation errors' do
133
    expect(page).to have_content "You must select source and target branch"
134 135 136
  end

  step 'the target repository should be the original repository' do
P
Phil Hughes 已提交
137
    expect(find_by_id("merge_request_target_project_id").value).to eq "#{@project.id}"
I
Izaak Alpert 已提交
138 139
  end

140
  step 'I click "Assign to" dropdown"' do
141
    click_button 'Assignee'
142 143 144
  end

  step 'I should see the target project ID in the input selector' do
145
    expect(find('.js-assignee-search')["data-project-id"]).to eq "#{@project.id}"
146 147 148
  end

  step 'I should see the users from the target project ID' do
149 150 151 152 153
    page.within '.dropdown-menu-user' do
      expect(page).to have_content 'Unassigned'
      expect(page).to have_content current_user.name
      expect(page).to have_content @project.users.first.name
    end
154 155
  end

D
Dmitriy Zaporozhets 已提交
156
  # Verify a link is generated against the correct project
I
Izaak Alpert 已提交
157
  def verify_commit_link(container_div, container_project)
D
Dmitriy Zaporozhets 已提交
158
    # This should force a wait for the javascript to execute
159
    expect(find(:div, container_div).find(".commit_short_id")['href']).to have_content "#{container_project.path_with_namespace}/commit"
I
Izaak Alpert 已提交
160
  end
I
Izaak Alpert 已提交
161
end