Commit 28e13634dc9318dbd093a4561ee8ea16e1d71460
Exists in
spb-stable
and in
3 other branches
Merge branch 'improve/mr_diff'
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> Conflicts: features/steps/project/project_fork.rb features/steps/project/project_forked_merge_requests.rb features/steps/project/project_issue_tracker.rb features/steps/project/project_markdown_render.rb features/steps/shared/project.rb
Showing
61 changed files
with
492 additions
and
386 deletions
Show diff stats
app/assets/stylesheets/sections/merge_requests.scss
| @@ -89,16 +89,3 @@ | @@ -89,16 +89,3 @@ | ||
| 89 | .merge-request-form-info { | 89 | .merge-request-form-info { |
| 90 | padding-top: 15px; | 90 | padding-top: 15px; |
| 91 | } | 91 | } |
| 92 | - | ||
| 93 | -.merge-request-branches { | ||
| 94 | - .commit-row-message { | ||
| 95 | - font-weight: normal !important; | ||
| 96 | - } | ||
| 97 | - | ||
| 98 | - .select2-container .select2-single { | ||
| 99 | - span { | ||
| 100 | - font-weight: bold; | ||
| 101 | - color: #555; | ||
| 102 | - } | ||
| 103 | - } | ||
| 104 | -} |
app/controllers/projects/merge_requests_controller.rb
| @@ -76,7 +76,6 @@ class Projects::MergeRequestsController < Projects::ApplicationController | @@ -76,7 +76,6 @@ class Projects::MergeRequestsController < Projects::ApplicationController | ||
| 76 | @merge_request.author = current_user | 76 | @merge_request.author = current_user |
| 77 | @target_branches ||= [] | 77 | @target_branches ||= [] |
| 78 | if @merge_request.save | 78 | if @merge_request.save |
| 79 | - @merge_request.reload_code | ||
| 80 | redirect_to [@merge_request.target_project, @merge_request], notice: 'Merge request was successfully created.' | 79 | redirect_to [@merge_request.target_project, @merge_request], notice: 'Merge request was successfully created.' |
| 81 | else | 80 | else |
| 82 | @source_project = @merge_request.source_project | 81 | @source_project = @merge_request.source_project |
| @@ -217,6 +216,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController | @@ -217,6 +216,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController | ||
| 217 | # or from cache if already merged | 216 | # or from cache if already merged |
| 218 | @commits = @merge_request.commits | 217 | @commits = @merge_request.commits |
| 219 | 218 | ||
| 219 | + @merge_request_diff = @merge_request.merge_request_diff | ||
| 220 | @allowed_to_merge = allowed_to_merge? | 220 | @allowed_to_merge = allowed_to_merge? |
| 221 | @show_merge_controls = @merge_request.opened? && @commits.any? && @allowed_to_merge | 221 | @show_merge_controls = @merge_request.opened? && @commits.any? && @allowed_to_merge |
| 222 | end | 222 | end |
app/models/merge_request.rb
| @@ -31,6 +31,11 @@ class MergeRequest < ActiveRecord::Base | @@ -31,6 +31,11 @@ class MergeRequest < ActiveRecord::Base | ||
| 31 | belongs_to :target_project, foreign_key: :target_project_id, class_name: "Project" | 31 | belongs_to :target_project, foreign_key: :target_project_id, class_name: "Project" |
| 32 | belongs_to :source_project, foreign_key: :source_project_id, class_name: "Project" | 32 | belongs_to :source_project, foreign_key: :source_project_id, class_name: "Project" |
| 33 | 33 | ||
| 34 | + has_one :merge_request_diff, dependent: :destroy | ||
| 35 | + after_create :create_merge_request_diff | ||
| 36 | + | ||
| 37 | + delegate :commits, :diffs, :last_commit, :last_commit_short_sha, to: :merge_request_diff, prefix: nil | ||
| 38 | + | ||
| 34 | attr_accessible :title, :assignee_id, :source_project_id, :source_branch, :target_project_id, :target_branch, :milestone_id, :author_id_of_changes, :state_event, :description | 39 | attr_accessible :title, :assignee_id, :source_project_id, :source_branch, :target_project_id, :target_branch, :milestone_id, :author_id_of_changes, :state_event, :description |
| 35 | 40 | ||
| 36 | attr_accessor :should_remove_source_branch | 41 | attr_accessor :should_remove_source_branch |
| @@ -53,11 +58,8 @@ class MergeRequest < ActiveRecord::Base | @@ -53,11 +58,8 @@ class MergeRequest < ActiveRecord::Base | ||
| 53 | end | 58 | end |
| 54 | 59 | ||
| 55 | state :opened | 60 | state :opened |
| 56 | - | ||
| 57 | state :reopened | 61 | state :reopened |
| 58 | - | ||
| 59 | state :closed | 62 | state :closed |
| 60 | - | ||
| 61 | state :merged | 63 | state :merged |
| 62 | end | 64 | end |
| 63 | 65 | ||
| @@ -75,15 +77,10 @@ class MergeRequest < ActiveRecord::Base | @@ -75,15 +77,10 @@ class MergeRequest < ActiveRecord::Base | ||
| 75 | end | 77 | end |
| 76 | 78 | ||
| 77 | state :unchecked | 79 | state :unchecked |
| 78 | - | ||
| 79 | state :can_be_merged | 80 | state :can_be_merged |
| 80 | - | ||
| 81 | state :cannot_be_merged | 81 | state :cannot_be_merged |
| 82 | end | 82 | end |
| 83 | 83 | ||
| 84 | - serialize :st_commits | ||
| 85 | - serialize :st_diffs | ||
| 86 | - | ||
| 87 | validates :source_project, presence: true, unless: :allow_broken | 84 | validates :source_project, presence: true, unless: :allow_broken |
| 88 | validates :source_branch, presence: true | 85 | validates :source_branch, presence: true |
| 89 | validates :target_project, presence: true | 86 | validates :target_project, presence: true |
| @@ -105,7 +102,7 @@ class MergeRequest < ActiveRecord::Base | @@ -105,7 +102,7 @@ class MergeRequest < ActiveRecord::Base | ||
| 105 | scope :closed, -> { with_states(:closed, :merged) } | 102 | scope :closed, -> { with_states(:closed, :merged) } |
| 106 | 103 | ||
| 107 | def validate_branches | 104 | def validate_branches |
| 108 | - if target_project==source_project && target_branch == source_branch | 105 | + if target_project == source_project && target_branch == source_branch |
| 109 | errors.add :branch_conflict, "You can not use same project/branch for source and target" | 106 | errors.add :branch_conflict, "You can not use same project/branch for source and target" |
| 110 | end | 107 | end |
| 111 | 108 | ||
| @@ -120,8 +117,7 @@ class MergeRequest < ActiveRecord::Base | @@ -120,8 +117,7 @@ class MergeRequest < ActiveRecord::Base | ||
| 120 | end | 117 | end |
| 121 | 118 | ||
| 122 | def reload_code | 119 | def reload_code |
| 123 | - self.reloaded_commits | ||
| 124 | - self.reloaded_diffs | 120 | + merge_request_diff.reload_content if opened? |
| 125 | end | 121 | end |
| 126 | 122 | ||
| 127 | def check_if_can_be_merged | 123 | def check_if_can_be_merged |
| @@ -132,42 +128,6 @@ class MergeRequest < ActiveRecord::Base | @@ -132,42 +128,6 @@ class MergeRequest < ActiveRecord::Base | ||
| 132 | end | 128 | end |
| 133 | end | 129 | end |
| 134 | 130 | ||
| 135 | - def diffs | ||
| 136 | - @diffs ||= (load_diffs(st_diffs) || []) | ||
| 137 | - end | ||
| 138 | - | ||
| 139 | - def reloaded_diffs | ||
| 140 | - if opened? && unmerged_diffs.any? | ||
| 141 | - self.st_diffs = dump_diffs(unmerged_diffs) | ||
| 142 | - self.save | ||
| 143 | - end | ||
| 144 | - end | ||
| 145 | - | ||
| 146 | - def broken_diffs? | ||
| 147 | - diffs == broken_diffs | ||
| 148 | - rescue | ||
| 149 | - true | ||
| 150 | - end | ||
| 151 | - | ||
| 152 | - def valid_diffs? | ||
| 153 | - !broken_diffs? | ||
| 154 | - end | ||
| 155 | - | ||
| 156 | - def unmerged_diffs | ||
| 157 | - diffs = if for_fork? | ||
| 158 | - Gitlab::Satellite::MergeAction.new(author, self).diffs_between_satellite | ||
| 159 | - else | ||
| 160 | - Gitlab::Git::Diff.between(target_project.repository, source_branch, target_branch) | ||
| 161 | - end | ||
| 162 | - | ||
| 163 | - diffs ||= [] | ||
| 164 | - diffs | ||
| 165 | - end | ||
| 166 | - | ||
| 167 | - def last_commit | ||
| 168 | - commits.first | ||
| 169 | - end | ||
| 170 | - | ||
| 171 | def merge_event | 131 | def merge_event |
| 172 | self.target_project.events.where(target_id: self.id, target_type: "MergeRequest", action: Event::MERGED).last | 132 | self.target_project.events.where(target_id: self.id, target_type: "MergeRequest", action: Event::MERGED).last |
| 173 | end | 133 | end |
| @@ -176,46 +136,13 @@ class MergeRequest < ActiveRecord::Base | @@ -176,46 +136,13 @@ class MergeRequest < ActiveRecord::Base | ||
| 176 | self.target_project.events.where(target_id: self.id, target_type: "MergeRequest", action: Event::CLOSED).last | 136 | self.target_project.events.where(target_id: self.id, target_type: "MergeRequest", action: Event::CLOSED).last |
| 177 | end | 137 | end |
| 178 | 138 | ||
| 179 | - def commits | ||
| 180 | - load_commits(st_commits || []) | ||
| 181 | - end | ||
| 182 | - | ||
| 183 | - def probably_merged? | ||
| 184 | - unmerged_commits.empty? && | ||
| 185 | - commits.any? && opened? | ||
| 186 | - end | ||
| 187 | - | ||
| 188 | - def reloaded_commits | ||
| 189 | - if opened? && unmerged_commits.any? | ||
| 190 | - self.st_commits = dump_commits(unmerged_commits) | ||
| 191 | - save | ||
| 192 | - | ||
| 193 | - end | ||
| 194 | - commits | ||
| 195 | - end | ||
| 196 | - | ||
| 197 | - def unmerged_commits | ||
| 198 | - if for_fork? | ||
| 199 | - commits = Gitlab::Satellite::MergeAction.new(self.author, self).commits_between | ||
| 200 | - else | ||
| 201 | - commits = target_project.repository.commits_between(self.target_branch, self.source_branch) | ||
| 202 | - end | ||
| 203 | - | ||
| 204 | - if commits.present? | ||
| 205 | - commits = Commit.decorate(commits). | ||
| 206 | - sort_by(&:created_at). | ||
| 207 | - reverse | ||
| 208 | - end | ||
| 209 | - commits | ||
| 210 | - end | ||
| 211 | - | ||
| 212 | def merge!(user_id) | 139 | def merge!(user_id) |
| 213 | self.author_id_of_changes = user_id | 140 | self.author_id_of_changes = user_id |
| 214 | self.merge | 141 | self.merge |
| 215 | end | 142 | end |
| 216 | 143 | ||
| 217 | def automerge!(current_user, commit_message = nil) | 144 | def automerge!(current_user, commit_message = nil) |
| 218 | - if Gitlab::Satellite::MergeAction.new(current_user, self).merge!(commit_message) && self.unmerged_commits.empty? | 145 | + if Gitlab::Satellite::MergeAction.new(current_user, self).merge!(commit_message) |
| 219 | self.merge!(current_user.id) | 146 | self.merge!(current_user.id) |
| 220 | true | 147 | true |
| 221 | end | 148 | end |
| @@ -225,7 +152,10 @@ class MergeRequest < ActiveRecord::Base | @@ -225,7 +152,10 @@ class MergeRequest < ActiveRecord::Base | ||
| 225 | end | 152 | end |
| 226 | 153 | ||
| 227 | def mr_and_commit_notes | 154 | def mr_and_commit_notes |
| 228 | - commit_ids = commits.map(&:id) | 155 | + # Fetch comments only from last 100 commits |
| 156 | + commits_for_notes_limit = 100 | ||
| 157 | + commit_ids = commits.last(commits_for_notes_limit).map(&:id) | ||
| 158 | + | ||
| 229 | project.notes.where( | 159 | project.notes.where( |
| 230 | "(noteable_type = 'MergeRequest' AND noteable_id = :mr_id) OR (noteable_type = 'Commit' AND commit_id IN (:commit_ids))", | 160 | "(noteable_type = 'MergeRequest' AND noteable_id = :mr_id) OR (noteable_type = 'Commit' AND commit_id IN (:commit_ids))", |
| 231 | mr_id: id, | 161 | mr_id: id, |
| @@ -247,10 +177,6 @@ class MergeRequest < ActiveRecord::Base | @@ -247,10 +177,6 @@ class MergeRequest < ActiveRecord::Base | ||
| 247 | Gitlab::Satellite::MergeAction.new(current_user, self).format_patch | 177 | Gitlab::Satellite::MergeAction.new(current_user, self).format_patch |
| 248 | end | 178 | end |
| 249 | 179 | ||
| 250 | - def last_commit_short_sha | ||
| 251 | - @last_commit_short_sha ||= last_commit.sha[0..10] | ||
| 252 | - end | ||
| 253 | - | ||
| 254 | def for_fork? | 180 | def for_fork? |
| 255 | target_project != source_project | 181 | target_project != source_project |
| 256 | end | 182 | end |
| @@ -327,34 +253,4 @@ class MergeRequest < ActiveRecord::Base | @@ -327,34 +253,4 @@ class MergeRequest < ActiveRecord::Base | ||
| 327 | message << description.to_s | 253 | message << description.to_s |
| 328 | message | 254 | message |
| 329 | end | 255 | end |
| 330 | - | ||
| 331 | - private | ||
| 332 | - | ||
| 333 | - def dump_commits(commits) | ||
| 334 | - commits.map(&:to_hash) | ||
| 335 | - end | ||
| 336 | - | ||
| 337 | - def load_commits(array) | ||
| 338 | - array.map { |hash| Commit.new(Gitlab::Git::Commit.new(hash)) } | ||
| 339 | - end | ||
| 340 | - | ||
| 341 | - def dump_diffs(diffs) | ||
| 342 | - if diffs == broken_diffs | ||
| 343 | - broken_diffs | ||
| 344 | - elsif diffs.respond_to?(:map) | ||
| 345 | - diffs.map(&:to_hash) | ||
| 346 | - end | ||
| 347 | - end | ||
| 348 | - | ||
| 349 | - def load_diffs(raw) | ||
| 350 | - if raw == broken_diffs | ||
| 351 | - broken_diffs | ||
| 352 | - elsif raw.respond_to?(:map) | ||
| 353 | - raw.map { |hash| Gitlab::Git::Diff.new(hash) } | ||
| 354 | - end | ||
| 355 | - end | ||
| 356 | - | ||
| 357 | - def broken_diffs | ||
| 358 | - [Gitlab::Git::Diff::BROKEN_DIFF] | ||
| 359 | - end | ||
| 360 | end | 256 | end |
| @@ -0,0 +1,163 @@ | @@ -0,0 +1,163 @@ | ||
| 1 | +require Rails.root.join("app/models/commit") | ||
| 2 | + | ||
| 3 | +class MergeRequestDiff < ActiveRecord::Base | ||
| 4 | + # Prevent store of diff | ||
| 5 | + # if commits amount more then 200 | ||
| 6 | + COMMITS_SAFE_SIZE = 200 | ||
| 7 | + | ||
| 8 | + attr_reader :commits, :diffs | ||
| 9 | + | ||
| 10 | + belongs_to :merge_request | ||
| 11 | + | ||
| 12 | + attr_accessible :state, :st_commits, :st_diffs | ||
| 13 | + | ||
| 14 | + delegate :target_branch, :source_branch, to: :merge_request, prefix: nil | ||
| 15 | + | ||
| 16 | + state_machine :state, initial: :empty do | ||
| 17 | + state :collected | ||
| 18 | + state :timeout | ||
| 19 | + state :overflow_commits_safe_size | ||
| 20 | + state :overflow_diff_files_limit | ||
| 21 | + state :overflow_diff_lines_limit | ||
| 22 | + end | ||
| 23 | + | ||
| 24 | + serialize :st_commits | ||
| 25 | + serialize :st_diffs | ||
| 26 | + | ||
| 27 | + after_create :reload_content | ||
| 28 | + | ||
| 29 | + def reload_content | ||
| 30 | + reload_commits | ||
| 31 | + reload_diffs | ||
| 32 | + end | ||
| 33 | + | ||
| 34 | + def diffs | ||
| 35 | + @diffs ||= (load_diffs(st_diffs) || []) | ||
| 36 | + end | ||
| 37 | + | ||
| 38 | + def commits | ||
| 39 | + @commits ||= load_commits(st_commits || []) | ||
| 40 | + end | ||
| 41 | + | ||
| 42 | + def last_commit | ||
| 43 | + commits.first | ||
| 44 | + end | ||
| 45 | + | ||
| 46 | + def last_commit_short_sha | ||
| 47 | + @last_commit_short_sha ||= last_commit.sha[0..10] | ||
| 48 | + end | ||
| 49 | + | ||
| 50 | + private | ||
| 51 | + | ||
| 52 | + def dump_commits(commits) | ||
| 53 | + commits.map(&:to_hash) | ||
| 54 | + end | ||
| 55 | + | ||
| 56 | + def load_commits(array) | ||
| 57 | + array.map { |hash| Commit.new(Gitlab::Git::Commit.new(hash)) } | ||
| 58 | + end | ||
| 59 | + | ||
| 60 | + def dump_diffs(diffs) | ||
| 61 | + if diffs.respond_to?(:map) | ||
| 62 | + diffs.map(&:to_hash) | ||
| 63 | + end | ||
| 64 | + end | ||
| 65 | + | ||
| 66 | + def load_diffs(raw) | ||
| 67 | + if raw.respond_to?(:map) | ||
| 68 | + raw.map { |hash| Gitlab::Git::Diff.new(hash) } | ||
| 69 | + end | ||
| 70 | + end | ||
| 71 | + | ||
| 72 | + # When Git::Diff is not able to get diff | ||
| 73 | + # because of git timeout it return this value | ||
| 74 | + def broken_diffs | ||
| 75 | + [Gitlab::Git::Diff::BROKEN_DIFF] | ||
| 76 | + end | ||
| 77 | + | ||
| 78 | + # Collect array of Git::Commit objects | ||
| 79 | + # between target and source branches | ||
| 80 | + def unmerged_commits | ||
| 81 | + commits = if merge_request.for_fork? | ||
| 82 | + Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request).commits_between | ||
| 83 | + else | ||
| 84 | + repository.commits_between(target_branch, source_branch) | ||
| 85 | + end | ||
| 86 | + | ||
| 87 | + if commits.present? | ||
| 88 | + commits = Commit.decorate(commits). | ||
| 89 | + sort_by(&:created_at). | ||
| 90 | + reverse | ||
| 91 | + end | ||
| 92 | + | ||
| 93 | + commits | ||
| 94 | + end | ||
| 95 | + | ||
| 96 | + # Reload all commits related to current merge request from repo | ||
| 97 | + # and save it as array of hashes in st_commits db field | ||
| 98 | + def reload_commits | ||
| 99 | + commit_objects = unmerged_commits | ||
| 100 | + | ||
| 101 | + if commit_objects.present? | ||
| 102 | + self.st_commits = dump_commits(commit_objects) | ||
| 103 | + end | ||
| 104 | + | ||
| 105 | + save | ||
| 106 | + end | ||
| 107 | + | ||
| 108 | + # Reload diffs between branches related to current merge request from repo | ||
| 109 | + # and save it as array of hashes in st_diffs db field | ||
| 110 | + def reload_diffs | ||
| 111 | + new_diffs = [] | ||
| 112 | + | ||
| 113 | + if commits.size.zero? | ||
| 114 | + self.state = :empty | ||
| 115 | + elsif commits.size > COMMITS_SAFE_SIZE | ||
| 116 | + self.state = :overflow_commits_safe_size | ||
| 117 | + else | ||
| 118 | + new_diffs = unmerged_diffs | ||
| 119 | + end | ||
| 120 | + | ||
| 121 | + if new_diffs.any? | ||
| 122 | + if new_diffs.size > Commit::DIFF_HARD_LIMIT_FILES | ||
| 123 | + self.state = :overflow_diff_files_limit | ||
| 124 | + new_diffs = [] | ||
| 125 | + end | ||
| 126 | + | ||
| 127 | + if new_diffs.sum { |diff| diff.diff.lines.count } > Commit::DIFF_HARD_LIMIT_LINES | ||
| 128 | + self.state = :overflow_diff_lines_limit | ||
| 129 | + new_diffs = [] | ||
| 130 | + end | ||
| 131 | + end | ||
| 132 | + | ||
| 133 | + if new_diffs.present? | ||
| 134 | + new_diffs = dump_commits(new_diffs) | ||
| 135 | + self.state = :collected | ||
| 136 | + end | ||
| 137 | + | ||
| 138 | + self.st_diffs = new_diffs | ||
| 139 | + self.save | ||
| 140 | + end | ||
| 141 | + | ||
| 142 | + # Collect array of Git::Diff objects | ||
| 143 | + # between target and source branches | ||
| 144 | + def unmerged_diffs | ||
| 145 | + diffs = if merge_request.for_fork? | ||
| 146 | + Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request).diffs_between_satellite | ||
| 147 | + else | ||
| 148 | + Gitlab::Git::Diff.between(repository, source_branch, target_branch) | ||
| 149 | + end | ||
| 150 | + | ||
| 151 | + if diffs == broken_diffs | ||
| 152 | + self.state = :timeout | ||
| 153 | + diffs = [] | ||
| 154 | + end | ||
| 155 | + | ||
| 156 | + diffs ||= [] | ||
| 157 | + diffs | ||
| 158 | + end | ||
| 159 | + | ||
| 160 | + def repository | ||
| 161 | + merge_request.target_project.repository | ||
| 162 | + end | ||
| 163 | +end |
app/views/projects/commits/_inline_commit.html.haml
| @@ -2,5 +2,7 @@ | @@ -2,5 +2,7 @@ | ||
| 2 | .commit-row-title | 2 | .commit-row-title |
| 3 | = link_to commit.short_id(8), project_commit_path(project, commit), class: "commit_short_id" | 3 | = link_to commit.short_id(8), project_commit_path(project, commit), class: "commit_short_id" |
| 4 | | 4 | |
| 5 | - = link_to_gfm truncate(commit.title, length: 40), project_commit_path(project, commit.id), class: "commit-row-message" | ||
| 6 | - #{time_ago_with_tooltip(commit.committed_date)} | 5 | + %span.str-truncated |
| 6 | + = link_to_gfm commit.title, project_commit_path(project, commit.id), class: "commit-row-message" | ||
| 7 | + .pull-right | ||
| 8 | + #{time_ago_with_tooltip(commit.committed_date)} |
app/views/projects/merge_requests/show/_commits.html.haml
| @@ -12,9 +12,16 @@ | @@ -12,9 +12,16 @@ | ||
| 12 | 8 of #{@commits.count} commits displayed. | 12 | 8 of #{@commits.count} commits displayed. |
| 13 | %strong | 13 | %strong |
| 14 | %a.show-all-commits Click here to show all | 14 | %a.show-all-commits Click here to show all |
| 15 | - %ul.all-commits.hide.well-list | ||
| 16 | - - @commits.each do |commit| | ||
| 17 | - = render "projects/commits/commit", commit: commit, project: @merge_request.source_project | 15 | + - if @commits.size > MergeRequestDiff::COMMITS_SAFE_SIZE |
| 16 | + %ul.all-commits.hide.well-list | ||
| 17 | + - @commits.first(MergeRequestDiff::COMMITS_SAFE_SIZE).each do |commit| | ||
| 18 | + = render "projects/commits/inline_commit", commit: commit, project: @merge_request.source_project | ||
| 19 | + %li | ||
| 20 | + other #{@commits.size - MergeRequestDiff::COMMITS_SAFE_SIZE} commits hidden top prevent performance issues. | ||
| 21 | + - else | ||
| 22 | + %ul.all-commits.hide.well-list | ||
| 23 | + - @commits.each do |commit| | ||
| 24 | + = render "projects/commits/inline_commit", commit: commit, project: @merge_request.source_project | ||
| 18 | 25 | ||
| 19 | - else | 26 | - else |
| 20 | %ul.well-list | 27 | %ul.well-list |
app/views/projects/merge_requests/show/_diffs.html.haml
| 1 | -- if @merge_request.valid_diffs? | 1 | +- if @merge_request_diff.collected? |
| 2 | = render "projects/commits/diffs", diffs: @merge_request.diffs, project: @merge_request.source_project | 2 | = render "projects/commits/diffs", diffs: @merge_request.diffs, project: @merge_request.source_project |
| 3 | -- elsif @merge_request.broken_diffs? | 3 | +- elsif @merge_request_diff.empty? |
| 4 | + %h4.nothing_here_message Nothing to merge from #{@merge_request.source_branch} into #{@merge_request.target_branch} | ||
| 5 | +- else | ||
| 4 | %h4.nothing_here_message | 6 | %h4.nothing_here_message |
| 5 | Can't load diff. | 7 | Can't load diff. |
| 6 | You can | 8 | You can |
| 7 | = link_to "download it", project_merge_request_path(@merge_request.source_project, @merge_request), format: :diff, class: "vlink" | 9 | = link_to "download it", project_merge_request_path(@merge_request.source_project, @merge_request), format: :diff, class: "vlink" |
| 8 | instead. | 10 | instead. |
| 9 | -- else | ||
| 10 | - %h4.nothing_here_message Nothing to merge |
| @@ -0,0 +1,12 @@ | @@ -0,0 +1,12 @@ | ||
| 1 | +class CreateMergeRequestDiffs < ActiveRecord::Migration | ||
| 2 | + def change | ||
| 3 | + create_table :merge_request_diffs do |t| | ||
| 4 | + t.string :state, null: false, default: 'collected' | ||
| 5 | + t.text :st_commits, null: true, limit: 2147483647 | ||
| 6 | + t.text :st_diffs, null: true, limit: 2147483647 | ||
| 7 | + t.integer :merge_request_id, null: false | ||
| 8 | + | ||
| 9 | + t.timestamps | ||
| 10 | + end | ||
| 11 | + end | ||
| 12 | +end |
| @@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
| 1 | +class MigrateMrDiffs < ActiveRecord::Migration | ||
| 2 | + def self.up | ||
| 3 | + execute "INSERT INTO merge_request_diffs ( merge_request_id ) SELECT id FROM merge_requests" | ||
| 4 | + execute "UPDATE merge_requests mr, merge_request_diffs md SET md.st_commits = mr.st_commits WHERE md.merge_request_id = mr.id" | ||
| 5 | + execute "UPDATE merge_requests mr, merge_request_diffs md SET md.st_diffs = mr.st_diffs WHERE md.merge_request_id = mr.id" | ||
| 6 | + end | ||
| 7 | + | ||
| 8 | + def self.down | ||
| 9 | + MergeRequestDiff.delete_all | ||
| 10 | + end | ||
| 11 | +end |
| @@ -0,0 +1,13 @@ | @@ -0,0 +1,13 @@ | ||
| 1 | +class RemoveMRdiffFields < ActiveRecord::Migration | ||
| 2 | + def up | ||
| 3 | + remove_column :merge_requests, :st_commits | ||
| 4 | + remove_column :merge_requests, :st_diffs | ||
| 5 | + end | ||
| 6 | + | ||
| 7 | + def down | ||
| 8 | + add_column :merge_requests, :st_commits, :text, null: true, limit: 2147483647 | ||
| 9 | + add_column :merge_requests, :st_diffs, :text, null: true, limit: 2147483647 | ||
| 10 | + execute "UPDATE merge_requests mr, merge_request_diffs md SET mr.st_commits = md.st_commits WHERE md.merge_request_id = mr.id" | ||
| 11 | + execute "UPDATE merge_requests mr, merge_request_diffs md SET mr.st_diffs = md.st_diffs WHERE md.merge_request_id = mr.id" | ||
| 12 | + end | ||
| 13 | +end |
db/schema.rb
| @@ -11,7 +11,7 @@ | @@ -11,7 +11,7 @@ | ||
| 11 | # | 11 | # |
| 12 | # It's strongly recommended that you check this file into your version control system. | 12 | # It's strongly recommended that you check this file into your version control system. |
| 13 | 13 | ||
| 14 | -ActiveRecord::Schema.define(version: 20140116231608) do | 14 | +ActiveRecord::Schema.define(version: 20140122122549) do |
| 15 | 15 | ||
| 16 | create_table "broadcast_messages", force: true do |t| | 16 | create_table "broadcast_messages", force: true do |t| |
| 17 | t.text "message", null: false | 17 | t.text "message", null: false |
| @@ -66,8 +66,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | @@ -66,8 +66,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | ||
| 66 | t.integer "assignee_id" | 66 | t.integer "assignee_id" |
| 67 | t.integer "author_id" | 67 | t.integer "author_id" |
| 68 | t.integer "project_id" | 68 | t.integer "project_id" |
| 69 | - t.datetime "created_at", null: false | ||
| 70 | - t.datetime "updated_at", null: false | 69 | + t.datetime "created_at" |
| 70 | + t.datetime "updated_at" | ||
| 71 | t.integer "position", default: 0 | 71 | t.integer "position", default: 0 |
| 72 | t.string "branch_name" | 72 | t.string "branch_name" |
| 73 | t.text "description" | 73 | t.text "description" |
| @@ -85,8 +85,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | @@ -85,8 +85,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | ||
| 85 | 85 | ||
| 86 | create_table "keys", force: true do |t| | 86 | create_table "keys", force: true do |t| |
| 87 | t.integer "user_id" | 87 | t.integer "user_id" |
| 88 | - t.datetime "created_at", null: false | ||
| 89 | - t.datetime "updated_at", null: false | 88 | + t.datetime "created_at" |
| 89 | + t.datetime "updated_at" | ||
| 90 | t.text "key" | 90 | t.text "key" |
| 91 | t.string "title" | 91 | t.string "title" |
| 92 | t.string "type" | 92 | t.string "type" |
| @@ -95,21 +95,28 @@ ActiveRecord::Schema.define(version: 20140116231608) do | @@ -95,21 +95,28 @@ ActiveRecord::Schema.define(version: 20140116231608) do | ||
| 95 | 95 | ||
| 96 | add_index "keys", ["user_id"], name: "index_keys_on_user_id", using: :btree | 96 | add_index "keys", ["user_id"], name: "index_keys_on_user_id", using: :btree |
| 97 | 97 | ||
| 98 | + create_table "merge_request_diffs", force: true do |t| | ||
| 99 | + t.string "state", default: "collected", null: false | ||
| 100 | + t.text "st_commits", limit: 2147483647 | ||
| 101 | + t.text "st_diffs", limit: 2147483647 | ||
| 102 | + t.integer "merge_request_id", null: false | ||
| 103 | + t.datetime "created_at" | ||
| 104 | + t.datetime "updated_at" | ||
| 105 | + end | ||
| 106 | + | ||
| 98 | create_table "merge_requests", force: true do |t| | 107 | create_table "merge_requests", force: true do |t| |
| 99 | - t.string "target_branch", null: false | ||
| 100 | - t.string "source_branch", null: false | ||
| 101 | - t.integer "source_project_id", null: false | 108 | + t.string "target_branch", null: false |
| 109 | + t.string "source_branch", null: false | ||
| 110 | + t.integer "source_project_id", null: false | ||
| 102 | t.integer "author_id" | 111 | t.integer "author_id" |
| 103 | t.integer "assignee_id" | 112 | t.integer "assignee_id" |
| 104 | t.string "title" | 113 | t.string "title" |
| 105 | - t.datetime "created_at", null: false | ||
| 106 | - t.datetime "updated_at", null: false | ||
| 107 | - t.text "st_commits", limit: 2147483647 | ||
| 108 | - t.text "st_diffs", limit: 2147483647 | 114 | + t.datetime "created_at" |
| 115 | + t.datetime "updated_at" | ||
| 109 | t.integer "milestone_id" | 116 | t.integer "milestone_id" |
| 110 | t.string "state" | 117 | t.string "state" |
| 111 | t.string "merge_status" | 118 | t.string "merge_status" |
| 112 | - t.integer "target_project_id", null: false | 119 | + t.integer "target_project_id", null: false |
| 113 | t.integer "iid" | 120 | t.integer "iid" |
| 114 | t.text "description" | 121 | t.text "description" |
| 115 | end | 122 | end |
| @@ -156,8 +163,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | @@ -156,8 +163,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | ||
| 156 | t.text "note" | 163 | t.text "note" |
| 157 | t.string "noteable_type" | 164 | t.string "noteable_type" |
| 158 | t.integer "author_id" | 165 | t.integer "author_id" |
| 159 | - t.datetime "created_at", null: false | ||
| 160 | - t.datetime "updated_at", null: false | 166 | + t.datetime "created_at" |
| 167 | + t.datetime "updated_at" | ||
| 161 | t.integer "project_id" | 168 | t.integer "project_id" |
| 162 | t.string "attachment" | 169 | t.string "attachment" |
| 163 | t.string "line_code" | 170 | t.string "line_code" |
| @@ -179,8 +186,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | @@ -179,8 +186,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | ||
| 179 | t.string "name" | 186 | t.string "name" |
| 180 | t.string "path" | 187 | t.string "path" |
| 181 | t.text "description" | 188 | t.text "description" |
| 182 | - t.datetime "created_at", null: false | ||
| 183 | - t.datetime "updated_at", null: false | 189 | + t.datetime "created_at" |
| 190 | + t.datetime "updated_at" | ||
| 184 | t.integer "creator_id" | 191 | t.integer "creator_id" |
| 185 | t.boolean "issues_enabled", default: true, null: false | 192 | t.boolean "issues_enabled", default: true, null: false |
| 186 | t.boolean "wall_enabled", default: true, null: false | 193 | t.boolean "wall_enabled", default: true, null: false |
| @@ -231,8 +238,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | @@ -231,8 +238,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | ||
| 231 | t.text "content", limit: 2147483647 | 238 | t.text "content", limit: 2147483647 |
| 232 | t.integer "author_id", null: false | 239 | t.integer "author_id", null: false |
| 233 | t.integer "project_id" | 240 | t.integer "project_id" |
| 234 | - t.datetime "created_at", null: false | ||
| 235 | - t.datetime "updated_at", null: false | 241 | + t.datetime "created_at" |
| 242 | + t.datetime "updated_at" | ||
| 236 | t.string "file_name" | 243 | t.string "file_name" |
| 237 | t.datetime "expires_at" | 244 | t.datetime "expires_at" |
| 238 | t.boolean "private", default: true, null: false | 245 | t.boolean "private", default: true, null: false |
| @@ -254,45 +261,42 @@ ActiveRecord::Schema.define(version: 20140116231608) do | @@ -254,45 +261,42 @@ ActiveRecord::Schema.define(version: 20140116231608) do | ||
| 254 | t.datetime "created_at" | 261 | t.datetime "created_at" |
| 255 | end | 262 | end |
| 256 | 263 | ||
| 257 | - add_index "taggings", ["tag_id"], name: "index_taggings_on_tag_id", using: :btree | ||
| 258 | - add_index "taggings", ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context", using: :btree | ||
| 259 | - | ||
| 260 | create_table "tags", force: true do |t| | 264 | create_table "tags", force: true do |t| |
| 261 | t.string "name" | 265 | t.string "name" |
| 262 | end | 266 | end |
| 263 | 267 | ||
| 264 | create_table "users", force: true do |t| | 268 | create_table "users", force: true do |t| |
| 265 | - t.string "email", default: "", null: false | ||
| 266 | - t.string "encrypted_password", default: "", null: false | 269 | + t.string "email", default: "", null: false |
| 270 | + t.string "encrypted_password", limit: 128, default: "", null: false | ||
| 267 | t.string "reset_password_token" | 271 | t.string "reset_password_token" |
| 268 | t.datetime "reset_password_sent_at" | 272 | t.datetime "reset_password_sent_at" |
| 269 | t.datetime "remember_created_at" | 273 | t.datetime "remember_created_at" |
| 270 | - t.integer "sign_in_count", default: 0 | 274 | + t.integer "sign_in_count", default: 0 |
| 271 | t.datetime "current_sign_in_at" | 275 | t.datetime "current_sign_in_at" |
| 272 | t.datetime "last_sign_in_at" | 276 | t.datetime "last_sign_in_at" |
| 273 | t.string "current_sign_in_ip" | 277 | t.string "current_sign_in_ip" |
| 274 | t.string "last_sign_in_ip" | 278 | t.string "last_sign_in_ip" |
| 275 | - t.datetime "created_at", null: false | ||
| 276 | - t.datetime "updated_at", null: false | 279 | + t.datetime "created_at" |
| 280 | + t.datetime "updated_at" | ||
| 277 | t.string "name" | 281 | t.string "name" |
| 278 | - t.boolean "admin", default: false, null: false | ||
| 279 | - t.integer "projects_limit", default: 10 | ||
| 280 | - t.string "skype", default: "", null: false | ||
| 281 | - t.string "linkedin", default: "", null: false | ||
| 282 | - t.string "twitter", default: "", null: false | 282 | + t.boolean "admin", default: false, null: false |
| 283 | + t.integer "projects_limit", default: 10 | ||
| 284 | + t.string "skype", default: "", null: false | ||
| 285 | + t.string "linkedin", default: "", null: false | ||
| 286 | + t.string "twitter", default: "", null: false | ||
| 283 | t.string "authentication_token" | 287 | t.string "authentication_token" |
| 284 | - t.integer "theme_id", default: 1, null: false | 288 | + t.integer "theme_id", default: 1, null: false |
| 285 | t.string "bio" | 289 | t.string "bio" |
| 286 | - t.integer "failed_attempts", default: 0 | 290 | + t.integer "failed_attempts", default: 0 |
| 287 | t.datetime "locked_at" | 291 | t.datetime "locked_at" |
| 288 | t.string "extern_uid" | 292 | t.string "extern_uid" |
| 289 | t.string "provider" | 293 | t.string "provider" |
| 290 | t.string "username" | 294 | t.string "username" |
| 291 | - t.boolean "can_create_group", default: true, null: false | ||
| 292 | - t.boolean "can_create_team", default: true, null: false | 295 | + t.boolean "can_create_group", default: true, null: false |
| 296 | + t.boolean "can_create_team", default: true, null: false | ||
| 293 | t.string "state" | 297 | t.string "state" |
| 294 | - t.integer "color_scheme_id", default: 1, null: false | ||
| 295 | - t.integer "notification_level", default: 1, null: false | 298 | + t.integer "color_scheme_id", default: 1, null: false |
| 299 | + t.integer "notification_level", default: 1, null: false | ||
| 296 | t.datetime "password_expires_at" | 300 | t.datetime "password_expires_at" |
| 297 | t.integer "created_by_id" | 301 | t.integer "created_by_id" |
| 298 | t.string "avatar" | 302 | t.string "avatar" |
| @@ -300,15 +304,14 @@ ActiveRecord::Schema.define(version: 20140116231608) do | @@ -300,15 +304,14 @@ ActiveRecord::Schema.define(version: 20140116231608) do | ||
| 300 | t.datetime "confirmed_at" | 304 | t.datetime "confirmed_at" |
| 301 | t.datetime "confirmation_sent_at" | 305 | t.datetime "confirmation_sent_at" |
| 302 | t.string "unconfirmed_email" | 306 | t.string "unconfirmed_email" |
| 303 | - t.boolean "hide_no_ssh_key", default: false | ||
| 304 | - t.string "website_url", default: "", null: false | 307 | + t.boolean "hide_no_ssh_key", default: false |
| 308 | + t.string "website_url", default: "", null: false | ||
| 305 | end | 309 | end |
| 306 | 310 | ||
| 307 | add_index "users", ["admin"], name: "index_users_on_admin", using: :btree | 311 | add_index "users", ["admin"], name: "index_users_on_admin", using: :btree |
| 308 | add_index "users", ["authentication_token"], name: "index_users_on_authentication_token", unique: true, using: :btree | 312 | add_index "users", ["authentication_token"], name: "index_users_on_authentication_token", unique: true, using: :btree |
| 309 | add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree | 313 | add_index "users", ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree |
| 310 | add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree | 314 | add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree |
| 311 | - add_index "users", ["extern_uid", "provider"], name: "index_users_on_extern_uid_and_provider", unique: true, using: :btree | ||
| 312 | add_index "users", ["name"], name: "index_users_on_name", using: :btree | 315 | add_index "users", ["name"], name: "index_users_on_name", using: :btree |
| 313 | add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree | 316 | add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree |
| 314 | add_index "users", ["username"], name: "index_users_on_username", using: :btree | 317 | add_index "users", ["username"], name: "index_users_on_username", using: :btree |
| @@ -327,8 +330,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | @@ -327,8 +330,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | ||
| 327 | create_table "users_projects", force: true do |t| | 330 | create_table "users_projects", force: true do |t| |
| 328 | t.integer "user_id", null: false | 331 | t.integer "user_id", null: false |
| 329 | t.integer "project_id", null: false | 332 | t.integer "project_id", null: false |
| 330 | - t.datetime "created_at", null: false | ||
| 331 | - t.datetime "updated_at", null: false | 333 | + t.datetime "created_at" |
| 334 | + t.datetime "updated_at" | ||
| 332 | t.integer "project_access", default: 0, null: false | 335 | t.integer "project_access", default: 0, null: false |
| 333 | t.integer "notification_level", default: 3, null: false | 336 | t.integer "notification_level", default: 3, null: false |
| 334 | end | 337 | end |
| @@ -340,8 +343,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | @@ -340,8 +343,8 @@ ActiveRecord::Schema.define(version: 20140116231608) do | ||
| 340 | create_table "web_hooks", force: true do |t| | 343 | create_table "web_hooks", force: true do |t| |
| 341 | t.string "url" | 344 | t.string "url" |
| 342 | t.integer "project_id" | 345 | t.integer "project_id" |
| 343 | - t.datetime "created_at", null: false | ||
| 344 | - t.datetime "updated_at", null: false | 346 | + t.datetime "created_at" |
| 347 | + t.datetime "updated_at" | ||
| 345 | t.string "type", default: "ProjectHook" | 348 | t.string "type", default: "ProjectHook" |
| 346 | t.integer "service_id" | 349 | t.integer "service_id" |
| 347 | t.boolean "push_events", default: true, null: false | 350 | t.boolean "push_events", default: true, null: false |
features/project/merge_requests.feature
| @@ -55,18 +55,18 @@ Feature: Project Merge Requests | @@ -55,18 +55,18 @@ Feature: Project Merge Requests | ||
| 55 | Given project "Shop" have "Bug NS-05" open merge request with diffs inside | 55 | Given project "Shop" have "Bug NS-05" open merge request with diffs inside |
| 56 | And I visit merge request page "Bug NS-05" | 56 | And I visit merge request page "Bug NS-05" |
| 57 | And I click on the first commit in the merge request | 57 | And I click on the first commit in the merge request |
| 58 | - And I leave a comment like "Line is wrong" on line 185 of the first file | 58 | + And I leave a comment like "Line is wrong" on line 185 of the first file in commit |
| 59 | And I switch to the merge request's comments tab | 59 | And I switch to the merge request's comments tab |
| 60 | - Then I should see a discussion has started on commit bcf03b5de6c:L185 | 60 | + Then I should see a discussion has started on commit b1e6a9dbf1:L185 |
| 61 | 61 | ||
| 62 | @javascript | 62 | @javascript |
| 63 | Scenario: I comment on a commit in merge request | 63 | Scenario: I comment on a commit in merge request |
| 64 | Given project "Shop" have "Bug NS-05" open merge request with diffs inside | 64 | Given project "Shop" have "Bug NS-05" open merge request with diffs inside |
| 65 | And I visit merge request page "Bug NS-05" | 65 | And I visit merge request page "Bug NS-05" |
| 66 | And I click on the first commit in the merge request | 66 | And I click on the first commit in the merge request |
| 67 | - And I leave a comment on the diff page | 67 | + And I leave a comment on the diff page in commit |
| 68 | And I switch to the merge request's comments tab | 68 | And I switch to the merge request's comments tab |
| 69 | - Then I should see a discussion has started on commit bcf03b5de6c | 69 | + Then I should see a discussion has started on commit b1e6a9dbf1 |
| 70 | 70 | ||
| 71 | @javascript | 71 | @javascript |
| 72 | Scenario: I accept merge request with custom commit message | 72 | Scenario: I accept merge request with custom commit message |
features/steps/dashboard/dashboard_issues.rb
| @@ -66,7 +66,7 @@ class DashboardIssues < Spinach::FeatureSteps | @@ -66,7 +66,7 @@ class DashboardIssues < Spinach::FeatureSteps | ||
| 66 | 66 | ||
| 67 | def project | 67 | def project |
| 68 | @project ||= begin | 68 | @project ||= begin |
| 69 | - project =create :project_with_code | 69 | + project =create :project |
| 70 | project.team << [current_user, :master] | 70 | project.team << [current_user, :master] |
| 71 | project | 71 | project |
| 72 | end | 72 | end |
features/steps/dashboard/dashboard_merge_requests.rb
| @@ -66,7 +66,7 @@ class DashboardMergeRequests < Spinach::FeatureSteps | @@ -66,7 +66,7 @@ class DashboardMergeRequests < Spinach::FeatureSteps | ||
| 66 | 66 | ||
| 67 | def project | 67 | def project |
| 68 | @project ||= begin | 68 | @project ||= begin |
| 69 | - project =create :project_with_code | 69 | + project =create :project |
| 70 | project.team << [current_user, :master] | 70 | project.team << [current_user, :master] |
| 71 | project | 71 | project |
| 72 | end | 72 | end |
features/steps/project/deploy_keys.rb
| @@ -34,7 +34,7 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps | @@ -34,7 +34,7 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps | ||
| 34 | end | 34 | end |
| 35 | 35 | ||
| 36 | step 'other project has deploy key' do | 36 | step 'other project has deploy key' do |
| 37 | - @second_project = create :project, namespace: current_user.namespace | 37 | + @second_project = create :project, namespace: create(:group) |
| 38 | @second_project.team << [current_user, :master] | 38 | @second_project.team << [current_user, :master] |
| 39 | create(:deploy_keys_project, project: @second_project) | 39 | create(:deploy_keys_project, project: @second_project) |
| 40 | end | 40 | end |
features/steps/project/project_fork.rb
| @@ -12,7 +12,7 @@ class ForkProject < Spinach::FeatureSteps | @@ -12,7 +12,7 @@ class ForkProject < Spinach::FeatureSteps | ||
| 12 | 12 | ||
| 13 | step 'I am a member of project "Shop"' do | 13 | step 'I am a member of project "Shop"' do |
| 14 | @project = Project.find_by(name: "Shop") | 14 | @project = Project.find_by(name: "Shop") |
| 15 | - @project ||= create(:project_with_code, name: "Shop", group: create(:group)) | 15 | + @project ||= create(:project, name: "Shop", group: create(:group)) |
| 16 | @project.team << [@user, :reporter] | 16 | @project.team << [@user, :reporter] |
| 17 | end | 17 | end |
| 18 | 18 | ||
| @@ -26,7 +26,7 @@ class ForkProject < Spinach::FeatureSteps | @@ -26,7 +26,7 @@ class ForkProject < Spinach::FeatureSteps | ||
| 26 | current_user.namespace ||= create(:namespace) | 26 | current_user.namespace ||= create(:namespace) |
| 27 | current_user.namespace.should_not be_nil | 27 | current_user.namespace.should_not be_nil |
| 28 | current_user.namespace.path.should_not be_nil | 28 | current_user.namespace.path.should_not be_nil |
| 29 | - @my_project = create(:project_with_code, name: "Shop", namespace: current_user.namespace) | 29 | + @my_project = create(:project, name: "Shop", namespace: current_user.namespace) |
| 30 | end | 30 | end |
| 31 | 31 | ||
| 32 | step 'I should see a "Name has already been taken" warning' do | 32 | step 'I should see a "Name has already been taken" warning' do |
features/steps/project/project_forked_merge_requests.rb
| @@ -7,7 +7,7 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps | @@ -7,7 +7,7 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps | ||
| 7 | 7 | ||
| 8 | step 'I am a member of project "Shop"' do | 8 | step 'I am a member of project "Shop"' do |
| 9 | @project = Project.find_by(name: "Shop") | 9 | @project = Project.find_by(name: "Shop") |
| 10 | - @project ||= create(:project_with_code, name: "Shop") | 10 | + @project ||= create(:project, name: "Shop") |
| 11 | @project.team << [@user, :reporter] | 11 | @project.team << [@user, :reporter] |
| 12 | end | 12 | end |
| 13 | 13 | ||
| @@ -15,7 +15,7 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps | @@ -15,7 +15,7 @@ class ProjectForkedMergeRequests < Spinach::FeatureSteps | ||
| 15 | @forking_user = @user | 15 | @forking_user = @user |
| 16 | forked_project_link = build(:forked_project_link) | 16 | forked_project_link = build(:forked_project_link) |
| 17 | @forked_project = Project.find_by(name: "Forked Shop") | 17 | @forked_project = Project.find_by(name: "Forked Shop") |
| 18 | - @forked_project ||= create(:source_project_with_code, name: "Forked Shop", forked_project_link: forked_project_link, creator_id: @forking_user.id , namespace: @forking_user.namespace) | 18 | + @forked_project ||= create(:project, name: "Forked Shop", forked_project_link: forked_project_link, creator_id: @forking_user.id , namespace: @forking_user.namespace) |
| 19 | 19 | ||
| 20 | forked_project_link.forked_from_project = @project | 20 | forked_project_link.forked_from_project = @project |
| 21 | forked_project_link.forked_to_project = @forked_project | 21 | forked_project_link.forked_to_project = @forked_project |
features/steps/project/project_issue_tracker.rb
| @@ -5,7 +5,7 @@ class ProjectIssueTracker < Spinach::FeatureSteps | @@ -5,7 +5,7 @@ class ProjectIssueTracker < Spinach::FeatureSteps | ||
| 5 | 5 | ||
| 6 | step 'project "Shop" has issues enabled' do | 6 | step 'project "Shop" has issues enabled' do |
| 7 | @project = Project.find_by(name: "Shop") | 7 | @project = Project.find_by(name: "Shop") |
| 8 | - @project ||= create(:project_with_code, name: "Shop", namespace: @user.namespace) | 8 | + @project ||= create(:project, name: "Shop", namespace: @user.namespace) |
| 9 | @project.issues_enabled = true | 9 | @project.issues_enabled = true |
| 10 | end | 10 | end |
| 11 | 11 |
features/steps/project/project_markdown_render.rb
| @@ -4,7 +4,7 @@ class Spinach::Features::ProjectMarkdownRender < Spinach::FeatureSteps | @@ -4,7 +4,7 @@ class Spinach::Features::ProjectMarkdownRender < Spinach::FeatureSteps | ||
| 4 | 4 | ||
| 5 | And 'I own project "Delta"' do | 5 | And 'I own project "Delta"' do |
| 6 | @project = Project.find_by(name: "Delta") | 6 | @project = Project.find_by(name: "Delta") |
| 7 | - @project ||= create(:project_with_code, name: "Delta", namespace: @user.namespace) | 7 | + @project ||= create(:project, name: "Delta", namespace: @user.namespace) |
| 8 | @project.team << [@user, :master] | 8 | @project.team << [@user, :master] |
| 9 | end | 9 | end |
| 10 | 10 |
features/steps/project/project_merge_requests.rb
| @@ -81,6 +81,8 @@ class ProjectMergeRequests < Spinach::FeatureSteps | @@ -81,6 +81,8 @@ class ProjectMergeRequests < Spinach::FeatureSteps | ||
| 81 | title: "Bug NS-04", | 81 | title: "Bug NS-04", |
| 82 | source_project: project, | 82 | source_project: project, |
| 83 | target_project: project, | 83 | target_project: project, |
| 84 | + source_branch: 'stable', | ||
| 85 | + target_branch: 'master', | ||
| 84 | author: project.users.first) | 86 | author: project.users.first) |
| 85 | end | 87 | end |
| 86 | 88 | ||
| @@ -109,33 +111,29 @@ class ProjectMergeRequests < Spinach::FeatureSteps | @@ -109,33 +111,29 @@ class ProjectMergeRequests < Spinach::FeatureSteps | ||
| 109 | end | 111 | end |
| 110 | 112 | ||
| 111 | step 'I click on the first commit in the merge request' do | 113 | step 'I click on the first commit in the merge request' do |
| 112 | - click_link merge_request.commits.first.short_id(8) | 114 | + within '.first-commits' do |
| 115 | + click_link merge_request.commits.first.short_id(8) | ||
| 116 | + end | ||
| 113 | end | 117 | end |
| 114 | 118 | ||
| 115 | step 'I leave a comment on the diff page' do | 119 | step 'I leave a comment on the diff page' do |
| 116 | init_diff_note | 120 | init_diff_note |
| 121 | + leave_comment "One comment to rule them all" | ||
| 122 | + end | ||
| 117 | 123 | ||
| 118 | - within('.js-discussion-note-form') do | ||
| 119 | - fill_in "note_note", with: "One comment to rule them all" | ||
| 120 | - click_button "Add Comment" | ||
| 121 | - end | ||
| 122 | - | ||
| 123 | - within ".note-text" do | ||
| 124 | - page.should have_content "One comment to rule them all" | ||
| 125 | - end | 124 | + step 'I leave a comment on the diff page in commit' do |
| 125 | + find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185"]').click | ||
| 126 | + leave_comment "One comment to rule them all" | ||
| 126 | end | 127 | end |
| 127 | 128 | ||
| 128 | step 'I leave a comment like "Line is wrong" on line 185 of the first file' do | 129 | step 'I leave a comment like "Line is wrong" on line 185 of the first file' do |
| 129 | init_diff_note | 130 | init_diff_note |
| 131 | + leave_comment "Line is wrong" | ||
| 132 | + end | ||
| 130 | 133 | ||
| 131 | - within(".js-discussion-note-form") do | ||
| 132 | - fill_in "note_note", with: "Line is wrong" | ||
| 133 | - click_button "Add Comment" | ||
| 134 | - end | ||
| 135 | - | ||
| 136 | - within ".note-text" do | ||
| 137 | - page.should have_content "Line is wrong" | ||
| 138 | - end | 134 | + step 'I leave a comment like "Line is wrong" on line 185 of the first file in commit' do |
| 135 | + find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185"]').click | ||
| 136 | + leave_comment "Line is wrong" | ||
| 139 | end | 137 | end |
| 140 | 138 | ||
| 141 | step 'I should see a discussion has started on line 185' do | 139 | step 'I should see a discussion has started on line 185' do |
| @@ -144,14 +142,14 @@ class ProjectMergeRequests < Spinach::FeatureSteps | @@ -144,14 +142,14 @@ class ProjectMergeRequests < Spinach::FeatureSteps | ||
| 144 | page.should have_content "Line is wrong" | 142 | page.should have_content "Line is wrong" |
| 145 | end | 143 | end |
| 146 | 144 | ||
| 147 | - step 'I should see a discussion has started on commit bcf03b5de6c:L185' do | 145 | + step 'I should see a discussion has started on commit b1e6a9dbf1:L185' do |
| 148 | page.should have_content "#{current_user.name} started a discussion on commit" | 146 | page.should have_content "#{current_user.name} started a discussion on commit" |
| 149 | page.should have_content "app/assets/stylesheets/tree.scss:L185" | 147 | page.should have_content "app/assets/stylesheets/tree.scss:L185" |
| 150 | page.should have_content "Line is wrong" | 148 | page.should have_content "Line is wrong" |
| 151 | end | 149 | end |
| 152 | 150 | ||
| 153 | - step 'I should see a discussion has started on commit bcf03b5de6c' do | ||
| 154 | - page.should have_content "#{current_user.name} started a discussion on commit bcf03b5de6c" | 151 | + step 'I should see a discussion has started on commit b1e6a9dbf1' do |
| 152 | + page.should have_content "#{current_user.name} started a discussion on commit" | ||
| 155 | page.should have_content "One comment to rule them all" | 153 | page.should have_content "One comment to rule them all" |
| 156 | page.should have_content "app/assets/stylesheets/tree.scss:L185" | 154 | page.should have_content "app/assets/stylesheets/tree.scss:L185" |
| 157 | end | 155 | end |
| @@ -188,6 +186,17 @@ class ProjectMergeRequests < Spinach::FeatureSteps | @@ -188,6 +186,17 @@ class ProjectMergeRequests < Spinach::FeatureSteps | ||
| 188 | end | 186 | end |
| 189 | 187 | ||
| 190 | def init_diff_note | 188 | def init_diff_note |
| 191 | - find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185"]').click | 189 | + find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_172_185"]').click |
| 190 | + end | ||
| 191 | + | ||
| 192 | + def leave_comment(message) | ||
| 193 | + within(".js-discussion-note-form") do | ||
| 194 | + fill_in "note_note", with: message | ||
| 195 | + click_button "Add Comment" | ||
| 196 | + end | ||
| 197 | + | ||
| 198 | + within ".note-text" do | ||
| 199 | + page.should have_content message | ||
| 200 | + end | ||
| 192 | end | 201 | end |
| 193 | end | 202 | end |
features/steps/project/project_team_management.rb
| @@ -79,7 +79,7 @@ class ProjectTeamManagement < Spinach::FeatureSteps | @@ -79,7 +79,7 @@ class ProjectTeamManagement < Spinach::FeatureSteps | ||
| 79 | end | 79 | end |
| 80 | 80 | ||
| 81 | Given 'I own project "Website"' do | 81 | Given 'I own project "Website"' do |
| 82 | - @project = create(:project, name: "Website", namespace: @user.namespace) | 82 | + @project = create(:empty_project, name: "Website", namespace: @user.namespace) |
| 83 | @project.team << [@user, :master] | 83 | @project.team << [@user, :master] |
| 84 | end | 84 | end |
| 85 | 85 |
features/steps/project/redirects.rb
| @@ -4,7 +4,7 @@ class Spinach::Features::ProjectRedirects < Spinach::FeatureSteps | @@ -4,7 +4,7 @@ class Spinach::Features::ProjectRedirects < Spinach::FeatureSteps | ||
| 4 | include SharedProject | 4 | include SharedProject |
| 5 | 5 | ||
| 6 | step 'public project "Community"' do | 6 | step 'public project "Community"' do |
| 7 | - create :project_with_code, name: 'Community', visibility_level: Gitlab::VisibilityLevel::PUBLIC | 7 | + create :project, name: 'Community', visibility_level: Gitlab::VisibilityLevel::PUBLIC |
| 8 | end | 8 | end |
| 9 | 9 | ||
| 10 | step 'private project "Enterprise"' do | 10 | step 'private project "Enterprise"' do |
features/steps/public/projects_feature.rb
| @@ -25,11 +25,11 @@ class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps | @@ -25,11 +25,11 @@ class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps | ||
| 25 | end | 25 | end |
| 26 | 26 | ||
| 27 | step 'public project "Community"' do | 27 | step 'public project "Community"' do |
| 28 | - create :project_with_code, name: 'Community', visibility_level: Gitlab::VisibilityLevel::PUBLIC | 28 | + create :project, name: 'Community', visibility_level: Gitlab::VisibilityLevel::PUBLIC |
| 29 | end | 29 | end |
| 30 | 30 | ||
| 31 | step 'public empty project "Empty Public Project"' do | 31 | step 'public empty project "Empty Public Project"' do |
| 32 | - create :project, name: 'Empty Public Project', visibility_level: Gitlab::VisibilityLevel::PUBLIC | 32 | + create :empty_project, name: 'Empty Public Project', visibility_level: Gitlab::VisibilityLevel::PUBLIC |
| 33 | end | 33 | end |
| 34 | 34 | ||
| 35 | step 'I visit empty project page' do | 35 | step 'I visit empty project page' do |
| @@ -76,7 +76,7 @@ class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps | @@ -76,7 +76,7 @@ class Spinach::Features::PublicProjectsFeature < Spinach::FeatureSteps | ||
| 76 | end | 76 | end |
| 77 | 77 | ||
| 78 | step 'internal project "Internal"' do | 78 | step 'internal project "Internal"' do |
| 79 | - create :project_with_code, name: 'Internal', visibility_level: Gitlab::VisibilityLevel::INTERNAL | 79 | + create :project, name: 'Internal', visibility_level: Gitlab::VisibilityLevel::INTERNAL |
| 80 | end | 80 | end |
| 81 | 81 | ||
| 82 | step 'I should see project "Internal"' do | 82 | step 'I should see project "Internal"' do |
features/steps/shared/project.rb
| @@ -3,21 +3,21 @@ module SharedProject | @@ -3,21 +3,21 @@ module SharedProject | ||
| 3 | 3 | ||
| 4 | # Create a project without caring about what it's called | 4 | # Create a project without caring about what it's called |
| 5 | And "I own a project" do | 5 | And "I own a project" do |
| 6 | - @project = create(:project_with_code, namespace: @user.namespace) | 6 | + @project = create(:project, namespace: @user.namespace) |
| 7 | @project.team << [@user, :master] | 7 | @project.team << [@user, :master] |
| 8 | end | 8 | end |
| 9 | 9 | ||
| 10 | # Create a specific project called "Shop" | 10 | # Create a specific project called "Shop" |
| 11 | And 'I own project "Shop"' do | 11 | And 'I own project "Shop"' do |
| 12 | @project = Project.find_by(name: "Shop") | 12 | @project = Project.find_by(name: "Shop") |
| 13 | - @project ||= create(:project_with_code, name: "Shop", namespace: @user.namespace) | 13 | + @project ||= create(:project, name: "Shop", namespace: @user.namespace) |
| 14 | @project.team << [@user, :master] | 14 | @project.team << [@user, :master] |
| 15 | end | 15 | end |
| 16 | 16 | ||
| 17 | # Create another specific project called "Forum" | 17 | # Create another specific project called "Forum" |
| 18 | And 'I own project "Forum"' do | 18 | And 'I own project "Forum"' do |
| 19 | @project = Project.find_by(name: "Forum") | 19 | @project = Project.find_by(name: "Forum") |
| 20 | - @project ||= create(:project_with_code, name: "Forum", namespace: @user.namespace, path: 'forum_project') | 20 | + @project ||= create(:project, name: "Forum", namespace: @user.namespace, path: 'forum_project') |
| 21 | @project.team << [@user, :master] | 21 | @project.team << [@user, :master] |
| 22 | end | 22 | end |
| 23 | 23 |
lib/api/merge_requests.rb
| @@ -88,7 +88,6 @@ module API | @@ -88,7 +88,6 @@ module API | ||
| 88 | end | 88 | end |
| 89 | 89 | ||
| 90 | if merge_request.save | 90 | if merge_request.save |
| 91 | - merge_request.reload_code | ||
| 92 | present merge_request, with: Entities::MergeRequest | 91 | present merge_request, with: Entities::MergeRequest |
| 93 | else | 92 | else |
| 94 | handle_merge_request_errors! merge_request.errors | 93 | handle_merge_request_errors! merge_request.errors |
spec/controllers/blob_controller_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe Projects::BlobController do | 3 | describe Projects::BlobController do |
| 4 | - let(:project) { create(:project_with_code) } | 4 | + let(:project) { create(:project) } |
| 5 | let(:user) { create(:user) } | 5 | let(:user) { create(:user) } |
| 6 | 6 | ||
| 7 | before do | 7 | before do |
spec/controllers/commit_controller_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe Projects::CommitController do | 3 | describe Projects::CommitController do |
| 4 | - let(:project) { create(:project_with_code) } | 4 | + let(:project) { create(:project) } |
| 5 | let(:user) { create(:user) } | 5 | let(:user) { create(:user) } |
| 6 | let(:commit) { project.repository.commit("master") } | 6 | let(:commit) { project.repository.commit("master") } |
| 7 | 7 |
spec/controllers/commits_controller_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe Projects::CommitsController do | 3 | describe Projects::CommitsController do |
| 4 | - let(:project) { create(:project_with_code) } | 4 | + let(:project) { create(:project) } |
| 5 | let(:user) { create(:user) } | 5 | let(:user) { create(:user) } |
| 6 | 6 | ||
| 7 | before do | 7 | before do |
spec/controllers/merge_requests_controller_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe Projects::MergeRequestsController do | 3 | describe Projects::MergeRequestsController do |
| 4 | - let(:project) { create(:project_with_code) } | 4 | + let(:project) { create(:project) } |
| 5 | let(:user) { create(:user) } | 5 | let(:user) { create(:user) } |
| 6 | let(:merge_request) { create(:merge_request_with_diffs, target_project: project, source_project: project, target_branch: "stable", source_branch: "master") } | 6 | let(:merge_request) { create(:merge_request_with_diffs, target_project: project, source_project: project, target_branch: "stable", source_branch: "master") } |
| 7 | 7 |
spec/controllers/tree_controller_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe Projects::TreeController do | 3 | describe Projects::TreeController do |
| 4 | - let(:project) { create(:project_with_code) } | 4 | + let(:project) { create(:project) } |
| 5 | let(:user) { create(:user) } | 5 | let(:user) { create(:user) } |
| 6 | 6 | ||
| 7 | before do | 7 | before do |
spec/factories.rb
| @@ -27,43 +27,16 @@ FactoryGirl.define do | @@ -27,43 +27,16 @@ FactoryGirl.define do | ||
| 27 | factory :admin, traits: [:admin] | 27 | factory :admin, traits: [:admin] |
| 28 | end | 28 | end |
| 29 | 29 | ||
| 30 | - factory :project do | 30 | + factory :empty_project, class: 'Project' do |
| 31 | sequence(:name) { |n| "project#{n}" } | 31 | sequence(:name) { |n| "project#{n}" } |
| 32 | path { name.downcase.gsub(/\s/, '_') } | 32 | path { name.downcase.gsub(/\s/, '_') } |
| 33 | namespace | 33 | namespace |
| 34 | creator | 34 | creator |
| 35 | - | ||
| 36 | - trait :source do | ||
| 37 | - sequence(:name) { |n| "source project#{n}" } | ||
| 38 | - end | ||
| 39 | - trait :target do | ||
| 40 | - sequence(:name) { |n| "target project#{n}" } | ||
| 41 | - end | ||
| 42 | - | ||
| 43 | - factory :source_project, traits: [:source] | ||
| 44 | - factory :target_project, traits: [:target] | ||
| 45 | - end | ||
| 46 | - | ||
| 47 | - | ||
| 48 | - factory :redmine_project, parent: :project do | ||
| 49 | - issues_tracker { "redmine" } | ||
| 50 | - issues_tracker_id { "project_name_in_redmine" } | ||
| 51 | end | 35 | end |
| 52 | 36 | ||
| 53 | - factory :project_with_code, parent: :project do | 37 | + factory :project, parent: :empty_project do |
| 54 | path { 'gitlabhq' } | 38 | path { 'gitlabhq' } |
| 55 | 39 | ||
| 56 | - trait :source_path do | ||
| 57 | - path { 'source_gitlabhq' } | ||
| 58 | - end | ||
| 59 | - | ||
| 60 | - trait :target_path do | ||
| 61 | - path { 'target_gitlabhq' } | ||
| 62 | - end | ||
| 63 | - | ||
| 64 | - factory :source_project_with_code, traits: [:source, :source_path] | ||
| 65 | - factory :target_project_with_code, traits: [:target, :target_path] | ||
| 66 | - | ||
| 67 | after :create do |project| | 40 | after :create do |project| |
| 68 | TestEnv.clear_repo_dir(project.namespace, project.path) | 41 | TestEnv.clear_repo_dir(project.namespace, project.path) |
| 69 | TestEnv.reset_satellite_dir | 42 | TestEnv.reset_satellite_dir |
| @@ -71,6 +44,11 @@ FactoryGirl.define do | @@ -71,6 +44,11 @@ FactoryGirl.define do | ||
| 71 | end | 44 | end |
| 72 | end | 45 | end |
| 73 | 46 | ||
| 47 | + factory :redmine_project, parent: :project do | ||
| 48 | + issues_tracker { "redmine" } | ||
| 49 | + issues_tracker_id { "project_name_in_redmine" } | ||
| 50 | + end | ||
| 51 | + | ||
| 74 | factory :group do | 52 | factory :group do |
| 75 | sequence(:name) { |n| "group#{n}" } | 53 | sequence(:name) { |n| "group#{n}" } |
| 76 | path { name.downcase.gsub(/\s/, '_') } | 54 | path { name.downcase.gsub(/\s/, '_') } |
| @@ -109,25 +87,45 @@ FactoryGirl.define do | @@ -109,25 +87,45 @@ FactoryGirl.define do | ||
| 109 | factory :merge_request do | 87 | factory :merge_request do |
| 110 | title | 88 | title |
| 111 | author | 89 | author |
| 112 | - source_project factory: :source_project_with_code | ||
| 113 | - target_project factory: :target_project_with_code | 90 | + source_project factory: :project |
| 91 | + target_project { source_project } | ||
| 92 | + | ||
| 93 | + # → git log stable..master --pretty=oneline | ||
| 94 | + # b1e6a9dbf1c85e6616497a5e7bad9143a4bd0828 tree css fixes | ||
| 95 | + # 8716fc78f3c65bbf7bcf7b574febd583bc5d2812 Added loading animation for notes | ||
| 96 | + # cd5c4bac5042c5469dcdf7e7b2f768d3c6fd7088 notes count for wall | ||
| 97 | + # 8470d70da67355c9c009e4401746b1d5410af2e3 notes controller refactored | ||
| 98 | + # 1e689bfba39525ead225eaf611948cfbe8ac34cf fixed notes logic | ||
| 99 | + # f0f14c8eaba69ebddd766498a9d0b0e79becd633 finished scss refactoring | ||
| 100 | + # 3a4b4fb4cde7809f033822a171b9feae19d41fff Moving ui styles to one scss file, Added ui class to body | ||
| 101 | + # 065c200c33f68c2bb781e35a43f9dc8138a893b5 removed unnecessary hr tags & titles | ||
| 102 | + # 1e8b111be85df0db6c8000ef9a710bc0221eae83 Merge branch 'master' of github.com:gitlabhq/gitlabhq | ||
| 103 | + # f403da73f5e62794a0447aca879360494b08f678 Fixed ajax loading image. Fixed wrong wording | ||
| 104 | + # e6ea73c77600d413d370249b8e392734f7d1dbee Merge pull request #468 from bencevans/patch-1 | ||
| 105 | + # 4a3c05b69355deee25767a74d0512ec4b510d4ef Merge pull request #470 from bgondy/patch-1 | ||
| 106 | + # 0347fe2412eb51d3efeccc35210e9268bc765ac5 Update app/views/projects/team.html.haml | ||
| 107 | + # 2b5c61bdece1f7eb2b901ceea7d364065cdf76ac Title for a link fixed | ||
| 108 | + # 460eeb13b7560b40104044973ff933b1a6dbbcaa Increased count of notes loaded when visit wall page | ||
| 109 | + # 21c141afb1c53a9180a99d2cca29ffa613eb7e3a Merge branch 'notes_refactoring' | ||
| 110 | + # 292a41cbe295f16f7148913b31eb0fb91f3251c3 Fixed comments for snippets. Tests fixed | ||
| 111 | + # d41d8ffb02fa74fd4571603548bd7e401ec99e0c Reply button, Comments for Merge Request diff | ||
| 112 | + # b1a36b552be2a7a6bc57fbed6c52dc6ed82111f8 Merge pull request #466 from skroutz/no-rbenv | ||
| 113 | + # db75dae913e8365453ca231f101b067314a7ea71 Merge pull request #465 from skroutz/branches_commit_link | ||
| 114 | + # 75f040fbfe4b5af23ff004ad3207c3976df097a8 Don't enforce rbenv version | ||
| 115 | + # e42fb4fda475370dcb0d8f8f1268bfdc7a0cc437 Fix broken commit link in branches page | ||
| 116 | + # 215a01f63ccdc085f75a48f6f7ab6f2b15b5852c move notes login to one controller | ||
| 117 | + # 81092c01984a481e312de10a28e3f1a6dda182a3 Status codes for errors, New error pages | ||
| 118 | + # 7d279f9302151e3c8f4c5df9c5200a72799409b9 better error handling for not found resource, gitolite error | ||
| 119 | + # 9e6d0710e927aa8ea834b8a9ae9f277be617ac7d Merge pull request #443 from CedricGatay/fix/incorrectLineNumberingInDiff | ||
| 120 | + # 6ea87c47f0f8a24ae031c3fff17bc913889ecd00 Incorrect line numbering in diff | ||
| 121 | + # | ||
| 122 | + # → git log master..stable --pretty=oneline | ||
| 123 | + # empty | ||
| 124 | + | ||
| 114 | source_branch "master" | 125 | source_branch "master" |
| 115 | target_branch "stable" | 126 | target_branch "stable" |
| 116 | 127 | ||
| 117 | - # pick 3 commits "at random" (from bcf03b5d~3 to bcf03b5d) | ||
| 118 | trait :with_diffs do | 128 | trait :with_diffs do |
| 119 | - target_branch "master" # pretend bcf03b5d~3 | ||
| 120 | - source_branch "stable" # pretend bcf03b5d | ||
| 121 | - st_commits do | ||
| 122 | - [ | ||
| 123 | - source_project.repository.commit('bcf03b5d').to_hash, | ||
| 124 | - source_project.repository.commit('bcf03b5d~1').to_hash, | ||
| 125 | - source_project.repository.commit('bcf03b5d~2').to_hash | ||
| 126 | - ] | ||
| 127 | - end | ||
| 128 | - st_diffs do | ||
| 129 | - source_project.repo.diff("bcf03b5d~3", "bcf03b5d") | ||
| 130 | - end | ||
| 131 | end | 129 | end |
| 132 | 130 | ||
| 133 | trait :closed do | 131 | trait :closed do |
| @@ -156,7 +154,7 @@ FactoryGirl.define do | @@ -156,7 +154,7 @@ FactoryGirl.define do | ||
| 156 | factory :note_on_merge_request_with_attachment, traits: [:on_merge_request, :with_attachment] | 154 | factory :note_on_merge_request_with_attachment, traits: [:on_merge_request, :with_attachment] |
| 157 | 155 | ||
| 158 | trait :on_commit do | 156 | trait :on_commit do |
| 159 | - project factory: :project_with_code | 157 | + project factory: :project |
| 160 | commit_id "bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a" | 158 | commit_id "bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a" |
| 161 | noteable_type "Commit" | 159 | noteable_type "Commit" |
| 162 | end | 160 | end |
| @@ -166,7 +164,7 @@ FactoryGirl.define do | @@ -166,7 +164,7 @@ FactoryGirl.define do | ||
| 166 | end | 164 | end |
| 167 | 165 | ||
| 168 | trait :on_merge_request do | 166 | trait :on_merge_request do |
| 169 | - project factory: :project_with_code | 167 | + project factory: :project |
| 170 | noteable_id 1 | 168 | noteable_id 1 |
| 171 | noteable_type "MergeRequest" | 169 | noteable_type "MergeRequest" |
| 172 | end | 170 | end |
spec/features/gitlab_flavored_markdown_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe "GitLab Flavored Markdown" do | 3 | describe "GitLab Flavored Markdown" do |
| 4 | - let(:project) { create(:project_with_code) } | 4 | + let(:project) { create(:project) } |
| 5 | let(:issue) { create(:issue, project: project) } | 5 | let(:issue) { create(:issue, project: project) } |
| 6 | let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } | 6 | let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } |
| 7 | let(:fred) do | 7 | let(:fred) do |
spec/features/notes_on_merge_requests_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe "On a merge request", js: true do | 3 | describe "On a merge request", js: true do |
| 4 | - let!(:project) { create(:project_with_code) } | 4 | + let!(:project) { create(:project) } |
| 5 | let!(:merge_request) { create(:merge_request, source_project: project, target_project: project) } | 5 | let!(:merge_request) { create(:merge_request, source_project: project, target_project: project) } |
| 6 | let!(:note) { create(:note_on_merge_request_with_attachment, project: project) } | 6 | let!(:note) { create(:note_on_merge_request_with_attachment, project: project) } |
| 7 | 7 | ||
| @@ -135,7 +135,7 @@ describe "On a merge request", js: true do | @@ -135,7 +135,7 @@ describe "On a merge request", js: true do | ||
| 135 | end | 135 | end |
| 136 | 136 | ||
| 137 | describe "On a merge request diff", js: true, focus: true do | 137 | describe "On a merge request diff", js: true, focus: true do |
| 138 | - let!(:project) { create(:source_project_with_code) } | 138 | + let!(:project) { create(:project) } |
| 139 | let!(:merge_request) { create(:merge_request_with_diffs, source_project: project, target_project: project) } | 139 | let!(:merge_request) { create(:merge_request_with_diffs, source_project: project, target_project: project) } |
| 140 | 140 | ||
| 141 | before do | 141 | before do |
| @@ -149,7 +149,7 @@ describe "On a merge request diff", js: true, focus: true do | @@ -149,7 +149,7 @@ describe "On a merge request diff", js: true, focus: true do | ||
| 149 | 149 | ||
| 150 | describe "when adding a note" do | 150 | describe "when adding a note" do |
| 151 | before do | 151 | before do |
| 152 | - find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185"]').click | 152 | + find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_172_185"]').click |
| 153 | end | 153 | end |
| 154 | 154 | ||
| 155 | describe "the notes holder" do | 155 | describe "the notes holder" do |
| @@ -159,23 +159,14 @@ describe "On a merge request diff", js: true, focus: true do | @@ -159,23 +159,14 @@ describe "On a merge request diff", js: true, focus: true do | ||
| 159 | end | 159 | end |
| 160 | 160 | ||
| 161 | describe "the note form" do | 161 | describe "the note form" do |
| 162 | - # FIXME | ||
| 163 | - #it 'should be valid' do | ||
| 164 | - #within(".js-temp-notes-holder") { find("#note_noteable_type").value.should == "MergeRequest" } | ||
| 165 | - #within(".js-temp-notes-holder") { find("#note_noteable_id").value.should == merge_request.id.to_s } | ||
| 166 | - #within(".js-temp-notes-holder") { find("#note_commit_id").value.should == "" } | ||
| 167 | - #within(".js-temp-notes-holder") { find("#note_line_code").value.should == "4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185" } | ||
| 168 | - #should have_css(".js-close-discussion-note-form", text: "Cancel") | ||
| 169 | - #end | ||
| 170 | - | ||
| 171 | it "shouldn't add a second form for same row" do | 162 | it "shouldn't add a second form for same row" do |
| 172 | - find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185"]').click | 163 | + find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_172_185"]').click |
| 173 | 164 | ||
| 174 | - should have_css("tr[id='4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185'] + .js-temp-notes-holder form", count: 1) | 165 | + should have_css("tr[id='4735dfc552ad7bf15ca468adc3cad9d05b624490_172_185'] + .js-temp-notes-holder form", count: 1) |
| 175 | end | 166 | end |
| 176 | 167 | ||
| 177 | it "should be removed when canceled" do | 168 | it "should be removed when canceled" do |
| 178 | - within(".file form[rel$='4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185']") do | 169 | + within(".file form[rel$='4735dfc552ad7bf15ca468adc3cad9d05b624490_172_185']") do |
| 179 | find(".js-close-discussion-note-form").trigger("click") | 170 | find(".js-close-discussion-note-form").trigger("click") |
| 180 | end | 171 | end |
| 181 | 172 | ||
| @@ -185,11 +176,11 @@ describe "On a merge request diff", js: true, focus: true do | @@ -185,11 +176,11 @@ describe "On a merge request diff", js: true, focus: true do | ||
| 185 | end | 176 | end |
| 186 | 177 | ||
| 187 | describe "with muliple note forms" do | 178 | describe "with muliple note forms" do |
| 188 | - let!(:project) { create(:source_project_with_code) } | 179 | + let!(:project) { create(:project) } |
| 189 | let!(:merge_request) { create(:merge_request_with_diffs, source_project: project, target_project: project) } | 180 | let!(:merge_request) { create(:merge_request_with_diffs, source_project: project, target_project: project) } |
| 190 | 181 | ||
| 191 | before do | 182 | before do |
| 192 | - find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185"]').click | 183 | + find('a[data-line-code="4735dfc552ad7bf15ca468adc3cad9d05b624490_172_185"]').click |
| 193 | find('a[data-line-code="342e16cbbd482ac2047dc679b2749d248cc1428f_18_17"]').click | 184 | find('a[data-line-code="342e16cbbd482ac2047dc679b2749d248cc1428f_18_17"]').click |
| 194 | end | 185 | end |
| 195 | 186 | ||
| @@ -198,7 +189,7 @@ describe "On a merge request diff", js: true, focus: true do | @@ -198,7 +189,7 @@ describe "On a merge request diff", js: true, focus: true do | ||
| 198 | describe "previewing them separately" do | 189 | describe "previewing them separately" do |
| 199 | before do | 190 | before do |
| 200 | # add two separate texts and trigger previews on both | 191 | # add two separate texts and trigger previews on both |
| 201 | - within("tr[id='4735dfc552ad7bf15ca468adc3cad9d05b624490_185_185'] + .js-temp-notes-holder") do | 192 | + within("tr[id='4735dfc552ad7bf15ca468adc3cad9d05b624490_172_185'] + .js-temp-notes-holder") do |
| 202 | fill_in "note[note]", with: "One comment on line 185" | 193 | fill_in "note[note]", with: "One comment on line 185" |
| 203 | find(".js-note-preview-button").trigger("click") | 194 | find(".js-note-preview-button").trigger("click") |
| 204 | end | 195 | end |
spec/features/security/project/internal_access_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe "Internal Project Access" do | 3 | describe "Internal Project Access" do |
| 4 | - let(:project) { create(:project_with_code) } | 4 | + let(:project) { create(:project) } |
| 5 | 5 | ||
| 6 | let(:master) { create(:user) } | 6 | let(:master) { create(:user) } |
| 7 | let(:guest) { create(:user) } | 7 | let(:guest) { create(:user) } |
spec/features/security/project/private_access_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe "Private Project Access" do | 3 | describe "Private Project Access" do |
| 4 | - let(:project) { create(:project_with_code) } | 4 | + let(:project) { create(:project) } |
| 5 | 5 | ||
| 6 | let(:master) { create(:user) } | 6 | let(:master) { create(:user) } |
| 7 | let(:guest) { create(:user) } | 7 | let(:guest) { create(:user) } |
spec/features/security/project/public_access_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe "Public Project Access" do | 3 | describe "Public Project Access" do |
| 4 | - let(:project) { create(:project_with_code) } | 4 | + let(:project) { create(:project) } |
| 5 | 5 | ||
| 6 | let(:master) { create(:user) } | 6 | let(:master) { create(:user) } |
| 7 | let(:guest) { create(:user) } | 7 | let(:guest) { create(:user) } |
spec/helpers/gitlab_markdown_helper_spec.rb
| @@ -4,7 +4,7 @@ describe GitlabMarkdownHelper do | @@ -4,7 +4,7 @@ describe GitlabMarkdownHelper do | ||
| 4 | include ApplicationHelper | 4 | include ApplicationHelper |
| 5 | include IssuesHelper | 5 | include IssuesHelper |
| 6 | 6 | ||
| 7 | - let!(:project) { create(:project_with_code) } | 7 | + let!(:project) { create(:project) } |
| 8 | 8 | ||
| 9 | let(:user) { create(:user, username: 'gfm') } | 9 | let(:user) { create(:user, username: 'gfm') } |
| 10 | let(:commit) { project.repository.commit } | 10 | let(:commit) { project.repository.commit } |
spec/helpers/search_helper_spec.rb
| @@ -43,7 +43,7 @@ describe SearchHelper do | @@ -43,7 +43,7 @@ describe SearchHelper do | ||
| 43 | end | 43 | end |
| 44 | 44 | ||
| 45 | context "with a current project" do | 45 | context "with a current project" do |
| 46 | - before { @project = create(:project_with_code) } | 46 | + before { @project = create(:project) } |
| 47 | 47 | ||
| 48 | it "includes project-specific sections" do | 48 | it "includes project-specific sections" do |
| 49 | search_autocomplete_opts("Files").size.should == 1 | 49 | search_autocomplete_opts("Files").size.should == 1 |
spec/lib/gitlab/reference_extractor_spec.rb
| @@ -43,7 +43,7 @@ describe Gitlab::ReferenceExtractor do | @@ -43,7 +43,7 @@ describe Gitlab::ReferenceExtractor do | ||
| 43 | end | 43 | end |
| 44 | 44 | ||
| 45 | context 'with a project' do | 45 | context 'with a project' do |
| 46 | - let(:project) { create(:project_with_code) } | 46 | + let(:project) { create(:project) } |
| 47 | 47 | ||
| 48 | it 'accesses valid user objects on the project team' do | 48 | it 'accesses valid user objects on the project team' do |
| 49 | @u_foo = create(:user, username: 'foo') | 49 | @u_foo = create(:user, username: 'foo') |
spec/lib/gitlab/satellite/action_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe 'Gitlab::Satellite::Action' do | 3 | describe 'Gitlab::Satellite::Action' do |
| 4 | - let(:project) { create(:project_with_code) } | 4 | + let(:project) { create(:project) } |
| 5 | let(:user) { create(:user) } | 5 | let(:user) { create(:user) } |
| 6 | 6 | ||
| 7 | describe '#prepare_satellite!' do | 7 | describe '#prepare_satellite!' do |
spec/lib/gitlab/satellite/merge_action_spec.rb
| @@ -12,9 +12,10 @@ describe 'Gitlab::Satellite::MergeAction' do | @@ -12,9 +12,10 @@ describe 'Gitlab::Satellite::MergeAction' do | ||
| 12 | @close_commit2 = ['scss_refactoring', 'f0f14c8eaba69ebddd766498a9d0b0e79becd633'] | 12 | @close_commit2 = ['scss_refactoring', 'f0f14c8eaba69ebddd766498a9d0b0e79becd633'] |
| 13 | end | 13 | end |
| 14 | 14 | ||
| 15 | - let(:project) { create(:project_with_code) } | 15 | + let(:project) { create(:project, namespace: create(:group)) } |
| 16 | + let(:fork_project) { create(:project, namespace: create(:group)) } | ||
| 16 | let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } | 17 | let(:merge_request) { create(:merge_request, source_project: project, target_project: project) } |
| 17 | - let(:merge_request_fork) { create(:merge_request) } | 18 | + let(:merge_request_fork) { create(:merge_request, source_project: fork_project, target_project: project) } |
| 18 | 19 | ||
| 19 | describe '#commits_between' do | 20 | describe '#commits_between' do |
| 20 | def verify_commits(commits, first_commit_sha, last_commit_sha) | 21 | def verify_commits(commits, first_commit_sha, last_commit_sha) |
spec/mailers/notify_spec.rb
| @@ -5,7 +5,7 @@ describe Notify do | @@ -5,7 +5,7 @@ describe Notify do | ||
| 5 | include EmailSpec::Matchers | 5 | include EmailSpec::Matchers |
| 6 | 6 | ||
| 7 | let(:recipient) { create(:user, email: 'recipient@example.com') } | 7 | let(:recipient) { create(:user, email: 'recipient@example.com') } |
| 8 | - let(:project) { create(:project_with_code) } | 8 | + let(:project) { create(:project) } |
| 9 | 9 | ||
| 10 | shared_examples 'a multiple recipients email' do | 10 | shared_examples 'a multiple recipients email' do |
| 11 | it 'is sent to the given recipient' do | 11 | it 'is sent to the given recipient' do |
spec/models/assembla_service_spec.rb
| @@ -25,7 +25,7 @@ describe AssemblaService do | @@ -25,7 +25,7 @@ describe AssemblaService do | ||
| 25 | 25 | ||
| 26 | describe "Execute" do | 26 | describe "Execute" do |
| 27 | let(:user) { create(:user) } | 27 | let(:user) { create(:user) } |
| 28 | - let(:project) { create(:project_with_code) } | 28 | + let(:project) { create(:project) } |
| 29 | 29 | ||
| 30 | before do | 30 | before do |
| 31 | @assembla_service = AssemblaService.new | 31 | @assembla_service = AssemblaService.new |
spec/models/commit_spec.rb
| 1 | require 'spec_helper' | 1 | require 'spec_helper' |
| 2 | 2 | ||
| 3 | describe Commit do | 3 | describe Commit do |
| 4 | - let(:project) { create :project_with_code } | 4 | + let(:project) { create :project } |
| 5 | let(:commit) { project.repository.commit } | 5 | let(:commit) { project.repository.commit } |
| 6 | 6 | ||
| 7 | describe '#title' do | 7 | describe '#title' do |
spec/models/flowdock_service_spec.rb
| @@ -25,7 +25,7 @@ describe FlowdockService do | @@ -25,7 +25,7 @@ describe FlowdockService do | ||
| 25 | 25 | ||
| 26 | describe "Execute" do | 26 | describe "Execute" do |
| 27 | let(:user) { create(:user) } | 27 | let(:user) { create(:user) } |
| 28 | - let(:project) { create(:project_with_code) } | 28 | + let(:project) { create(:project) } |
| 29 | 29 | ||
| 30 | before do | 30 | before do |
| 31 | @flowdock_service = FlowdockService.new | 31 | @flowdock_service = FlowdockService.new |
spec/models/merge_request_spec.rb
| @@ -73,14 +73,13 @@ describe MergeRequest do | @@ -73,14 +73,13 @@ describe MergeRequest do | ||
| 73 | 73 | ||
| 74 | describe '#for_fork?' do | 74 | describe '#for_fork?' do |
| 75 | it 'returns true if the merge request is for a fork' do | 75 | it 'returns true if the merge request is for a fork' do |
| 76 | - subject.source_project = create(:source_project) | ||
| 77 | - subject.target_project = create(:target_project) | 76 | + subject.source_project = create(:project, namespace: create(:group)) |
| 77 | + subject.target_project = create(:project, namespace: create(:group)) | ||
| 78 | 78 | ||
| 79 | subject.for_fork?.should be_true | 79 | subject.for_fork?.should be_true |
| 80 | end | 80 | end |
| 81 | + | ||
| 81 | it 'returns false if is not for a fork' do | 82 | it 'returns false if is not for a fork' do |
| 82 | - subject.source_project = create(:source_project) | ||
| 83 | - subject.target_project = subject.source_project | ||
| 84 | subject.for_fork?.should be_false | 83 | subject.for_fork?.should be_false |
| 85 | end | 84 | end |
| 86 | end | 85 | end |
spec/models/note_spec.rb
| @@ -206,7 +206,7 @@ describe Note do | @@ -206,7 +206,7 @@ describe Note do | ||
| 206 | end | 206 | end |
| 207 | 207 | ||
| 208 | describe '#create_cross_reference_note' do | 208 | describe '#create_cross_reference_note' do |
| 209 | - let(:project) { create(:project_with_code) } | 209 | + let(:project) { create(:project) } |
| 210 | let(:author) { create(:user) } | 210 | let(:author) { create(:user) } |
| 211 | let(:issue) { create(:issue, project: project) } | 211 | let(:issue) { create(:issue, project: project) } |
| 212 | let(:mergereq) { create(:merge_request, target_project: project) } | 212 | let(:mergereq) { create(:merge_request, target_project: project) } |
spec/models/project_spec.rb
| @@ -128,7 +128,7 @@ describe Project do | @@ -128,7 +128,7 @@ describe Project do | ||
| 128 | end | 128 | end |
| 129 | 129 | ||
| 130 | describe :update_merge_requests do | 130 | describe :update_merge_requests do |
| 131 | - let(:project) { create(:project_with_code) } | 131 | + let(:project) { create(:project) } |
| 132 | 132 | ||
| 133 | before do | 133 | before do |
| 134 | @merge_request = create(:merge_request, source_project: project, target_project: project) | 134 | @merge_request = create(:merge_request, source_project: project, target_project: project) |
| @@ -136,7 +136,7 @@ describe Project do | @@ -136,7 +136,7 @@ describe Project do | ||
| 136 | end | 136 | end |
| 137 | 137 | ||
| 138 | it "should close merge request if last commit from source branch was pushed to target branch" do | 138 | it "should close merge request if last commit from source branch was pushed to target branch" do |
| 139 | - @merge_request.reloaded_commits | 139 | + @merge_request.reload_code |
| 140 | @merge_request.last_commit.id.should == "b1e6a9dbf1c85e6616497a5e7bad9143a4bd0828" | 140 | @merge_request.last_commit.id.should == "b1e6a9dbf1c85e6616497a5e7bad9143a4bd0828" |
| 141 | project.update_merge_requests("8716fc78f3c65bbf7bcf7b574febd583bc5d2812", "b1e6a9dbf1c85e6616497a5e7bad9143a4bd0828", "refs/heads/stable", @key.user) | 141 | project.update_merge_requests("8716fc78f3c65bbf7bcf7b574febd583bc5d2812", "b1e6a9dbf1c85e6616497a5e7bad9143a4bd0828", "refs/heads/stable", @key.user) |
| 142 | @merge_request.reload | 142 | @merge_request.reload |
| @@ -144,7 +144,6 @@ describe Project do | @@ -144,7 +144,6 @@ describe Project do | ||
| 144 | end | 144 | end |
| 145 | 145 | ||
| 146 | it "should update merge request commits with new one if pushed to source branch" do | 146 | it "should update merge request commits with new one if pushed to source branch" do |
| 147 | - @merge_request.last_commit.should == nil | ||
| 148 | project.update_merge_requests("8716fc78f3c65bbf7bcf7b574febd583bc5d2812", "b1e6a9dbf1c85e6616497a5e7bad9143a4bd0828", "refs/heads/master", @key.user) | 147 | project.update_merge_requests("8716fc78f3c65bbf7bcf7b574febd583bc5d2812", "b1e6a9dbf1c85e6616497a5e7bad9143a4bd0828", "refs/heads/master", @key.user) |
| 149 | @merge_request.reload | 148 | @merge_request.reload |
| 150 | @merge_request.last_commit.id.should == "b1e6a9dbf1c85e6616497a5e7bad9143a4bd0828" | 149 | @merge_request.last_commit.id.should == "b1e6a9dbf1c85e6616497a5e7bad9143a4bd0828" |
| @@ -156,10 +155,10 @@ describe Project do | @@ -156,10 +155,10 @@ describe Project do | ||
| 156 | context 'with namespace' do | 155 | context 'with namespace' do |
| 157 | before do | 156 | before do |
| 158 | @group = create :group, name: 'gitlab' | 157 | @group = create :group, name: 'gitlab' |
| 159 | - @project = create(:project, name: 'gitlab-ci', namespace: @group) | 158 | + @project = create(:project, name: 'gitlabhq', namespace: @group) |
| 160 | end | 159 | end |
| 161 | 160 | ||
| 162 | - it { Project.find_with_namespace('gitlab/gitlab-ci').should == @project } | 161 | + it { Project.find_with_namespace('gitlab/gitlabhq').should == @project } |
| 163 | it { Project.find_with_namespace('gitlab-ci').should be_nil } | 162 | it { Project.find_with_namespace('gitlab-ci').should be_nil } |
| 164 | end | 163 | end |
| 165 | end | 164 | end |
| @@ -168,10 +167,10 @@ describe Project do | @@ -168,10 +167,10 @@ describe Project do | ||
| 168 | context 'with namespace' do | 167 | context 'with namespace' do |
| 169 | before do | 168 | before do |
| 170 | @group = create :group, name: 'gitlab' | 169 | @group = create :group, name: 'gitlab' |
| 171 | - @project = create(:project, name: 'gitlab-ci', namespace: @group) | 170 | + @project = create(:project, name: 'gitlabhq', namespace: @group) |
| 172 | end | 171 | end |
| 173 | 172 | ||
| 174 | - it { @project.to_param.should == "gitlab/gitlab-ci" } | 173 | + it { @project.to_param.should == "gitlab/gitlabhq" } |
| 175 | end | 174 | end |
| 176 | end | 175 | end |
| 177 | 176 | ||
| @@ -237,7 +236,7 @@ describe Project do | @@ -237,7 +236,7 @@ describe Project do | ||
| 237 | end | 236 | end |
| 238 | 237 | ||
| 239 | describe :open_branches do | 238 | describe :open_branches do |
| 240 | - let(:project) { create(:project_with_code) } | 239 | + let(:project) { create(:project) } |
| 241 | 240 | ||
| 242 | before do | 241 | before do |
| 243 | project.protected_branches.create(name: 'master') | 242 | project.protected_branches.create(name: 'master') |
spec/models/service_spec.rb
| @@ -44,12 +44,12 @@ describe Service do | @@ -44,12 +44,12 @@ describe Service do | ||
| 44 | end | 44 | end |
| 45 | 45 | ||
| 46 | describe :can_test do | 46 | describe :can_test do |
| 47 | - it { @testable.should == false } | 47 | + it { @testable.should == true } |
| 48 | end | 48 | end |
| 49 | end | 49 | end |
| 50 | 50 | ||
| 51 | describe "With commits" do | 51 | describe "With commits" do |
| 52 | - let (:project) { create :project_with_code } | 52 | + let (:project) { create :project } |
| 53 | 53 | ||
| 54 | before do | 54 | before do |
| 55 | @service.stub( | 55 | @service.stub( |
spec/observers/merge_request_observer_spec.rb
| @@ -4,16 +4,17 @@ describe MergeRequestObserver do | @@ -4,16 +4,17 @@ describe MergeRequestObserver do | ||
| 4 | let(:some_user) { create :user } | 4 | let(:some_user) { create :user } |
| 5 | let(:assignee) { create :user } | 5 | let(:assignee) { create :user } |
| 6 | let(:author) { create :user } | 6 | let(:author) { create :user } |
| 7 | + let(:project) { create :project } | ||
| 7 | let(:mr_mock) { double(:merge_request, id: 42, assignee: assignee, author: author).as_null_object } | 8 | let(:mr_mock) { double(:merge_request, id: 42, assignee: assignee, author: author).as_null_object } |
| 8 | - let(:assigned_mr) { create(:merge_request, assignee: assignee, author: author, target_project: create(:project)) } | ||
| 9 | - let(:unassigned_mr) { create(:merge_request, author: author, target_project: create(:project)) } | ||
| 10 | - let(:closed_assigned_mr) { create(:closed_merge_request, assignee: assignee, author: author, target_project: create(:project)) } | ||
| 11 | - let(:closed_unassigned_mr) { create(:closed_merge_request, author: author, target_project: create(:project)) } | 9 | + let(:assigned_mr) { create(:merge_request, assignee: assignee, author: author, source_project: project) } |
| 10 | + let(:unassigned_mr) { create(:merge_request, author: author, source_project: project) } | ||
| 11 | + let(:closed_assigned_mr) { create(:closed_merge_request, assignee: assignee, author: author, source_project: project) } | ||
| 12 | + let(:closed_unassigned_mr) { create(:closed_merge_request, author: author, source_project: project) } | ||
| 12 | 13 | ||
| 13 | before { subject.stub(:current_user).and_return(some_user) } | 14 | before { subject.stub(:current_user).and_return(some_user) } |
| 14 | before { subject.stub(notification: double('NotificationService').as_null_object) } | 15 | before { subject.stub(notification: double('NotificationService').as_null_object) } |
| 15 | before { mr_mock.stub(:author_id) } | 16 | before { mr_mock.stub(:author_id) } |
| 16 | - before { mr_mock.stub(:target_project) } | 17 | + before { mr_mock.stub(:source_project) } |
| 17 | before { mr_mock.stub(:source_project) } | 18 | before { mr_mock.stub(:source_project) } |
| 18 | before { mr_mock.stub(:project) } | 19 | before { mr_mock.stub(:project) } |
| 19 | before { mr_mock.stub(:create_cross_references!).and_return(true) } | 20 | before { mr_mock.stub(:create_cross_references!).and_return(true) } |
| @@ -46,7 +47,7 @@ describe MergeRequestObserver do | @@ -46,7 +47,7 @@ describe MergeRequestObserver do | ||
| 46 | end | 47 | end |
| 47 | 48 | ||
| 48 | it 'is called when a merge request is changed' do | 49 | it 'is called when a merge request is changed' do |
| 49 | - changed = create(:merge_request, source_project: create(:project)) | 50 | + changed = create(:merge_request, source_project: project) |
| 50 | subject.should_receive(:after_update) | 51 | subject.should_receive(:after_update) |
| 51 | 52 | ||
| 52 | MergeRequest.observers.enable :merge_request_observer do | 53 | MergeRequest.observers.enable :merge_request_observer do |
| @@ -81,13 +82,13 @@ describe MergeRequestObserver do | @@ -81,13 +82,13 @@ describe MergeRequestObserver do | ||
| 81 | context '#after_close' do | 82 | context '#after_close' do |
| 82 | context 'a status "closed"' do | 83 | context 'a status "closed"' do |
| 83 | it 'note is created if the merge request is being closed' do | 84 | it 'note is created if the merge request is being closed' do |
| 84 | - Note.should_receive(:create_status_change_note).with(assigned_mr, assigned_mr.target_project, some_user, 'closed', nil) | 85 | + Note.should_receive(:create_status_change_note).with(assigned_mr, assigned_mr.source_project, some_user, 'closed', nil) |
| 85 | 86 | ||
| 86 | assigned_mr.close | 87 | assigned_mr.close |
| 87 | end | 88 | end |
| 88 | 89 | ||
| 89 | it 'notification is delivered only to author if the merge request is being closed' do | 90 | it 'notification is delivered only to author if the merge request is being closed' do |
| 90 | - Note.should_receive(:create_status_change_note).with(unassigned_mr, unassigned_mr.target_project, some_user, 'closed', nil) | 91 | + Note.should_receive(:create_status_change_note).with(unassigned_mr, unassigned_mr.source_project, some_user, 'closed', nil) |
| 91 | 92 | ||
| 92 | unassigned_mr.close | 93 | unassigned_mr.close |
| 93 | end | 94 | end |
| @@ -97,13 +98,13 @@ describe MergeRequestObserver do | @@ -97,13 +98,13 @@ describe MergeRequestObserver do | ||
| 97 | context '#after_reopen' do | 98 | context '#after_reopen' do |
| 98 | context 'a status "reopened"' do | 99 | context 'a status "reopened"' do |
| 99 | it 'note is created if the merge request is being reopened' do | 100 | it 'note is created if the merge request is being reopened' do |
| 100 | - Note.should_receive(:create_status_change_note).with(closed_assigned_mr, closed_assigned_mr.target_project, some_user, 'reopened', nil) | 101 | + Note.should_receive(:create_status_change_note).with(closed_assigned_mr, closed_assigned_mr.source_project, some_user, 'reopened', nil) |
| 101 | 102 | ||
| 102 | closed_assigned_mr.reopen | 103 | closed_assigned_mr.reopen |
| 103 | end | 104 | end |
| 104 | 105 | ||
| 105 | it 'notification is delivered only to author if the merge request is being reopened' do | 106 | it 'notification is delivered only to author if the merge request is being reopened' do |
| 106 | - Note.should_receive(:create_status_change_note).with(closed_unassigned_mr, closed_unassigned_mr.target_project, some_user, 'reopened', nil) | 107 | + Note.should_receive(:create_status_change_note).with(closed_unassigned_mr, closed_unassigned_mr.source_project, some_user, 'reopened', nil) |
| 107 | 108 | ||
| 108 | closed_unassigned_mr.reopen | 109 | closed_unassigned_mr.reopen |
| 109 | end | 110 | end |
| @@ -118,20 +119,13 @@ describe MergeRequestObserver do | @@ -118,20 +119,13 @@ describe MergeRequestObserver do | ||
| 118 | it { @event.project.should == project } | 119 | it { @event.project.should == project } |
| 119 | end | 120 | end |
| 120 | 121 | ||
| 121 | - let(:project) { create(:project) } | ||
| 122 | before do | 122 | before do |
| 123 | - TestEnv.enable_observers | ||
| 124 | - @merge_request = create(:merge_request, source_project: project, target_project: project) | 123 | + @merge_request = create(:merge_request, source_project: project, source_project: project) |
| 125 | @event = Event.last | 124 | @event = Event.last |
| 126 | end | 125 | end |
| 127 | 126 | ||
| 128 | - after do | ||
| 129 | - TestEnv.disable_observers | ||
| 130 | - end | ||
| 131 | - | ||
| 132 | it_should_be_valid_event | 127 | it_should_be_valid_event |
| 133 | it { @event.action.should == Event::CREATED } | 128 | it { @event.action.should == Event::CREATED } |
| 134 | it { @event.target.should == @merge_request } | 129 | it { @event.target.should == @merge_request } |
| 135 | end | 130 | end |
| 136 | - | ||
| 137 | end | 131 | end |
spec/requests/api/files_spec.rb
| @@ -6,7 +6,7 @@ describe API::API do | @@ -6,7 +6,7 @@ describe API::API do | ||
| 6 | after(:each) { ActiveRecord::Base.observers.disable(:user_observer) } | 6 | after(:each) { ActiveRecord::Base.observers.disable(:user_observer) } |
| 7 | 7 | ||
| 8 | let(:user) { create(:user) } | 8 | let(:user) { create(:user) } |
| 9 | - let!(:project) { create(:project_with_code, namespace: user.namespace ) } | 9 | + let!(:project) { create(:project, namespace: user.namespace ) } |
| 10 | before { project.team << [user, :developer] } | 10 | before { project.team << [user, :developer] } |
| 11 | 11 | ||
| 12 | describe "POST /projects/:id/repository/files" do | 12 | describe "POST /projects/:id/repository/files" do |
spec/requests/api/merge_requests_spec.rb
| @@ -5,7 +5,7 @@ describe API::API do | @@ -5,7 +5,7 @@ describe API::API do | ||
| 5 | before(:each) { ActiveRecord::Base.observers.enable(:user_observer) } | 5 | before(:each) { ActiveRecord::Base.observers.enable(:user_observer) } |
| 6 | after(:each) { ActiveRecord::Base.observers.disable(:user_observer) } | 6 | after(:each) { ActiveRecord::Base.observers.disable(:user_observer) } |
| 7 | let(:user) { create(:user) } | 7 | let(:user) { create(:user) } |
| 8 | - let!(:project) {create(:project_with_code, creator_id: user.id, namespace: user.namespace) } | 8 | + let!(:project) {create(:project, creator_id: user.id, namespace: user.namespace) } |
| 9 | let!(:merge_request) { create(:merge_request, author: user, assignee: user, source_project: project, target_project: project, title: "Test") } | 9 | let!(:merge_request) { create(:merge_request, author: user, assignee: user, source_project: project, target_project: project, title: "Test") } |
| 10 | before { | 10 | before { |
| 11 | project.team << [user, :reporters] | 11 | project.team << [user, :reporters] |
| @@ -47,32 +47,32 @@ describe API::API do | @@ -47,32 +47,32 @@ describe API::API do | ||
| 47 | context 'between branches projects' do | 47 | context 'between branches projects' do |
| 48 | it "should return merge_request" do | 48 | it "should return merge_request" do |
| 49 | post api("/projects/#{project.id}/merge_requests", user), | 49 | post api("/projects/#{project.id}/merge_requests", user), |
| 50 | - title: 'Test merge_request', source_branch: "stable", target_branch: "master", author: user | 50 | + title: 'Test merge_request', source_branch: "stable", target_branch: "master", author: user |
| 51 | response.status.should == 201 | 51 | response.status.should == 201 |
| 52 | json_response['title'].should == 'Test merge_request' | 52 | json_response['title'].should == 'Test merge_request' |
| 53 | end | 53 | end |
| 54 | 54 | ||
| 55 | it "should return 422 when source_branch equals target_branch" do | 55 | it "should return 422 when source_branch equals target_branch" do |
| 56 | post api("/projects/#{project.id}/merge_requests", user), | 56 | post api("/projects/#{project.id}/merge_requests", user), |
| 57 | - title: "Test merge_request", source_branch: "master", target_branch: "master", author: user | 57 | + title: "Test merge_request", source_branch: "master", target_branch: "master", author: user |
| 58 | response.status.should == 422 | 58 | response.status.should == 422 |
| 59 | end | 59 | end |
| 60 | 60 | ||
| 61 | it "should return 400 when source_branch is missing" do | 61 | it "should return 400 when source_branch is missing" do |
| 62 | post api("/projects/#{project.id}/merge_requests", user), | 62 | post api("/projects/#{project.id}/merge_requests", user), |
| 63 | - title: "Test merge_request", target_branch: "master", author: user | 63 | + title: "Test merge_request", target_branch: "master", author: user |
| 64 | response.status.should == 400 | 64 | response.status.should == 400 |
| 65 | end | 65 | end |
| 66 | 66 | ||
| 67 | it "should return 400 when target_branch is missing" do | 67 | it "should return 400 when target_branch is missing" do |
| 68 | post api("/projects/#{project.id}/merge_requests", user), | 68 | post api("/projects/#{project.id}/merge_requests", user), |
| 69 | - title: "Test merge_request", source_branch: "stable", author: user | 69 | + title: "Test merge_request", source_branch: "stable", author: user |
| 70 | response.status.should == 400 | 70 | response.status.should == 400 |
| 71 | end | 71 | end |
| 72 | 72 | ||
| 73 | it "should return 400 when title is missing" do | 73 | it "should return 400 when title is missing" do |
| 74 | post api("/projects/#{project.id}/merge_requests", user), | 74 | post api("/projects/#{project.id}/merge_requests", user), |
| 75 | - target_branch: 'master', source_branch: 'stable' | 75 | + target_branch: 'master', source_branch: 'stable' |
| 76 | response.status.should == 400 | 76 | response.status.should == 400 |
| 77 | end | 77 | end |
| 78 | end | 78 | end |
| @@ -80,8 +80,8 @@ describe API::API do | @@ -80,8 +80,8 @@ describe API::API do | ||
| 80 | context 'forked projects' do | 80 | context 'forked projects' do |
| 81 | let!(:user2) {create(:user)} | 81 | let!(:user2) {create(:user)} |
| 82 | let!(:forked_project_link) { build(:forked_project_link) } | 82 | let!(:forked_project_link) { build(:forked_project_link) } |
| 83 | - let!(:fork_project) { create(:source_project_with_code, forked_project_link: forked_project_link, namespace: user2.namespace, creator_id: user2.id) } | ||
| 84 | - let!(:unrelated_project) { create(:target_project_with_code, namespace: user2.namespace, creator_id: user2.id) } | 83 | + let!(:fork_project) { create(:project, forked_project_link: forked_project_link, namespace: user2.namespace, creator_id: user2.id) } |
| 84 | + let!(:unrelated_project) { create(:project, namespace: create(:user).namespace, creator_id: user2.id) } | ||
| 85 | 85 | ||
| 86 | before :each do |each| | 86 | before :each do |each| |
| 87 | fork_project.team << [user2, :reporters] | 87 | fork_project.team << [user2, :reporters] |
| @@ -92,7 +92,7 @@ describe API::API do | @@ -92,7 +92,7 @@ describe API::API do | ||
| 92 | 92 | ||
| 93 | it "should return merge_request" do | 93 | it "should return merge_request" do |
| 94 | post api("/projects/#{fork_project.id}/merge_requests", user2), | 94 | post api("/projects/#{fork_project.id}/merge_requests", user2), |
| 95 | - title: 'Test merge_request', source_branch: "stable", target_branch: "master", author: user2, target_project_id: project.id | 95 | + title: 'Test merge_request', source_branch: "stable", target_branch: "master", author: user2, target_project_id: project.id |
| 96 | response.status.should == 201 | 96 | response.status.should == 201 |
| 97 | json_response['title'].should == 'Test merge_request' | 97 | json_response['title'].should == 'Test merge_request' |
| 98 | end | 98 | end |
| @@ -102,44 +102,44 @@ describe API::API do | @@ -102,44 +102,44 @@ describe API::API do | ||
| 102 | fork_project.forked?.should be_true | 102 | fork_project.forked?.should be_true |
| 103 | fork_project.forked_from_project.should == project | 103 | fork_project.forked_from_project.should == project |
| 104 | post api("/projects/#{fork_project.id}/merge_requests", user2), | 104 | post api("/projects/#{fork_project.id}/merge_requests", user2), |
| 105 | - title: 'Test merge_request', source_branch: "master", target_branch: "master", author: user2, target_project_id: project.id | 105 | + title: 'Test merge_request', source_branch: "master", target_branch: "master", author: user2, target_project_id: project.id |
| 106 | response.status.should == 201 | 106 | response.status.should == 201 |
| 107 | json_response['title'].should == 'Test merge_request' | 107 | json_response['title'].should == 'Test merge_request' |
| 108 | end | 108 | end |
| 109 | 109 | ||
| 110 | it "should return 400 when source_branch is missing" do | 110 | it "should return 400 when source_branch is missing" do |
| 111 | post api("/projects/#{fork_project.id}/merge_requests", user2), | 111 | post api("/projects/#{fork_project.id}/merge_requests", user2), |
| 112 | - title: 'Test merge_request', target_branch: "master", author: user2, target_project_id: project.id | 112 | + title: 'Test merge_request', target_branch: "master", author: user2, target_project_id: project.id |
| 113 | response.status.should == 400 | 113 | response.status.should == 400 |
| 114 | end | 114 | end |
| 115 | 115 | ||
| 116 | it "should return 400 when target_branch is missing" do | 116 | it "should return 400 when target_branch is missing" do |
| 117 | post api("/projects/#{fork_project.id}/merge_requests", user2), | 117 | post api("/projects/#{fork_project.id}/merge_requests", user2), |
| 118 | - title: 'Test merge_request', target_branch: "master", author: user2, target_project_id: project.id | 118 | + title: 'Test merge_request', target_branch: "master", author: user2, target_project_id: project.id |
| 119 | response.status.should == 400 | 119 | response.status.should == 400 |
| 120 | end | 120 | end |
| 121 | 121 | ||
| 122 | it "should return 400 when title is missing" do | 122 | it "should return 400 when title is missing" do |
| 123 | post api("/projects/#{fork_project.id}/merge_requests", user2), | 123 | post api("/projects/#{fork_project.id}/merge_requests", user2), |
| 124 | - target_branch: 'master', source_branch: 'stable', author: user2, target_project_id: project.id | 124 | + target_branch: 'master', source_branch: 'stable', author: user2, target_project_id: project.id |
| 125 | response.status.should == 400 | 125 | response.status.should == 400 |
| 126 | end | 126 | end |
| 127 | 127 | ||
| 128 | it "should return 400 when target_branch is specified and not a forked project" do | 128 | it "should return 400 when target_branch is specified and not a forked project" do |
| 129 | post api("/projects/#{project.id}/merge_requests", user), | 129 | post api("/projects/#{project.id}/merge_requests", user), |
| 130 | - title: 'Test merge_request', target_branch: 'master', source_branch: 'stable', author: user, target_project_id: fork_project.id | 130 | + title: 'Test merge_request', target_branch: 'master', source_branch: 'stable', author: user, target_project_id: fork_project.id |
| 131 | response.status.should == 400 | 131 | response.status.should == 400 |
| 132 | end | 132 | end |
| 133 | 133 | ||
| 134 | it "should return 400 when target_branch is specified and for a different fork" do | 134 | it "should return 400 when target_branch is specified and for a different fork" do |
| 135 | post api("/projects/#{fork_project.id}/merge_requests", user2), | 135 | post api("/projects/#{fork_project.id}/merge_requests", user2), |
| 136 | - title: 'Test merge_request', target_branch: 'master', source_branch: 'stable', author: user2, target_project_id: unrelated_project.id | 136 | + title: 'Test merge_request', target_branch: 'master', source_branch: 'stable', author: user2, target_project_id: unrelated_project.id |
| 137 | response.status.should == 400 | 137 | response.status.should == 400 |
| 138 | end | 138 | end |
| 139 | 139 | ||
| 140 | it "should return 201 when target_branch is specified and for the same project" do | 140 | it "should return 201 when target_branch is specified and for the same project" do |
| 141 | post api("/projects/#{fork_project.id}/merge_requests", user2), | 141 | post api("/projects/#{fork_project.id}/merge_requests", user2), |
| 142 | - title: 'Test merge_request', target_branch: 'master', source_branch: 'stable', author: user2, target_project_id: fork_project.id | 142 | + title: 'Test merge_request', target_branch: 'master', source_branch: 'stable', author: user2, target_project_id: fork_project.id |
| 143 | response.status.should == 201 | 143 | response.status.should == 201 |
| 144 | end | 144 | end |
| 145 | end | 145 | end |
| @@ -170,7 +170,7 @@ describe API::API do | @@ -170,7 +170,7 @@ describe API::API do | ||
| 170 | 170 | ||
| 171 | it "should return 422 when source_branch and target_branch are renamed the same" do | 171 | it "should return 422 when source_branch and target_branch are renamed the same" do |
| 172 | put api("/projects/#{project.id}/merge_request/#{merge_request.id}", user), | 172 | put api("/projects/#{project.id}/merge_request/#{merge_request.id}", user), |
| 173 | - source_branch: "master", target_branch: "master" | 173 | + source_branch: "master", target_branch: "master" |
| 174 | response.status.should == 422 | 174 | response.status.should == 422 |
| 175 | end | 175 | end |
| 176 | 176 | ||
| @@ -198,5 +198,4 @@ describe API::API do | @@ -198,5 +198,4 @@ describe API::API do | ||
| 198 | response.status.should == 404 | 198 | response.status.should == 404 |
| 199 | end | 199 | end |
| 200 | end | 200 | end |
| 201 | - | ||
| 202 | end | 201 | end |
spec/requests/api/project_hooks_spec.rb
| @@ -7,7 +7,7 @@ describe API::API, 'ProjectHooks' do | @@ -7,7 +7,7 @@ describe API::API, 'ProjectHooks' do | ||
| 7 | 7 | ||
| 8 | let(:user) { create(:user) } | 8 | let(:user) { create(:user) } |
| 9 | let(:user3) { create(:user) } | 9 | let(:user3) { create(:user) } |
| 10 | - let!(:project) { create(:project_with_code, creator_id: user.id, namespace: user.namespace) } | 10 | + let!(:project) { create(:project, creator_id: user.id, namespace: user.namespace) } |
| 11 | let!(:hook) { create(:project_hook, project: project, url: "http://example.com") } | 11 | let!(:hook) { create(:project_hook, project: project, url: "http://example.com") } |
| 12 | 12 | ||
| 13 | before do | 13 | before do |
spec/requests/api/projects_spec.rb
| @@ -9,14 +9,14 @@ describe API::API do | @@ -9,14 +9,14 @@ describe API::API do | ||
| 9 | let(:user2) { create(:user) } | 9 | let(:user2) { create(:user) } |
| 10 | let(:user3) { create(:user) } | 10 | let(:user3) { create(:user) } |
| 11 | let(:admin) { create(:admin) } | 11 | let(:admin) { create(:admin) } |
| 12 | - let!(:project) { create(:project_with_code, creator_id: user.id, namespace: user.namespace) } | ||
| 13 | - let!(:snippet) { create(:project_snippet, author: user, project: project, title: 'example') } | ||
| 14 | - let!(:users_project) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) } | ||
| 15 | - let!(:users_project2) { create(:users_project, user: user3, project: project, project_access: UsersProject::DEVELOPER) } | ||
| 16 | - | ||
| 17 | - before { project.team << [user, :reporter] } | 12 | + let(:project) { create(:project, creator_id: user.id, namespace: user.namespace) } |
| 13 | + let(:snippet) { create(:project_snippet, author: user, project: project, title: 'example') } | ||
| 14 | + let(:users_project) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) } | ||
| 15 | + let(:users_project2) { create(:users_project, user: user3, project: project, project_access: UsersProject::DEVELOPER) } | ||
| 18 | 16 | ||
| 19 | describe "GET /projects" do | 17 | describe "GET /projects" do |
| 18 | + before { project } | ||
| 19 | + | ||
| 20 | context "when unauthenticated" do | 20 | context "when unauthenticated" do |
| 21 | it "should return authentication error" do | 21 | it "should return authentication error" do |
| 22 | get api("/projects") | 22 | get api("/projects") |
| @@ -36,6 +36,8 @@ describe API::API do | @@ -36,6 +36,8 @@ describe API::API do | ||
| 36 | end | 36 | end |
| 37 | 37 | ||
| 38 | describe "GET /projects/all" do | 38 | describe "GET /projects/all" do |
| 39 | + before { project } | ||
| 40 | + | ||
| 39 | context "when unauthenticated" do | 41 | context "when unauthenticated" do |
| 40 | it "should return authentication error" do | 42 | it "should return authentication error" do |
| 41 | get api("/projects/all") | 43 | get api("/projects/all") |
| @@ -174,6 +176,7 @@ describe API::API do | @@ -174,6 +176,7 @@ describe API::API do | ||
| 174 | end | 176 | end |
| 175 | 177 | ||
| 176 | describe "POST /projects/user/:id" do | 178 | describe "POST /projects/user/:id" do |
| 179 | + before { project } | ||
| 177 | before { admin } | 180 | before { admin } |
| 178 | 181 | ||
| 179 | it "should create new project without path" do | 182 | it "should create new project without path" do |
| @@ -255,6 +258,8 @@ describe API::API do | @@ -255,6 +258,8 @@ describe API::API do | ||
| 255 | end | 258 | end |
| 256 | 259 | ||
| 257 | describe "GET /projects/:id" do | 260 | describe "GET /projects/:id" do |
| 261 | + before { project } | ||
| 262 | + | ||
| 258 | it "should return a project by id" do | 263 | it "should return a project by id" do |
| 259 | get api("/projects/#{project.id}", user) | 264 | get api("/projects/#{project.id}", user) |
| 260 | response.status.should == 200 | 265 | response.status.should == 200 |
| @@ -282,6 +287,8 @@ describe API::API do | @@ -282,6 +287,8 @@ describe API::API do | ||
| 282 | end | 287 | end |
| 283 | 288 | ||
| 284 | describe "GET /projects/:id/events" do | 289 | describe "GET /projects/:id/events" do |
| 290 | + before { users_project } | ||
| 291 | + | ||
| 285 | it "should return a project events" do | 292 | it "should return a project events" do |
| 286 | get api("/projects/#{project.id}/events", user) | 293 | get api("/projects/#{project.id}/events", user) |
| 287 | response.status.should == 200 | 294 | response.status.should == 200 |
| @@ -305,6 +312,9 @@ describe API::API do | @@ -305,6 +312,9 @@ describe API::API do | ||
| 305 | end | 312 | end |
| 306 | 313 | ||
| 307 | describe "GET /projects/:id/members" do | 314 | describe "GET /projects/:id/members" do |
| 315 | + before { users_project } | ||
| 316 | + before { users_project2 } | ||
| 317 | + | ||
| 308 | it "should return project team members" do | 318 | it "should return project team members" do |
| 309 | get api("/projects/#{project.id}/members", user) | 319 | get api("/projects/#{project.id}/members", user) |
| 310 | response.status.should == 200 | 320 | response.status.should == 200 |
| @@ -328,6 +338,8 @@ describe API::API do | @@ -328,6 +338,8 @@ describe API::API do | ||
| 328 | end | 338 | end |
| 329 | 339 | ||
| 330 | describe "GET /projects/:id/members/:user_id" do | 340 | describe "GET /projects/:id/members/:user_id" do |
| 341 | + before { users_project } | ||
| 342 | + | ||
| 331 | it "should return project team member" do | 343 | it "should return project team member" do |
| 332 | get api("/projects/#{project.id}/members/#{user.id}", user) | 344 | get api("/projects/#{project.id}/members/#{user.id}", user) |
| 333 | response.status.should == 200 | 345 | response.status.should == 200 |
| @@ -383,6 +395,8 @@ describe API::API do | @@ -383,6 +395,8 @@ describe API::API do | ||
| 383 | end | 395 | end |
| 384 | 396 | ||
| 385 | describe "PUT /projects/:id/members/:user_id" do | 397 | describe "PUT /projects/:id/members/:user_id" do |
| 398 | + before { users_project2 } | ||
| 399 | + | ||
| 386 | it "should update project team member" do | 400 | it "should update project team member" do |
| 387 | put api("/projects/#{project.id}/members/#{user3.id}", user), access_level: UsersProject::MASTER | 401 | put api("/projects/#{project.id}/members/#{user3.id}", user), access_level: UsersProject::MASTER |
| 388 | response.status.should == 200 | 402 | response.status.should == 200 |
| @@ -407,6 +421,9 @@ describe API::API do | @@ -407,6 +421,9 @@ describe API::API do | ||
| 407 | end | 421 | end |
| 408 | 422 | ||
| 409 | describe "DELETE /projects/:id/members/:user_id" do | 423 | describe "DELETE /projects/:id/members/:user_id" do |
| 424 | + before { users_project } | ||
| 425 | + before { users_project2 } | ||
| 426 | + | ||
| 410 | it "should remove user from project team" do | 427 | it "should remove user from project team" do |
| 411 | expect { | 428 | expect { |
| 412 | delete api("/projects/#{project.id}/members/#{user3.id}", user) | 429 | delete api("/projects/#{project.id}/members/#{user3.id}", user) |
| @@ -425,9 +442,7 @@ describe API::API do | @@ -425,9 +442,7 @@ describe API::API do | ||
| 425 | delete api("/projects/#{project.id}/members/#{user3.id}", user) | 442 | delete api("/projects/#{project.id}/members/#{user3.id}", user) |
| 426 | response.status.should == 200 | 443 | response.status.should == 200 |
| 427 | end | 444 | end |
| 428 | - end | ||
| 429 | 445 | ||
| 430 | - describe "DELETE /projects/:id/members/:user_id" do | ||
| 431 | it "should return 200 OK when the user was not member" do | 446 | it "should return 200 OK when the user was not member" do |
| 432 | expect { | 447 | expect { |
| 433 | delete api("/projects/#{project.id}/members/1000000", user) | 448 | delete api("/projects/#{project.id}/members/1000000", user) |
| @@ -439,6 +454,8 @@ describe API::API do | @@ -439,6 +454,8 @@ describe API::API do | ||
| 439 | end | 454 | end |
| 440 | 455 | ||
| 441 | describe "GET /projects/:id/snippets" do | 456 | describe "GET /projects/:id/snippets" do |
| 457 | + before { snippet } | ||
| 458 | + | ||
| 442 | it "should return an array of project snippets" do | 459 | it "should return an array of project snippets" do |
| 443 | get api("/projects/#{project.id}/snippets", user) | 460 | get api("/projects/#{project.id}/snippets", user) |
| 444 | response.status.should == 200 | 461 | response.status.should == 200 |
| @@ -505,6 +522,8 @@ describe API::API do | @@ -505,6 +522,8 @@ describe API::API do | ||
| 505 | end | 522 | end |
| 506 | 523 | ||
| 507 | describe "DELETE /projects/:id/snippets/:snippet_id" do | 524 | describe "DELETE /projects/:id/snippets/:snippet_id" do |
| 525 | + before { snippet } | ||
| 526 | + | ||
| 508 | it "should delete existing project snippet" do | 527 | it "should delete existing project snippet" do |
| 509 | expect { | 528 | expect { |
| 510 | delete api("/projects/#{project.id}/snippets/#{snippet.id}", user) | 529 | delete api("/projects/#{project.id}/snippets/#{snippet.id}", user) |
| @@ -657,15 +676,15 @@ describe API::API do | @@ -657,15 +676,15 @@ describe API::API do | ||
| 657 | 676 | ||
| 658 | describe "GET /projects/search/:query" do | 677 | describe "GET /projects/search/:query" do |
| 659 | let!(:query) { 'query'} | 678 | let!(:query) { 'query'} |
| 660 | - let!(:search) { create(:project, name: query, creator_id: user.id, namespace: user.namespace) } | ||
| 661 | - let!(:pre) { create(:project, name: "pre_#{query}", creator_id: user.id, namespace: user.namespace) } | ||
| 662 | - let!(:post) { create(:project, name: "#{query}_post", creator_id: user.id, namespace: user.namespace) } | ||
| 663 | - let!(:pre_post) { create(:project, name: "pre_#{query}_post", creator_id: user.id, namespace: user.namespace) } | ||
| 664 | - let!(:unfound) { create(:project, name: 'unfound', creator_id: user.id, namespace: user.namespace) } | ||
| 665 | - let!(:internal) { create(:project, name: "internal #{query}", visibility_level: Gitlab::VisibilityLevel::INTERNAL) } | ||
| 666 | - let!(:unfound_internal) { create(:project, name: 'unfound internal', visibility_level: Gitlab::VisibilityLevel::INTERNAL) } | ||
| 667 | - let!(:public) { create(:project, name: "public #{query}", visibility_level: Gitlab::VisibilityLevel::PUBLIC) } | ||
| 668 | - let!(:unfound_public) { create(:project, name: 'unfound public', visibility_level: Gitlab::VisibilityLevel::PUBLIC) } | 679 | + let!(:search) { create(:empty_project, name: query, creator_id: user.id, namespace: user.namespace) } |
| 680 | + let!(:pre) { create(:empty_project, name: "pre_#{query}", creator_id: user.id, namespace: user.namespace) } | ||
| 681 | + let!(:post) { create(:empty_project, name: "#{query}_post", creator_id: user.id, namespace: user.namespace) } | ||
| 682 | + let!(:pre_post) { create(:empty_project, name: "pre_#{query}_post", creator_id: user.id, namespace: user.namespace) } | ||
| 683 | + let!(:unfound) { create(:empty_project, name: 'unfound', creator_id: user.id, namespace: user.namespace) } | ||
| 684 | + let!(:internal) { create(:empty_project, name: "internal #{query}", visibility_level: Gitlab::VisibilityLevel::INTERNAL) } | ||
| 685 | + let!(:unfound_internal) { create(:empty_project, name: 'unfound internal', visibility_level: Gitlab::VisibilityLevel::INTERNAL) } | ||
| 686 | + let!(:public) { create(:empty_project, name: "public #{query}", visibility_level: Gitlab::VisibilityLevel::PUBLIC) } | ||
| 687 | + let!(:unfound_public) { create(:empty_project, name: 'unfound public', visibility_level: Gitlab::VisibilityLevel::PUBLIC) } | ||
| 669 | 688 | ||
| 670 | context "when unauthenticated" do | 689 | context "when unauthenticated" do |
| 671 | it "should return authentication error" do | 690 | it "should return authentication error" do |
spec/requests/api/repositories_spec.rb
| @@ -8,7 +8,7 @@ describe API::API do | @@ -8,7 +8,7 @@ describe API::API do | ||
| 8 | 8 | ||
| 9 | let(:user) { create(:user) } | 9 | let(:user) { create(:user) } |
| 10 | let(:user2) { create(:user) } | 10 | let(:user2) { create(:user) } |
| 11 | - let!(:project) { create(:project_with_code, creator_id: user.id) } | 11 | + let!(:project) { create(:project, creator_id: user.id) } |
| 12 | let!(:master) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) } | 12 | let!(:master) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) } |
| 13 | let!(:guest) { create(:users_project, user: user2, project: project, project_access: UsersProject::GUEST) } | 13 | let!(:guest) { create(:users_project, user: user2, project: project, project_access: UsersProject::GUEST) } |
| 14 | 14 |
spec/requests/api/services_spec.rb
| @@ -6,7 +6,7 @@ describe API::API do | @@ -6,7 +6,7 @@ describe API::API do | ||
| 6 | after(:each) { ActiveRecord::Base.observers.disable(:user_observer) } | 6 | after(:each) { ActiveRecord::Base.observers.disable(:user_observer) } |
| 7 | 7 | ||
| 8 | let(:user) { create(:user) } | 8 | let(:user) { create(:user) } |
| 9 | - let(:project) {create(:project_with_code, creator_id: user.id, namespace: user.namespace) } | 9 | + let(:project) {create(:project, creator_id: user.id, namespace: user.namespace) } |
| 10 | 10 | ||
| 11 | describe "POST /projects/:id/services/gitlab-ci" do | 11 | describe "POST /projects/:id/services/gitlab-ci" do |
| 12 | it "should update gitlab-ci settings" do | 12 | it "should update gitlab-ci settings" do |
spec/services/git_push_service_spec.rb
| @@ -2,7 +2,7 @@ require 'spec_helper' | @@ -2,7 +2,7 @@ require 'spec_helper' | ||
| 2 | 2 | ||
| 3 | describe GitPushService do | 3 | describe GitPushService do |
| 4 | let (:user) { create :user } | 4 | let (:user) { create :user } |
| 5 | - let (:project) { create :project_with_code } | 5 | + let (:project) { create :project } |
| 6 | let (:service) { GitPushService.new } | 6 | let (:service) { GitPushService.new } |
| 7 | 7 | ||
| 8 | before do | 8 | before do |
spec/services/test_hook_service_spec.rb
| @@ -2,7 +2,7 @@ require 'spec_helper' | @@ -2,7 +2,7 @@ require 'spec_helper' | ||
| 2 | 2 | ||
| 3 | describe TestHookService do | 3 | describe TestHookService do |
| 4 | let (:user) { create :user } | 4 | let (:user) { create :user } |
| 5 | - let (:project) { create :project_with_code } | 5 | + let (:project) { create :project } |
| 6 | let (:hook) { create :project_hook, project: project } | 6 | let (:hook) { create :project_hook, project: project } |
| 7 | 7 | ||
| 8 | describe :execute do | 8 | describe :execute do |
spec/support/mentionable_shared_examples.rb
| @@ -11,7 +11,7 @@ def common_mentionable_setup | @@ -11,7 +11,7 @@ def common_mentionable_setup | ||
| 11 | 11 | ||
| 12 | let(:mentioned_issue) { create :issue, project: mproject } | 12 | let(:mentioned_issue) { create :issue, project: mproject } |
| 13 | let(:other_issue) { create :issue, project: mproject } | 13 | let(:other_issue) { create :issue, project: mproject } |
| 14 | - let(:mentioned_mr) { create :merge_request, target_project: mproject, source_branch: 'different' } | 14 | + let(:mentioned_mr) { create :merge_request, source_project: mproject, source_branch: 'different' } |
| 15 | let(:mentioned_commit) { double('commit', sha: '1234567890abcdef').as_null_object } | 15 | let(:mentioned_commit) { double('commit', sha: '1234567890abcdef').as_null_object } |
| 16 | 16 | ||
| 17 | # Override to add known commits to the repository stub. | 17 | # Override to add known commits to the repository stub. |
spec/support/test_env.rb
| @@ -73,6 +73,10 @@ module TestEnv | @@ -73,6 +73,10 @@ module TestEnv | ||
| 73 | version: '6.3.0' | 73 | version: '6.3.0' |
| 74 | ) | 74 | ) |
| 75 | 75 | ||
| 76 | + Gitlab::Satellite::MergeAction.any_instance.stub( | ||
| 77 | + merge!: true, | ||
| 78 | + ) | ||
| 79 | + | ||
| 76 | Gitlab::Satellite::Satellite.any_instance.stub( | 80 | Gitlab::Satellite::Satellite.any_instance.stub( |
| 77 | exists?: true, | 81 | exists?: true, |
| 78 | destroy: true, | 82 | destroy: true, |
spec/workers/post_receive_spec.rb
| @@ -9,7 +9,7 @@ describe PostReceive do | @@ -9,7 +9,7 @@ describe PostReceive do | ||
| 9 | end | 9 | end |
| 10 | 10 | ||
| 11 | context "web hook" do | 11 | context "web hook" do |
| 12 | - let(:project) { create(:project_with_code) } | 12 | + let(:project) { create(:project) } |
| 13 | let(:key) { create(:key, user: project.owner) } | 13 | let(:key) { create(:key, user: project.owner) } |
| 14 | let(:key_id) { key.shell_id } | 14 | let(:key_id) { key.shell_id } |
| 15 | 15 |