diff options
author | Robert Speicher <robert@gitlab.com> | 2016-02-19 21:39:31 +0300 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2016-02-19 21:55:19 +0300 |
commit | 0daef5bfd780427c2f76fcd750cbecf7e0a5f575 (patch) | |
tree | 4b29d8fc43e368637bdadffc740a1bc44ffb9a26 /spec | |
parent | 441896589efd9d2730e7c0598ea23eef6eab8aad (diff) |
Merge branch 'issue_3409' into 'master'
Add ability to revert changes introduced by Merge Requests or Commits
Closes #3409
See merge request !1990
Diffstat (limited to 'spec')
-rw-r--r-- | spec/controllers/commit_controller_spec.rb | 49 | ||||
-rw-r--r-- | spec/factories/merge_requests.rb | 1 | ||||
-rw-r--r-- | spec/models/merge_request_spec.rb | 1 | ||||
-rw-r--r-- | spec/models/repository_spec.rb | 24 |
4 files changed, 75 insertions, 0 deletions
diff --git a/spec/controllers/commit_controller_spec.rb b/spec/controllers/commit_controller_spec.rb index 7793bf1e421..bbe400dad88 100644 --- a/spec/controllers/commit_controller_spec.rb +++ b/spec/controllers/commit_controller_spec.rb @@ -143,4 +143,53 @@ describe Projects::CommitController do expect(assigns(:tags)).to include("v1.1.0") end end + + describe '#revert' do + context 'when target branch is not provided' do + it 'should render the 404 page' do + post(:revert, + namespace_id: project.namespace.to_param, + project_id: project.to_param, + id: commit.id) + + expect(response).not_to be_success + expect(response.status).to eq(404) + end + end + + context 'when the revert was successful' do + it 'should redirect to the commits page' do + post(:revert, + namespace_id: project.namespace.to_param, + project_id: project.to_param, + target_branch: 'master', + id: commit.id) + + expect(response).to redirect_to namespace_project_commits_path(project.namespace, project, 'master') + expect(flash[:notice]).to eq('The commit has been successfully reverted.') + end + end + + context 'when the revert failed' do + before do + post(:revert, + namespace_id: project.namespace.to_param, + project_id: project.to_param, + target_branch: 'master', + id: commit.id) + end + + it 'should redirect to the commit page' do + # Reverting a commit that has been already reverted. + post(:revert, + namespace_id: project.namespace.to_param, + project_id: project.to_param, + target_branch: 'master', + id: commit.id) + + expect(response).to redirect_to namespace_project_commit_path(project.namespace, project, commit.id) + expect(flash[:alert]).to match('Sorry, we cannot revert this commit automatically.') + end + end + end end diff --git a/spec/factories/merge_requests.rb b/spec/factories/merge_requests.rb index 0c6a881f868..00de7bb5294 100644 --- a/spec/factories/merge_requests.rb +++ b/spec/factories/merge_requests.rb @@ -24,6 +24,7 @@ # merge_params :text # merge_when_build_succeeds :boolean default(FALSE), not null # merge_user_id :integer +# merge_commit_sha :string # FactoryGirl.define do diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index f35b48601ad..c51f34034d7 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -24,6 +24,7 @@ # merge_params :text # merge_when_build_succeeds :boolean default(FALSE), not null # merge_user_id :integer +# merge_commit_sha :string # require 'spec_helper' diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index ed91b62c534..9242f755449 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -5,6 +5,15 @@ describe Repository, models: true do let(:repository) { create(:project).repository } let(:user) { create(:user) } + let(:commit_options) do + author = repository.user_to_committer(user) + { message: 'Test message', committer: author, author: author } + end + let(:merge_commit) do + source_sha = repository.find_branch('feature').target + merge_commit_id = repository.merge(user, source_sha, 'master', commit_options) + repository.commit(merge_commit_id) + end describe :branch_names_contains do subject { repository.branch_names_contains(sample_commit.id) } @@ -426,4 +435,19 @@ describe Repository, models: true do it { is_expected.not_to include('e56497bb5f03a90a51293fc6d516788730953899') } end + + describe '#merge' do + it 'should merge the code and return the commit id' do + expect(merge_commit).to be_present + expect(repository.blob_at(merge_commit.id, 'files/ruby/feature.rb')).to be_present + end + end + + describe '#revert_merge' do + it 'should revert the changes' do + repository.revert(user, merge_commit, 'master') + + expect(repository.blob_at_branch('master', 'files/ruby/feature.rb')).not_to be_present + end + end end |