Commit 536373ad05b55c69442e7d7d6cb549791031cac2

Authored by Dmitriy Zaporozhets
1 parent 86bf684f

Dont allow mr compare with empty branches

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
app/views/projects/merge_requests/_new_compare.html.haml
... ... @@ -2,11 +2,12 @@
2 2 %hr
3 3  
4 4 = form_for [@project, @merge_request], url: new_project_merge_request_path(@project), method: :get, html: { class: "merge-request-form form-inline" } do |f|
  5 + .hide.alert.alert-danger.mr-compare-errors
5 6 .merge-request-branches.row
6 7 .col-md-6
7 8 .panel.panel-default
8 9 .panel-heading
9   - From
  10 + %strong Source branch
10 11 .panel-body
11 12 = f.select(:source_project_id, [[@merge_request.source_project_path,@merge_request.source_project.id]] , {}, { class: 'source_project select2 span3', disabled: @merge_request.persisted? })
12 13 &nbsp;
... ... @@ -17,7 +18,7 @@
17 18 .col-md-6
18 19 .panel.panel-default
19 20 .panel-heading
20   - To
  21 + %strong Target branch
21 22 .panel-body
22 23 - projects = @project.forked_from_project.nil? ? [@project] : [@project, @project.forked_from_project]
23 24 = f.select(:target_project_id, options_from_collection_for_select(projects, 'id', 'path_with_namespace', f.object.target_project_id), {}, { class: 'target_project select2 span3', disabled: @merge_request.persisted? })
... ... @@ -45,8 +46,9 @@
45 46 %span.label-branch #{@merge_request.target_branch}
46 47 are the same.
47 48  
  49 +
48 50 %hr
49   - = f.submit 'Compare branches', class: "btn btn-primary"
  51 + = f.submit 'Compare branches', class: "btn btn-primary mr-compare-btn"
50 52  
51 53 :javascript
52 54 var source_branch = $("#merge_request_source_branch")
... ... @@ -61,9 +63,22 @@
61 63 });
62 64 source_branch.on("change", function() {
63 65 $.get("#{branch_from_project_merge_requests_path(@source_project)}", {ref: $(this).val() });
  66 + $(".mr-compare-errors").fadeOut();
  67 + $(".mr-compare-btn").enable();
64 68 });
65 69 target_branch.on("change", function() {
66 70 $.get("#{branch_to_project_merge_requests_path(@source_project)}", {target_project_id: target_project.val(),ref: $(this).val() });
  71 + $(".mr-compare-errors").fadeOut();
  72 + $(".mr-compare-btn").enable();
67 73 });
68 74  
69 75  
  76 +:coffeescript
  77 +
  78 + $(".merge-request-form").on 'submit', ->
  79 + if $("#merge_request_source_branch").val() is "" or $('#merge_request_target_branch').val() is ""
  80 + $(".mr-compare-errors").html("You must select source and target branch to proceed")
  81 + $(".mr-compare-errors").fadeIn()
  82 + event.preventDefault()
  83 + return
  84 +
... ...
features/project/forked_merge_requests.feature
... ... @@ -30,11 +30,10 @@ Feature: Project Forked Merge Requests
30 30 Given I visit project "Forked Shop" merge requests page
31 31 And I click link "New Merge Request"
32 32 And I fill out an invalid "Merge Request On Forked Project" merge request
33   - And I submit the merge request
34 33 Then I should see validation errors
35 34  
36 35 @javascript
37 36 Scenario: Merge request should target fork repository by default
38 37 Given I visit project "Forked Shop" merge requests page
39 38 And I click link "New Merge Request"
40   - Then the target repository should be the original repository
41 39 \ No newline at end of file
  40 + Then the target repository should be the original repository
... ...
features/steps/project/forked_merge_requests.rb
... ... @@ -53,6 +53,7 @@ class ProjectForkedMergeRequests &lt; Spinach::FeatureSteps
53 53  
54 54 find(:select, "merge_request_source_branch", {}).value.should == 'master'
55 55 find(:select, "merge_request_target_branch", {}).value.should == 'stable'
  56 + click_button "Compare branches"
56 57  
57 58 fill_in "merge_request_title", with: "Merge Request On Forked Project"
58 59 end
... ... @@ -148,29 +149,19 @@ class ProjectForkedMergeRequests &lt; Spinach::FeatureSteps
148 149 current_path.should == edit_project_merge_request_path(@project, @merge_request)
149 150 page.should have_content "Edit merge request ##{@merge_request.id}"
150 151 find("#merge_request_title").value.should == "Merge Request On Forked Project"
151   - find("#merge_request_source_project_id").value.should == @forked_project.id.to_s
152   - find("#merge_request_target_project_id").value.should == @project.id.to_s
153   - find("#merge_request_source_branch").value.should have_content "master"
154   - verify_commit_link(".mr_source_commit",@forked_project)
155   - find("#merge_request_target_branch").value.should have_content "stable"
156   - verify_commit_link(".mr_target_commit",@project)
157 152 end
158 153  
159 154 step 'I fill out an invalid "Merge Request On Forked Project" merge request' do
160   - #If this isn't filled in the rest of the validations won't be triggered
161   - fill_in "merge_request_title", with: "Merge Request On Forked Project"
162   -
163 155 select "Select branch", from: "merge_request_target_branch"
164   -
165 156 find(:select, "merge_request_source_project_id", {}).value.should == @forked_project.id.to_s
166 157 find(:select, "merge_request_target_project_id", {}).value.should == project.id.to_s
167 158 find(:select, "merge_request_source_branch", {}).value.should == ""
168 159 find(:select, "merge_request_target_branch", {}).value.should == ""
  160 + click_button "Compare branches"
169 161 end
170 162  
171 163 step 'I should see validation errors' do
172   - page.should have_content "Source branch can't be blank"
173   - page.should have_content "Target branch can't be blank"
  164 + page.should have_content "You must select source and target branch"
174 165 end
175 166  
176 167 step 'the target repository should be the original repository' do
... ...