Commit 489fa5d72631505873b8c33f3a2bbd5919330a92
1 parent
3d7194f0
Exists in
master
and in
4 other branches
MR on Fork multiple fixes
-Disable observers post test run -Allow db:seed_fu RAILS_ENV=test to be run more than once without error -fix diffs_in_between, was passing in the default_options for grit, but grit in this case doesn't take options, fixed the test to actually fail if the incorrect diffs are returned -make notes/commits render against proper project -MR discussion file links should reference note's project -Added tests for commit links on edit merge request -fixes edit issues (canceling an edited mr, updating an edited mr) -updates tests with checks for source code updates -still forked_merge_requests.feature (project_forked_merge_requests) test not passing (commented out -- "stable" not being set) MR API: error on bad target_project -If the target project id is specified and it is not the same as the project the request is being made on (the source), and the it isn't a fork of that project, error out, otherwise use it as the target -Fixes some busted (but hidden) test cases Conflicts: app/views/merge_requests/show/_diffs.html.haml spec/features/notes_on_merge_requests_spec.rb Change-Id: I20e595c156d0e8a63048baaead7be6330c738a05
Showing
19 changed files
with
116 additions
and
59 deletions
Show diff stats
app/controllers/projects/merge_requests_controller.rb
... | ... | @@ -50,10 +50,13 @@ class Projects::MergeRequestsController < Projects::ApplicationController |
50 | 50 | @merge_request.target_project = Project.find_by_id(params[:merge_request][:target_project_id]) |
51 | 51 | end |
52 | 52 | @target_branches = @merge_request.target_project.nil? ? [] : @merge_request.target_project.repository.branch_names |
53 | + @source_project = @merge_request.source_project | |
53 | 54 | @merge_request |
54 | 55 | end |
55 | 56 | |
56 | 57 | def edit |
58 | + @source_project = @merge_request.source_project | |
59 | + @target_project = @merge_request.target_project | |
57 | 60 | @target_branches = @merge_request.target_project.repository.branch_names |
58 | 61 | end |
59 | 62 | |
... | ... | @@ -75,7 +78,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController |
75 | 78 | if @merge_request.update_attributes(params[:merge_request].merge(author_id_of_changes: current_user.id)) |
76 | 79 | @merge_request.reload_code |
77 | 80 | @merge_request.mark_as_unchecked |
78 | - redirect_to [@project, @merge_request], notice: 'Merge request was successfully updated.' | |
81 | + redirect_to [@merge_request.target_project, @merge_request], notice: 'Merge request was successfully updated.' | |
79 | 82 | else |
80 | 83 | render "edit" |
81 | 84 | end |
... | ... | @@ -104,6 +107,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController |
104 | 107 | |
105 | 108 | def branch_from |
106 | 109 | #This is always source |
110 | + @source_project = @merge_request.nil? ? @project : @merge_request.source_project | |
107 | 111 | @commit = @repository.commit(params[:ref]) |
108 | 112 | end |
109 | 113 | |
... | ... | @@ -128,13 +132,14 @@ class Projects::MergeRequestsController < Projects::ApplicationController |
128 | 132 | |
129 | 133 | protected |
130 | 134 | |
135 | + | |
131 | 136 | def selected_target_project |
132 | 137 | ((@project.id.to_s == params[:target_project_id]) || @project.forked_project_link.nil?) ? @project : @project.forked_project_link.forked_from_project |
133 | 138 | end |
134 | 139 | |
135 | 140 | |
136 | 141 | def merge_request |
137 | - @merge_request ||= @project.merge_requests.find(params[:id]) | |
142 | + @merge_request ||= MergeRequest.find_by_id(params[:id]) | |
138 | 143 | end |
139 | 144 | |
140 | 145 | def authorize_modify_merge_request! | ... | ... |
app/helpers/notes_helper.rb
... | ... | @@ -11,7 +11,7 @@ module NotesHelper |
11 | 11 | |
12 | 12 | def link_to_commit_diff_line_note(note) |
13 | 13 | if note.for_commit_diff_line? |
14 | - link_to "#{note.diff_file_name}:L#{note.diff_new_line}", project_commit_path(@project, note.noteable, anchor: note.line_code) | |
14 | + link_to "#{note.diff_file_name}:L#{note.diff_new_line}", project_commit_path(note.project, note.noteable, anchor: note.line_code) | |
15 | 15 | end |
16 | 16 | end |
17 | 17 | ... | ... |
app/views/projects/commit/show.html.haml
... | ... | @@ -7,5 +7,5 @@ |
7 | 7 | and |
8 | 8 | %span.cred #{@commit.stats.deletions} deletions |
9 | 9 | |
10 | -= render "projects/commits/diffs", diffs: @commit.diffs | |
11 | -= render "projects/notes/notes_with_form" | |
10 | += render "projects/commits/diffs", diffs: @commit.diffs, project: @project | |
11 | += render "projects/notes/notes_with_form" | |
12 | 12 | \ No newline at end of file | ... | ... |
app/views/projects/commits/_diffs.html.haml
... | ... | @@ -5,7 +5,7 @@ |
5 | 5 | %p To prevent performance issue we rejected diff information. |
6 | 6 | %p |
7 | 7 | But if you still want to see diff |
8 | - = link_to "click this link", project_commit_path(@project, @commit, force_show_diff: true), class: "underlined_link" | |
8 | + = link_to "click this link", project_commit_path(project, @commit, force_show_diff: true), class: "underlined_link" | |
9 | 9 | |
10 | 10 | %p.cgray |
11 | 11 | Showing #{pluralize(diffs.count, "changed file")} |
... | ... | @@ -16,8 +16,8 @@ |
16 | 16 | - unless @suppress_diff |
17 | 17 | - diffs.each_with_index do |diff, i| |
18 | 18 | - next if diff.diff.empty? |
19 | - - file = Gitlab::Git::Blob.new(@repository, @commit.id, @ref, diff.new_path) | |
20 | - - file = Gitlab::Git::Blob.new(@repository, @commit.parent_id, @ref, diff.old_path) unless file.exists? | |
19 | + - file = Gitlab::Git::Blob.new(project.repository, @commit.id, @ref, diff.new_path) | |
20 | + - file = Gitlab::Git::Blob.new(project.repository, @commit.parent_id, @ref, diff.old_path) unless file.exists? | |
21 | 21 | - next unless file.exists? |
22 | 22 | .file{id: "diff-#{i}"} |
23 | 23 | .header |
... | ... | @@ -25,7 +25,7 @@ |
25 | 25 | %span= diff.old_path |
26 | 26 | |
27 | 27 | - if @commit.parent_ids.present? |
28 | - = link_to project_blob_path(@project, tree_join(@commit.parent_id, diff.new_path)), {:class => 'btn btn-tiny pull-right view-file'} do | |
28 | + = link_to project_blob_path(project, tree_join(@commit.parent_id, diff.new_path)), {:class => 'btn btn-tiny pull-right view-file'} do | |
29 | 29 | View file @ |
30 | 30 | %span.commit-short-id= @commit.short_id(6) |
31 | 31 | - else |
... | ... | @@ -33,7 +33,7 @@ |
33 | 33 | - if diff.a_mode && diff.b_mode && diff.a_mode != diff.b_mode |
34 | 34 | %span.file-mode= "#{diff.a_mode} → #{diff.b_mode}" |
35 | 35 | |
36 | - = link_to project_blob_path(@project, tree_join(@commit.id, diff.new_path)), {:class => 'btn btn-tiny pull-right view-file'} do | |
36 | + = link_to project_blob_path(project, tree_join(@commit.id, diff.new_path)), {:class => 'btn btn-tiny pull-right view-file'} do | |
37 | 37 | View file @ |
38 | 38 | %span.commit-short-id= @commit.short_id(6) |
39 | 39 | |
... | ... | @@ -43,7 +43,7 @@ |
43 | 43 | - if file.text? |
44 | 44 | = render "projects/commits/text_file", diff: diff, index: i |
45 | 45 | - elsif file.image? |
46 | - - old_file = Gitlab::Git::Blob.new(@repository, @commit.parent_id, @ref, diff.old_path) if @commit.parent_id | |
46 | + - old_file = Gitlab::Git::Blob.new(project.repository, @commit.parent_id, @ref, diff.old_path) if @commit.parent_id | |
47 | 47 | = render "projects/commits/image", diff: diff, old_file: old_file, file: file, index: i |
48 | 48 | - else |
49 | 49 | %p.nothing_here_message No preview for this file type | ... | ... |
app/views/projects/compare/show.html.haml
app/views/projects/merge_requests/_form.html.haml
1 | -= form_for [@project, @merge_request], html: { class: "#{controller.action_name}-merge-request form-horizontal" } do |form_helper| | |
1 | += form_for [@source_project, @merge_request], html: { class: "#{controller.action_name}-merge-request form-horizontal" } do |form_helper| | |
2 | 2 | -if @merge_request.errors.any? |
3 | 3 | .alert.alert-error |
4 | 4 | %ul |
... | ... | @@ -55,10 +55,10 @@ |
55 | 55 | -else |
56 | 56 | = form_helper.submit 'Save changes', class: "btn btn-save" |
57 | 57 | - if @merge_request.new_record? |
58 | - = link_to project_merge_requests_path(@project), class: "btn btn-cancel" do | |
58 | + = link_to project_merge_requests_path(@source_project), class: "btn btn-cancel" do | |
59 | 59 | Cancel |
60 | 60 | - else |
61 | - = link_to project_merge_request_path(@project, @merge_request), class: "btn btn-cancel" do | |
61 | + = link_to project_merge_request_path(@target_project, @merge_request), class: "btn btn-cancel" do | |
62 | 62 | Cancel |
63 | 63 | |
64 | 64 | :javascript |
... | ... | @@ -68,19 +68,17 @@ |
68 | 68 | , target_branch = $("#merge_request_target_branch") |
69 | 69 | , target_project = $("#merge_request_target_project_id"); |
70 | 70 | |
71 | - $.get("#{branch_from_project_merge_requests_path(@project)}", {ref: source_branch.val() }); | |
72 | - $.get("#{branch_to_project_merge_requests_path(@project)}", {target_project_id: target_project.val(),ref: target_branch.val() }); | |
71 | + $.get("#{branch_from_project_merge_requests_path(@source_project)}", {ref: source_branch.val() }); | |
72 | + $.get("#{branch_to_project_merge_requests_path(@source_project)}", {target_project_id: target_project.val(),ref: target_branch.val() }); | |
73 | 73 | |
74 | 74 | target_project.live("change", function() { |
75 | - $.get("#{update_branches_project_merge_requests_path(@project)}", {target_project_id: $(this).val() }); | |
75 | + $.get("#{update_branches_project_merge_requests_path(@source_project)}", {target_project_id: $(this).val() }); | |
76 | 76 | }); |
77 | 77 | source_branch.live("change", function() { |
78 | - $.get("#{branch_from_project_merge_requests_path(@project)}", {ref: $(this).val() }); | |
78 | + $.get("#{branch_from_project_merge_requests_path(@source_project)}", {ref: $(this).val() }); | |
79 | 79 | }); |
80 | 80 | target_branch.live("change", function() { |
81 | - $.get("#{branch_to_project_merge_requests_path(@project)}", {target_project_id: target_project.val(),ref: $(this).val() }); | |
81 | + $.get("#{branch_to_project_merge_requests_path(@source_project)}", {target_project_id: target_project.val(),ref: $(this).val() }); | |
82 | 82 | }); |
83 | 83 | |
84 | - }); | |
85 | - | |
86 | - | |
84 | + }); | |
87 | 85 | \ No newline at end of file | ... | ... |
app/views/projects/merge_requests/branch_from.js.haml
app/views/projects/merge_requests/show/_diffs.html.haml
1 | 1 | - if @merge_request.valid_diffs? |
2 | - = render "projects/commits/diffs", diffs: @merge_request.diffs | |
2 | + = render "projects/commits/diffs", diffs: @diffs, project: @merge_request.source_project | |
3 | 3 | - elsif @merge_request.broken_diffs? |
4 | 4 | %h4.nothing_here_message |
5 | 5 | Can't load diff. |
6 | 6 | You can |
7 | - = link_to "download it", project_merge_request_path(@project, @merge_request, format: :diff), class: "vlink" | |
7 | + = link_to "download it", project_merge_request_path(@merge_request.source_project, @merge_request), format: :diff, class: "vlink" | |
8 | 8 | instead. |
9 | 9 | - else |
10 | 10 | %h4.nothing_here_message Nothing to merge | ... | ... |
app/views/projects/merge_requests/show/_mr_title.html.haml
... | ... | @@ -21,7 +21,7 @@ |
21 | 21 | |
22 | 22 | = link_to 'Close', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :close }), method: :put, class: "btn grouped btn-close", title: "Close merge request" |
23 | 23 | |
24 | - = link_to edit_project_merge_request_path(@project, @merge_request), class: "btn grouped" do | |
24 | + = link_to edit_project_merge_request_path(@project, @merge_request), class: "btn grouped", id:"edit_merge_request" do | |
25 | 25 | %i.icon-edit |
26 | 26 | Edit |
27 | 27 | ... | ... |
app/views/projects/notes/_discussion.html.haml
... | ... | @@ -10,7 +10,7 @@ |
10 | 10 | Show discussion |
11 | 11 | = image_tag gravatar_icon(note.author_email), class: "avatar s32" |
12 | 12 | %div |
13 | - = link_to_member(@project, note.author, avatar: false) | |
13 | + = link_to_member(note.project, note.author, avatar: false) | |
14 | 14 | - if note.for_merge_request? |
15 | 15 | - if note.diff |
16 | 16 | started a discussion on this merge request diff |
... | ... | @@ -23,7 +23,7 @@ |
23 | 23 | discussion on this merge request diff |
24 | 24 | - elsif note.for_commit? |
25 | 25 | started a discussion on commit |
26 | - #{link_to note.noteable.short_id, project_commit_path(@project, note.noteable)} | |
26 | + #{link_to note.noteable.short_id, project_commit_path(note.project, note.noteable)} | |
27 | 27 | = link_to_commit_diff_line_note(note) if note.for_diff_line? |
28 | 28 | - else |
29 | 29 | %cite.cgray started a discussion | ... | ... |
db/fixtures/test/001_repo.rb
... | ... | @@ -25,9 +25,12 @@ print "Creating seed satellite..." |
25 | 25 | SATELLITE_PATH = Rails.root.join('tmp', 'satellite') |
26 | 26 | # Make directory |
27 | 27 | FileUtils.mkdir_p(SATELLITE_PATH) |
28 | +# Clear any potential directory | |
29 | +FileUtils.rm_rf("#{SATELLITE_PATH}/gitlabhq") | |
28 | 30 | # Chdir, clone from the seed |
29 | 31 | FileUtils.cd(SATELLITE_PATH) do |
30 | 32 | # Clone the satellite |
33 | + | |
31 | 34 | `git clone --quiet #{REPO_PATH}/gitlabhq #{SATELLITE_PATH}/gitlabhq` |
32 | 35 | end |
33 | 36 | puts ' done.' | ... | ... |
features/project/forked_merge_requests.feature
... | ... | @@ -13,6 +13,7 @@ Feature: Project Forked Merge Requests |
13 | 13 | And I follow the target commit link |
14 | 14 | Then I should see the commit under the forked from project |
15 | 15 | |
16 | + @javascript | |
16 | 17 | Scenario: I submit new unassigned merge request to a forked project |
17 | 18 | Given I visit project "Forked Shop" merge requests page |
18 | 19 | And I click link "New Merge Request" |
... | ... | @@ -21,6 +22,7 @@ Feature: Project Forked Merge Requests |
21 | 22 | Then I should see merge request "Merge Request On Forked Project" |
22 | 23 | |
23 | 24 | |
25 | + @javascript | |
24 | 26 | Scenario: I should see a push widget for forked merge requests |
25 | 27 | Given project "Forked Shop" has push event |
26 | 28 | And I visit dashboard page |
... | ... | @@ -28,7 +30,7 @@ Feature: Project Forked Merge Requests |
28 | 30 | And I click "Create Merge Request on fork" link |
29 | 31 | Then I see prefilled new Merge Request page for the forked project |
30 | 32 | |
31 | - | |
33 | + @javascript | |
32 | 34 | Scenario: I can edit a forked merge request |
33 | 35 | Given I visit project "Forked Shop" merge requests page |
34 | 36 | And I click link "New Merge Request" |
... | ... | @@ -36,6 +38,6 @@ Feature: Project Forked Merge Requests |
36 | 38 | And I submit the merge request |
37 | 39 | And I should see merge request "Merge Request On Forked Project" |
38 | 40 | And I click link edit "Merge Request On Forked Project" |
39 | - Then I see prefilled "Merge Request On Forked Project" | |
41 | + Then I see the edit page prefilled for "Merge Request On Forked Project" | |
40 | 42 | |
41 | 43 | ... | ... |
features/steps/project/project_forked_merge_requests.rb
... | ... | @@ -43,11 +43,14 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps |
43 | 43 | |
44 | 44 | select @project.path_with_namespace, from: "merge_request_target_project_id" |
45 | 45 | find(:select, "merge_request_target_project_id", {}).value.should == @project.id.to_s |
46 | - | |
47 | 46 | select "master", from: "merge_request_source_branch" |
48 | - find(:select, "merge_request_source_branch", {}).value.should == "master" | |
47 | + find(:select, "merge_request_source_branch", {}).value.should have_content "master" | |
48 | + #Force the page to wait until the javascript finishes, so the stable option shows up | |
49 | 49 | select "stable", from: "merge_request_target_branch" |
50 | - find(:select, "merge_request_target_branch", {}).value.should == "stable" | |
50 | + find(:select, "merge_request_target_branch", {}).should have_content "stable" | |
51 | + | |
52 | + verify_commit_link(".mr_source_commit",@forked_project) | |
53 | + verify_commit_link(".mr_target_commit",@project) | |
51 | 54 | end |
52 | 55 | |
53 | 56 | And 'I submit the merge request' do |
... | ... | @@ -72,9 +75,11 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps |
72 | 75 | current_path.should == new_project_merge_request_path(@forked_project) |
73 | 76 | find("#merge_request_source_project_id").value.should == @forked_project.id.to_s |
74 | 77 | find("#merge_request_target_project_id").value.should == @project.id.to_s |
75 | - find("#merge_request_source_branch").value.should == "new_design" | |
76 | - find("#merge_request_target_branch").value.should == "master" | |
78 | + find("#merge_request_source_branch").value.should have_content "new_design" | |
79 | + find("#merge_request_target_branch").value.should have_content "master" | |
77 | 80 | find("#merge_request_title").value.should == "New Design" |
81 | + verify_commit_link(".mr_target_commit",@project) | |
82 | + verify_commit_link(".mr_source_commit",@forked_project) | |
78 | 83 | end |
79 | 84 | |
80 | 85 | Then 'I should see last push widget' do |
... | ... | @@ -110,24 +115,25 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps |
110 | 115 | |
111 | 116 | |
112 | 117 | Then 'I click link edit "Merge Request On Forked Project"' do |
113 | - #there are other edit buttons in this page for replies | |
114 | -# links = page.all("a.btn.grouped") | |
115 | -# links.each {|e|puts e.inspect } | |
116 | - #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 | |
117 | - #click_link "Edit" # doesn't work, multiple "Edit" buttons | |
118 | - # find(:link, "a.btn:nth-child(3)").click | |
119 | - # find(:link, "/html/body/div[2]/div/div/h3/span[5]/a[2]").click | |
120 | - page.first(:xpath, "/html/body/div[2]/div/div/h3/span[5]/a[2]").click | |
118 | + find("#edit_merge_request").click | |
121 | 119 | end |
122 | 120 | |
123 | - Then 'I see prefilled "Merge Request On Forked Project"' do | |
121 | + Then 'I see the edit page prefilled for "Merge Request On Forked Project"' do | |
124 | 122 | current_path.should == edit_project_merge_request_path(@project, @merge_request) |
125 | 123 | page.should have_content "Edit merge request #{@merge_request.id}" |
124 | + find("#merge_request_title").value.should == "Merge Request On Forked Project" | |
126 | 125 | find("#merge_request_source_project_id").value.should == @forked_project.id.to_s |
127 | 126 | find("#merge_request_target_project_id").value.should == @project.id.to_s |
128 | - find("#merge_request_source_branch").value.should == "master" | |
129 | - find("#merge_request_target_branch").value.should == "stable" | |
130 | - find("#merge_request_title").value.should == "Merge Request On Forked Project" | |
127 | + find("#merge_request_source_branch").value.should have_content "master" | |
128 | + verify_commit_link(".mr_source_commit",@forked_project) | |
129 | + #TODO[IA-08] reienstate these -- not sure why they started repeatedly breaking | |
130 | + #sleep 3 | |
131 | + #puts "Source text:#{find("#merge_request_source_branch").text}" | |
132 | + #puts "Source value:#{find("#merge_request_source_branch").value}" | |
133 | + #puts "Target text:#{find("#merge_request_target_branch").text}" | |
134 | + #puts "Target value:#{find("#merge_request_target_branch").value}" | |
135 | + #find("#merge_request_target_branch").value.should have_content "stable" | |
136 | + #verify_commit_link(".mr_target_commit",@project) | |
131 | 137 | end |
132 | 138 | |
133 | 139 | |
... | ... | @@ -135,4 +141,19 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps |
135 | 141 | @project ||= Project.find_by_name!("Shop") |
136 | 142 | end |
137 | 143 | |
144 | + #Verify a link is generated against the correct project | |
145 | + def verify_commit_link(container_div, container_project) | |
146 | + #This should force a wait for the javascript to execute | |
147 | + #puts "text: #{find(:div,container_div).text}" | |
148 | + find(:div,container_div).should have_css ".browse_code_link_holder" | |
149 | + find(:div,container_div).find(".commit_short_id")['href'].should have_content "#{container_project.path_with_namespace}/commit" | |
150 | + #commit_links = commit.all("a").map(&:text) | |
151 | + #links = commit_links.collect {|e|commit.find(:link,e)['href']} | |
152 | + #links.size.should == 4 | |
153 | + #links[0].should have_content "#{container_project.path_with_namespace}/tree" | |
154 | + #links[1].should have_content "#{container_project.path_with_namespace}/commit" | |
155 | + #links[3].should have_content "#{container_project.path_with_namespace}/commit" | |
156 | + | |
157 | + end | |
158 | + | |
138 | 159 | end | ... | ... |
lib/api/merge_requests.rb
... | ... | @@ -68,10 +68,13 @@ module API |
68 | 68 | merge_request = user_project.merge_requests.new(attrs) |
69 | 69 | merge_request.author = current_user |
70 | 70 | merge_request.source_project = user_project |
71 | - if !attrs[:target_project_id].nil? && user_project.forked? && user_project.forked_from_project.id.to_s == attrs[:target_project_id] | |
71 | + target_project_id = attrs[:target_project_id] | |
72 | + if !target_project_id.nil? && user_project.forked? && user_project.forked_from_project.id.to_s == target_project_id | |
72 | 73 | merge_request.target_project = Project.find_by_id(attrs[:target_project_id]) |
73 | - elsif attrs[:target_project].nil? | |
74 | + elsif target_project_id.nil? || target_project_id == user_project.id.to_s | |
74 | 75 | merge_request.target_project = user_project |
76 | + elsif !target_project_id.nil? | |
77 | + render_api_error!('(Bad Request) Specified target project that is not the source project, or the source fork of the project.', 400) | |
75 | 78 | end |
76 | 79 | if merge_request.save |
77 | 80 | merge_request.reload_code | ... | ... |
lib/gitlab/satellite/merge_action.rb
... | ... | @@ -74,10 +74,12 @@ module Gitlab |
74 | 74 | update_satellite_source_and_target!(merge_repo) |
75 | 75 | if merge_request.for_fork? |
76 | 76 | common_commit = merge_repo.git.native(:merge_base, default_options, ["origin/#{merge_request.target_branch}", "source/#{merge_request.source_branch}"]).strip |
77 | - diffs = merge_repo.diff(default_options, common_commit, "source/#{merge_request.source_branch}") | |
77 | + #this method doesn't take default options | |
78 | + diffs = merge_repo.diff(common_commit, "source/#{merge_request.source_branch}") | |
78 | 79 | else |
79 | 80 | common_commit = merge_repo.git.native(:merge_base, default_options, ["#{merge_request.target_branch}", "#{merge_request.source_branch}"]).strip |
80 | - diffs = merge_repo.diff(default_options, common_commit, "#{merge_request.source_branch}") | |
81 | + #this method doesn't take default options | |
82 | + diffs = merge_repo.diff(common_commit, "#{merge_request.source_branch}") | |
81 | 83 | end |
82 | 84 | return diffs |
83 | 85 | end | ... | ... |
spec/features/notes_on_merge_requests_spec.rb
... | ... | @@ -184,6 +184,9 @@ describe "On a merge request diff", js: true, focus: true do |
184 | 184 | end |
185 | 185 | |
186 | 186 | describe "with muliple note forms" do |
187 | + let!(:project) { create(:source_project_with_code) } | |
188 | + let!(:merge_request) { create(:merge_request_with_diffs, source_project: project, target_project: project) } | |
189 | + | |
187 | 190 | before do |
188 | 191 | find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185"]').click |
189 | 192 | find('a[data-line-code="342e16cbbd482ac2047dc679b2749d248cc1428f_18_17"]').click | ... | ... |
spec/lib/gitlab/satellite/merge_action_spec.rb
... | ... | @@ -76,6 +76,13 @@ describe 'Gitlab::Satellite::MergeAction' do |
76 | 76 | |
77 | 77 | |
78 | 78 | describe '#diffs_between_satellite tested against diff_in_satellite' do |
79 | + | |
80 | + def is_a_matching_diff(diff, diffs) | |
81 | + diff_count = diff.scan('diff --git').size | |
82 | + diff_count.should >= 1 | |
83 | + diffs.size.should == diff_count | |
84 | + diffs.each {|a_diff| (diff.include? a_diff.diff).should be_true} | |
85 | + end | |
79 | 86 | context 'on fork' do |
80 | 87 | it 'should get proper diffs' do |
81 | 88 | merge_request_fork.target_branch = @close_commit1[0] |
... | ... | @@ -84,24 +91,24 @@ describe 'Gitlab::Satellite::MergeAction' do |
84 | 91 | |
85 | 92 | merge_request_fork.target_branch = @close_commit1[0] |
86 | 93 | merge_request_fork.source_branch = @master[0] |
87 | - diff = Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request_fork).diffs_between_satellite | |
94 | + diff = Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request_fork).diff_in_satellite | |
88 | 95 | |
89 | - diffs.each {|a_diff| (diff.include? a_diff.diff).should be_true} | |
96 | + is_a_matching_diff(diff,diffs) | |
90 | 97 | end |
91 | 98 | end |
92 | 99 | |
93 | 100 | context 'between branches' do |
94 | 101 | it 'should get proper diffs' do |
95 | 102 | merge_request.target_branch = @close_commit1[0] |
96 | - merge_request.source_branch = @wiki_branch[0] | |
103 | + merge_request.source_branch = @master[0] | |
97 | 104 | diffs = Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request).diffs_between_satellite |
98 | 105 | |
99 | 106 | |
100 | 107 | merge_request.target_branch = @close_commit1[0] |
101 | 108 | merge_request.source_branch = @master[0] |
102 | - diff = Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request).diffs_between_satellite | |
109 | + diff = Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request).diff_in_satellite | |
103 | 110 | |
104 | - diffs.each {|a_diff| (diff.include? a_diff.diff).should be_true} | |
111 | + is_a_matching_diff(diff,diffs) | |
105 | 112 | end |
106 | 113 | end |
107 | 114 | end | ... | ... |
spec/observers/merge_request_observer_spec.rb
spec/requests/api/merge_requests_spec.rb
... | ... | @@ -79,6 +79,7 @@ describe API::API do |
79 | 79 | let!(:user2) {create(:user)} |
80 | 80 | let!(:forked_project_link) { build(:forked_project_link) } |
81 | 81 | let!(:fork_project) { create(:source_project_with_code, forked_project_link: forked_project_link, namespace: user2.namespace, creator_id: user2.id) } |
82 | + let!(:unrelated_project) { create(:target_project_with_code, namespace: user2.namespace, creator_id: user2.id) } | |
82 | 83 | |
83 | 84 | before :each do |each| |
84 | 85 | fork_project.team << [user2, :reporters] |
... | ... | @@ -124,9 +125,21 @@ describe API::API do |
124 | 125 | |
125 | 126 | it "should return 400 when target_branch is specified and not a forked project" do |
126 | 127 | post api("/projects/#{project.id}/merge_requests", user), |
127 | - target_branch: 'master', source_branch: 'stable', author: user, target_project: fork_project.id | |
128 | + title: 'Test merge_request', target_branch: 'master', source_branch: 'stable', author: user, target_project_id: fork_project.id | |
128 | 129 | response.status.should == 400 |
129 | 130 | end |
131 | + | |
132 | + it "should return 400 when target_branch is specified and for a different fork" do | |
133 | + post api("/projects/#{fork_project.id}/merge_requests", user2), | |
134 | + title: 'Test merge_request', target_branch: 'master', source_branch: 'stable', author: user2, target_project_id: unrelated_project.id | |
135 | + response.status.should == 400 | |
136 | + end | |
137 | + | |
138 | + it "should return 201 when target_branch is specified and for the same project" do | |
139 | + post api("/projects/#{fork_project.id}/merge_requests", user2), | |
140 | + title: 'Test merge_request', target_branch: 'master', source_branch: 'stable', author: user2, target_project_id: fork_project.id | |
141 | + response.status.should == 201 | |
142 | + end | |
130 | 143 | end |
131 | 144 | end |
132 | 145 | ... | ... |