gitlab-org--gitlab-foss/spec/controllers/projects/branches_controller_spec.rb

143 lines
3.9 KiB
Ruby
Raw Normal View History

2014-11-13 10:19:07 -05:00
require 'spec_helper'
describe Projects::BranchesController do
let(:project) { create(:project) }
let(:user) { create(:user) }
before do
sign_in(user)
project.team << [user, :master]
allow(project).to receive(:branches).and_return(['master', 'foo/bar/baz'])
allow(project).to receive(:tags).and_return(['v1.0.0', 'v2.0.0'])
2014-11-13 10:19:07 -05:00
controller.instance_variable_set(:@project, project)
end
describe "POST create" do
render_views
2016-02-17 01:11:48 -05:00
context "on creation of a new branch" do
before do
post :create,
namespace_id: project.namespace.to_param,
project_id: project.to_param,
branch_name: branch,
ref: ref
end
2014-11-13 10:19:07 -05:00
2016-02-17 01:11:48 -05:00
context "valid branch name, valid source" do
let(:branch) { "merge_branch" }
let(:ref) { "master" }
it 'redirects' do
expect(subject).
to redirect_to("/#{project.path_with_namespace}/tree/merge_branch")
end
end
2014-11-13 10:19:07 -05:00
2016-02-17 01:11:48 -05:00
context "invalid branch name, valid ref" do
let(:branch) { "<script>alert('merge');</script>" }
let(:ref) { "master" }
it 'redirects' do
expect(subject).
to redirect_to("/#{project.path_with_namespace}/tree/alert('merge');")
end
end
2014-11-13 10:19:07 -05:00
2016-02-17 01:11:48 -05:00
context "valid branch name, invalid ref" do
let(:branch) { "merge_branch" }
let(:ref) { "<script>alert('ref');</script>" }
it { is_expected.to render_template('new') }
end
2014-11-13 10:19:07 -05:00
2016-02-17 01:11:48 -05:00
context "invalid branch name, invalid ref" do
let(:branch) { "<script>alert('merge');</script>" }
let(:ref) { "<script>alert('ref');</script>" }
it { is_expected.to render_template('new') }
end
context "valid branch name with encoded slashes" do
let(:branch) { "feature%2Ftest" }
let(:ref) { "<script>alert('ref');</script>" }
it { is_expected.to render_template('new') }
it { project.repository.branch_names.include?('feature/test') }
end
2014-11-13 10:19:07 -05:00
end
2016-02-17 01:11:48 -05:00
describe "created from the new branch button on issues" do
let(:branch) { "1-feature-branch" }
2016-02-22 03:20:04 -05:00
let!(:issue) { create(:issue, project: project) }
2016-02-17 01:11:48 -05:00
2016-02-22 03:20:04 -05:00
it 'redirects' do
2016-02-17 01:11:48 -05:00
post :create,
namespace_id: project.namespace.to_param,
project_id: project.to_param,
branch_name: branch,
2016-02-22 03:20:04 -05:00
issue_iid: issue.iid
2016-02-17 01:11:48 -05:00
expect(subject).
to redirect_to("/#{project.path_with_namespace}/tree/1-feature-branch")
end
2016-02-22 03:20:04 -05:00
it 'posts a system note' do
expect(SystemNoteService).to receive(:new_issue_branch).with(issue, project, user, "1-feature-branch")
post :create,
namespace_id: project.namespace.to_param,
project_id: project.to_param,
branch_name: branch,
issue_iid: issue.iid
end
end
2014-11-13 10:19:07 -05:00
end
describe "POST destroy with HTML format" do
render_views
it 'returns 303' do
post :destroy,
format: :html,
id: 'foo/bar/baz',
namespace_id: project.namespace.to_param,
project_id: project.to_param
2016-06-27 14:10:42 -04:00
expect(response).to have_http_status(303)
end
end
describe "POST destroy" do
render_views
before do
post :destroy,
format: :js,
id: branch,
namespace_id: project.namespace.to_param,
project_id: project.to_param
end
context "valid branch name, valid source" do
let(:branch) { "feature" }
2016-06-27 14:10:42 -04:00
it { expect(response).to have_http_status(200) }
end
context "valid branch name with unencoded slashes" do
let(:branch) { "improve/awesome" }
2016-06-27 14:10:42 -04:00
it { expect(response).to have_http_status(200) }
end
context "valid branch name with encoded slashes" do
let(:branch) { "improve%2Fawesome" }
2016-06-27 14:10:42 -04:00
it { expect(response).to have_http_status(200) }
end
context "invalid branch name, valid ref" do
let(:branch) { "no-branch" }
2016-06-27 14:10:42 -04:00
it { expect(response).to have_http_status(404) }
end
end
2014-11-13 10:19:07 -05:00
end