summaryrefslogtreecommitdiff
path: root/features/steps/project/forked_merge_requests.rb
blob: dacab6c79775103fe004a2a5e0dc79b41f9e339e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
class Spinach::Features::ProjectForkedMergeRequests < Spinach::FeatureSteps
  include SharedAuthentication
  include SharedProject
  include SharedNote
  include SharedPaths
  include Select2Helper

  step 'I am a member of project "Shop"' do
    @project = Project.find_by(name: "Shop")
    @project ||= create(:project, name: "Shop")
    @project.team << [@user, :reporter]
  end

  step 'I have a project forked off of "Shop" called "Forked Shop"' do
    @forked_project = Projects::ForkService.new(@project, @user).execute
  end

  step 'I click link "New Merge Request"' do
    click_link "New Merge Request"
  end

  step 'I should see merge request "Merge Request On Forked Project"' do
    expect(@project.merge_requests.size).to be >= 1
    @merge_request = @project.merge_requests.last
    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
  end

  step 'I fill out a "Merge Request On Forked Project" merge request' do
    expect(page).to have_content('Source branch')
    expect(page).to have_content('Target branch')

    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

    click_button "Compare branches and continue"

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

    page.within 'form#new_merge_request' do
      fill_in "merge_request_title", with: "Merge Request On Forked Project"
    end
  end

  step 'I submit the merge request' do
    click_button "Submit merge request"
  end

  step 'I follow the target commit link' do
    commit = @project.repository.commit
    click_link commit.short_id(8)
  end

  step 'I should see the commit under the forked from project' do
    commit = @project.repository.commit
    expect(page).to have_content(commit.message)
  end

  step 'I click "Create Merge Request on fork" link' do
    click_link "Create Merge Request on fork"
  end

  step 'I see prefilled new Merge Request page for the forked project' do
    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"
    verify_commit_link(".mr_target_commit", @project)
    verify_commit_link(".mr_source_commit", @forked_project)
  end

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

  step 'I save the merge request' do
    click_button "Save changes"
  end

  step 'I should see the edited merge request' do
    expect(page).to have_content "An Edited Forked Merge Request"
    expect(@project.merge_requests.size).to be >= 1
    @merge_request = @project.merge_requests.last
    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
  end

  step 'I should see last push widget' do
    expect(page).to have_content "You pushed to new_design"
    expect(page).to have_link "Create Merge Request"
  end

  step 'I click link edit "Merge Request On Forked Project"' do
    find("#edit_merge_request").click
  end

  step 'I see the edit page prefilled for "Merge Request On Forked Project"' do
    expect(current_path).to eq edit_namespace_project_merge_request_path(@project.namespace, @project, @merge_request)
    expect(page).to have_content "Edit merge request #{@merge_request.to_reference}"
    expect(find("#merge_request_title").value).to eq "Merge Request On Forked Project"
  end

  step 'I fill out an invalid "Merge Request On Forked Project" merge request' do
    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"
    click_button "Compare branches"
  end

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

  step 'the target repository should be the original repository' do
    expect(find_by_id("merge_request_target_project_id").value).to eq "#{@project.id}"
  end

  step 'I click "Assign to" dropdown"' do
    first('.ajax-users-select').click
  end

  step 'I should see the target project ID in the input selector' do
    expect(page).to have_selector("input[data-project-id=\"#{@project.id}\"]")
  end

  step 'I should see the users from the target project ID' do
    expect(page).to have_selector('.user-result', visible: true, count: 3)
    users = page.all('.user-name')
    expect(users[0].text).to eq 'Unassigned'
    expect(users[1].text).to eq current_user.name
    expect(users[2].text).to eq @project.users.first.name
  end

  # Verify a link is generated against the correct project
  def verify_commit_link(container_div, container_project)
    # This should force a wait for the javascript to execute
    expect(find(:div, container_div).find(".commit_short_id")['href']).to have_content "#{container_project.path_with_namespace}/commit"
  end
end