2015-04-27 02:42:29 -04:00
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe Projects::CompareController do
|
|
|
|
let(:project) { create(:project) }
|
|
|
|
let(:user) { create(:user) }
|
|
|
|
let(:ref_from) { "improve%2Fawesome" }
|
|
|
|
let(:ref_to) { "feature" }
|
|
|
|
|
|
|
|
before do
|
|
|
|
sign_in(user)
|
|
|
|
project.team << [user, :master]
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'compare should show some diffs' do
|
2015-06-23 01:24:39 -04:00
|
|
|
get(:show,
|
|
|
|
namespace_id: project.namespace.to_param,
|
|
|
|
project_id: project.to_param,
|
|
|
|
from: ref_from,
|
|
|
|
to: ref_to)
|
2015-04-27 02:42:29 -04:00
|
|
|
|
|
|
|
expect(response).to be_success
|
2016-07-20 12:25:36 -04:00
|
|
|
expect(assigns(:diffs).diff_files.first).not_to be_nil
|
2015-04-27 02:42:29 -04:00
|
|
|
expect(assigns(:commits).length).to be >= 1
|
|
|
|
end
|
2015-09-18 15:02:01 -04:00
|
|
|
|
2015-10-21 20:55:35 -04:00
|
|
|
it 'compare should show some diffs with ignore whitespace change option' do
|
|
|
|
get(:show,
|
|
|
|
namespace_id: project.namespace.to_param,
|
|
|
|
project_id: project.to_param,
|
|
|
|
from: '08f22f25',
|
|
|
|
to: '66eceea0',
|
|
|
|
w: 1)
|
|
|
|
|
|
|
|
expect(response).to be_success
|
2016-07-20 12:25:36 -04:00
|
|
|
expect(assigns(:diffs).diff_files.first).not_to be_nil
|
2015-10-21 20:55:35 -04:00
|
|
|
expect(assigns(:commits).length).to be >= 1
|
|
|
|
# without whitespace option, there are more than 2 diff_splits
|
2016-07-20 12:25:36 -04:00
|
|
|
diff_splits = assigns(:diffs).diff_files.first.diff.diff.split("\n")
|
2015-10-21 20:55:35 -04:00
|
|
|
expect(diff_splits.length).to be <= 2
|
|
|
|
end
|
|
|
|
|
2015-09-18 15:02:01 -04:00
|
|
|
describe 'non-existent refs' do
|
|
|
|
it 'invalid source ref' do
|
|
|
|
get(:show,
|
|
|
|
namespace_id: project.namespace.to_param,
|
|
|
|
project_id: project.to_param,
|
|
|
|
from: 'non-existent',
|
|
|
|
to: ref_to)
|
|
|
|
|
|
|
|
expect(response).to be_success
|
2016-07-20 12:25:36 -04:00
|
|
|
expect(assigns(:diffs).diff_files.to_a).to eq([])
|
2015-09-18 15:02:01 -04:00
|
|
|
expect(assigns(:commits)).to eq([])
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'invalid target ref' do
|
|
|
|
get(:show,
|
|
|
|
namespace_id: project.namespace.to_param,
|
|
|
|
project_id: project.to_param,
|
|
|
|
from: ref_from,
|
|
|
|
to: 'non-existent')
|
|
|
|
|
|
|
|
expect(response).to be_success
|
|
|
|
expect(assigns(:diffs)).to eq(nil)
|
|
|
|
expect(assigns(:commits)).to eq(nil)
|
|
|
|
end
|
|
|
|
end
|
2016-06-28 12:25:32 -04:00
|
|
|
|
2016-07-08 13:11:47 -04:00
|
|
|
describe 'GET diff_for_path' do
|
2016-06-28 12:25:32 -04:00
|
|
|
def diff_for_path(extra_params = {})
|
|
|
|
params = {
|
|
|
|
namespace_id: project.namespace.to_param,
|
|
|
|
project_id: project.to_param
|
|
|
|
}
|
|
|
|
|
|
|
|
get :diff_for_path, params.merge(extra_params)
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:existing_path) { 'files/ruby/feature.rb' }
|
|
|
|
|
|
|
|
context 'when the from and to refs exist' do
|
|
|
|
context 'when the user has access to the project' do
|
|
|
|
context 'when the path exists in the diff' do
|
|
|
|
it 'disables diff notes' do
|
2016-07-08 17:50:06 -04:00
|
|
|
diff_for_path(from: ref_from, to: ref_to, old_path: existing_path, new_path: existing_path)
|
2016-06-28 12:25:32 -04:00
|
|
|
|
|
|
|
expect(assigns(:diff_notes_disabled)).to be_truthy
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'only renders the diffs for the path given' do
|
2016-07-20 12:25:36 -04:00
|
|
|
expect(controller).to receive(:render_diff_for_path).and_wrap_original do |meth, safe_diffs|
|
|
|
|
expect(safe_diffs.diff_files.map(&:new_path)).to contain_exactly(existing_path)
|
|
|
|
meth.call(safe_diffs)
|
2016-06-28 12:25:32 -04:00
|
|
|
end
|
|
|
|
|
2016-07-08 17:50:06 -04:00
|
|
|
diff_for_path(from: ref_from, to: ref_to, old_path: existing_path, new_path: existing_path)
|
2016-06-28 12:25:32 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when the path does not exist in the diff' do
|
2016-07-08 17:50:06 -04:00
|
|
|
before { diff_for_path(from: ref_from, to: ref_to, old_path: existing_path.succ, new_path: existing_path.succ) }
|
2016-06-28 12:25:32 -04:00
|
|
|
|
|
|
|
it 'returns a 404' do
|
|
|
|
expect(response).to have_http_status(404)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when the user does not have access to the project' do
|
|
|
|
before do
|
|
|
|
project.team.truncate
|
2016-07-08 17:50:06 -04:00
|
|
|
diff_for_path(from: ref_from, to: ref_to, old_path: existing_path, new_path: existing_path)
|
2016-06-28 12:25:32 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns a 404' do
|
|
|
|
expect(response).to have_http_status(404)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when the from ref does not exist' do
|
2016-07-08 17:50:06 -04:00
|
|
|
before { diff_for_path(from: ref_from.succ, to: ref_to, old_path: existing_path, new_path: existing_path) }
|
2016-06-28 12:25:32 -04:00
|
|
|
|
|
|
|
it 'returns a 404' do
|
|
|
|
expect(response).to have_http_status(404)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when the to ref does not exist' do
|
2016-07-08 17:50:06 -04:00
|
|
|
before { diff_for_path(from: ref_from, to: ref_to.succ, old_path: existing_path, new_path: existing_path) }
|
2016-06-28 12:25:32 -04:00
|
|
|
|
|
|
|
it 'returns a 404' do
|
|
|
|
expect(response).to have_http_status(404)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2015-04-27 02:42:29 -04:00
|
|
|
end
|