2019-04-15 06:17:05 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2019-08-29 03:56:52 -04:00
|
|
|
require 'spec_helper'
|
2016-06-24 17:20:53 -04:00
|
|
|
|
2020-06-03 14:08:28 -04:00
|
|
|
RSpec.describe Projects::BlobController do
|
2017-09-29 04:04:50 -04:00
|
|
|
include ProjectForksHelper
|
|
|
|
|
2017-01-25 16:44:33 -05:00
|
|
|
let(:project) { create(:project, :public, :repository) }
|
2016-06-24 17:20:53 -04:00
|
|
|
|
2017-04-25 08:28:55 -04:00
|
|
|
describe "GET show" do
|
2020-03-24 14:07:55 -04:00
|
|
|
def request
|
|
|
|
get(:show, params: { namespace_id: project.namespace, project_id: project, id: id })
|
|
|
|
end
|
|
|
|
|
2017-04-25 08:28:55 -04:00
|
|
|
render_views
|
|
|
|
|
|
|
|
context 'with file path' do
|
|
|
|
before do
|
2019-04-06 08:04:27 -04:00
|
|
|
expect(::Gitlab::GitalyClient).to receive(:allow_ref_name_caching).and_call_original
|
|
|
|
|
2020-03-24 14:07:55 -04:00
|
|
|
request
|
2017-04-25 08:28:55 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
context "valid branch, valid file" do
|
|
|
|
let(:id) { 'master/README.md' }
|
2019-10-21 14:06:29 -04:00
|
|
|
|
2017-04-25 08:28:55 -04:00
|
|
|
it { is_expected.to respond_with(:success) }
|
|
|
|
end
|
|
|
|
|
|
|
|
context "valid branch, invalid file" do
|
|
|
|
let(:id) { 'master/invalid-path.rb' }
|
2019-10-21 14:06:29 -04:00
|
|
|
|
|
|
|
it 'redirects' do
|
|
|
|
expect(subject)
|
2020-01-27 07:08:35 -05:00
|
|
|
.to redirect_to("/#{project.full_path}/-/tree/master")
|
2019-10-21 14:06:29 -04:00
|
|
|
end
|
2017-04-25 08:28:55 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
context "invalid branch, valid file" do
|
|
|
|
let(:id) { 'invalid-branch/README.md' }
|
2019-10-21 14:06:29 -04:00
|
|
|
|
2017-04-25 08:28:55 -04:00
|
|
|
it { is_expected.to respond_with(:not_found) }
|
|
|
|
end
|
|
|
|
|
|
|
|
context "binary file" do
|
|
|
|
let(:id) { 'binary-encoding/encoding/binary-1.bin' }
|
2019-10-21 14:06:29 -04:00
|
|
|
|
2017-04-25 08:28:55 -04:00
|
|
|
it { is_expected.to respond_with(:success) }
|
|
|
|
end
|
2018-11-30 06:50:25 -05:00
|
|
|
|
|
|
|
context "Markdown file" do
|
|
|
|
let(:id) { 'master/README.md' }
|
2019-10-21 14:06:29 -04:00
|
|
|
|
2018-11-30 06:50:25 -05:00
|
|
|
it { is_expected.to respond_with(:success) }
|
|
|
|
end
|
2017-04-25 08:28:55 -04:00
|
|
|
end
|
|
|
|
|
2017-06-15 14:10:49 -04:00
|
|
|
context 'with file path and JSON format' do
|
|
|
|
context "valid branch, valid file" do
|
|
|
|
let(:id) { 'master/README.md' }
|
|
|
|
|
|
|
|
before do
|
|
|
|
get(:show,
|
2018-12-17 17:52:17 -05:00
|
|
|
params: {
|
|
|
|
namespace_id: project.namespace,
|
|
|
|
project_id: project,
|
|
|
|
id: id
|
|
|
|
},
|
2017-06-15 14:10:49 -04:00
|
|
|
format: :json)
|
|
|
|
end
|
|
|
|
|
|
|
|
it do
|
|
|
|
expect(response).to be_ok
|
|
|
|
expect(json_response).to have_key 'html'
|
2017-08-04 08:45:44 -04:00
|
|
|
expect(json_response).to have_key 'raw_path'
|
2017-06-15 14:10:49 -04:00
|
|
|
end
|
|
|
|
end
|
2018-06-14 13:37:16 -04:00
|
|
|
|
2018-06-15 05:42:56 -04:00
|
|
|
context "with viewer=none" do
|
2018-06-14 13:37:16 -04:00
|
|
|
let(:id) { 'master/README.md' }
|
|
|
|
|
|
|
|
before do
|
|
|
|
get(:show,
|
2018-12-17 17:52:17 -05:00
|
|
|
params: {
|
|
|
|
namespace_id: project.namespace,
|
|
|
|
project_id: project,
|
|
|
|
id: id,
|
|
|
|
viewer: 'none'
|
|
|
|
},
|
|
|
|
format: :json)
|
2018-06-14 13:37:16 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it do
|
|
|
|
expect(response).to be_ok
|
2018-06-14 14:46:53 -04:00
|
|
|
expect(json_response).not_to have_key 'html'
|
2018-06-15 05:42:56 -04:00
|
|
|
expect(json_response).to have_key 'raw_path'
|
2018-06-14 13:37:16 -04:00
|
|
|
end
|
|
|
|
end
|
2017-06-15 14:10:49 -04:00
|
|
|
end
|
|
|
|
|
2017-04-25 08:28:55 -04:00
|
|
|
context 'with tree path' do
|
|
|
|
before do
|
|
|
|
get(:show,
|
2018-12-17 17:52:17 -05:00
|
|
|
params: {
|
|
|
|
namespace_id: project.namespace,
|
|
|
|
project_id: project,
|
|
|
|
id: id
|
|
|
|
})
|
2017-04-25 08:28:55 -04:00
|
|
|
controller.instance_variable_set(:@blob, nil)
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'redirect to tree' do
|
|
|
|
let(:id) { 'markdown/doc' }
|
2019-10-21 14:06:29 -04:00
|
|
|
|
2017-04-25 08:28:55 -04:00
|
|
|
it 'redirects' do
|
2017-06-21 09:48:12 -04:00
|
|
|
expect(subject)
|
2020-01-27 07:08:35 -05:00
|
|
|
.to redirect_to("/#{project.full_path}/-/tree/markdown/doc")
|
2017-04-25 08:28:55 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-06-24 17:20:53 -04:00
|
|
|
describe 'GET diff' do
|
2017-04-06 12:36:38 -04:00
|
|
|
let(:user) { create(:user) }
|
|
|
|
|
2016-06-24 17:20:53 -04:00
|
|
|
render_views
|
|
|
|
|
|
|
|
def do_get(opts = {})
|
2017-02-23 18:55:01 -05:00
|
|
|
params = { namespace_id: project.namespace,
|
|
|
|
project_id: project,
|
2016-06-24 17:20:53 -04:00
|
|
|
id: 'master/CHANGELOG' }
|
2018-12-17 17:52:17 -05:00
|
|
|
get :diff, params: params.merge(opts)
|
2016-06-24 17:20:53 -04:00
|
|
|
end
|
|
|
|
|
2017-04-06 12:36:38 -04:00
|
|
|
before do
|
2018-07-11 10:36:08 -04:00
|
|
|
project.add_maintainer(user)
|
2017-04-06 12:36:38 -04:00
|
|
|
|
|
|
|
sign_in(user)
|
|
|
|
end
|
|
|
|
|
2016-06-24 17:20:53 -04:00
|
|
|
context 'when essential params are missing' do
|
|
|
|
it 'renders nothing' do
|
|
|
|
do_get
|
|
|
|
|
|
|
|
expect(response.body).to be_blank
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when essential params are present' do
|
2018-06-21 08:22:40 -04:00
|
|
|
context 'when rendering for commit' do
|
|
|
|
it 'renders the diff content' do
|
|
|
|
do_get(since: 1, to: 5, offset: 10)
|
2016-06-24 17:20:53 -04:00
|
|
|
|
2018-06-21 08:22:40 -04:00
|
|
|
expect(response.body).to be_present
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when rendering for merge request' do
|
2019-03-06 23:29:02 -05:00
|
|
|
let(:presenter) { double(:presenter, diff_lines: diff_lines) }
|
|
|
|
let(:diff_lines) do
|
|
|
|
Array.new(3, Gitlab::Diff::Line.new('plain', nil, nil, nil, nil, rich_text: 'rich'))
|
2018-06-21 08:22:40 -04:00
|
|
|
end
|
|
|
|
|
2019-03-06 23:29:02 -05:00
|
|
|
before do
|
|
|
|
allow(Blobs::UnfoldPresenter).to receive(:new).and_return(presenter)
|
|
|
|
end
|
2018-06-21 08:22:40 -04:00
|
|
|
|
2019-03-06 23:29:02 -05:00
|
|
|
it 'renders diff context lines Gitlab::Diff::Line array' do
|
|
|
|
do_get(since: 1, to: 2, offset: 0, from_merge_request: true)
|
2018-06-21 08:22:40 -04:00
|
|
|
|
2019-07-16 04:03:49 -04:00
|
|
|
lines = json_response
|
2018-06-21 08:22:40 -04:00
|
|
|
|
2019-03-06 23:29:02 -05:00
|
|
|
expect(lines.size).to eq(diff_lines.size)
|
|
|
|
lines.each do |line|
|
|
|
|
expect(line).to have_key('type')
|
|
|
|
expect(line['text']).to eq('plain')
|
|
|
|
expect(line['rich_text']).to eq('rich')
|
2018-06-21 08:22:40 -04:00
|
|
|
end
|
2019-03-06 23:29:02 -05:00
|
|
|
end
|
2019-01-23 03:50:19 -05:00
|
|
|
|
2019-03-06 23:29:02 -05:00
|
|
|
it 'handles full being true' do
|
|
|
|
do_get(full: true, from_merge_request: true)
|
2019-01-23 03:50:19 -05:00
|
|
|
|
2019-07-16 04:03:49 -04:00
|
|
|
lines = json_response
|
2019-01-23 03:50:19 -05:00
|
|
|
|
2019-03-06 23:29:02 -05:00
|
|
|
expect(lines.size).to eq(diff_lines.size)
|
2018-06-21 08:22:40 -04:00
|
|
|
end
|
2016-06-24 17:20:53 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2016-11-07 12:09:22 -05:00
|
|
|
|
2017-04-06 12:36:38 -04:00
|
|
|
describe 'GET edit' do
|
|
|
|
let(:default_params) do
|
|
|
|
{
|
|
|
|
namespace_id: project.namespace,
|
|
|
|
project_id: project,
|
|
|
|
id: 'master/CHANGELOG'
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'anonymous' do
|
|
|
|
before do
|
2018-12-17 17:52:17 -05:00
|
|
|
get :edit, params: default_params
|
2017-04-06 12:36:38 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'redirects to sign in and returns' do
|
|
|
|
expect(response).to redirect_to(new_user_session_path)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'as guest' do
|
|
|
|
let(:guest) { create(:user) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
sign_in(guest)
|
2018-12-17 17:52:17 -05:00
|
|
|
get :edit, params: default_params
|
2017-04-06 12:36:38 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'redirects to blob show' do
|
2017-06-29 13:06:35 -04:00
|
|
|
expect(response).to redirect_to(project_blob_path(project, 'master/CHANGELOG'))
|
2017-04-06 12:36:38 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'as developer' do
|
|
|
|
let(:developer) { create(:user) }
|
|
|
|
|
|
|
|
before do
|
2017-12-22 03:18:28 -05:00
|
|
|
project.add_developer(developer)
|
2017-04-06 12:36:38 -04:00
|
|
|
sign_in(developer)
|
2018-12-17 17:52:17 -05:00
|
|
|
get :edit, params: default_params
|
2017-04-06 12:36:38 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'redirects to blob show' do
|
2020-01-28 07:08:44 -05:00
|
|
|
expect(response).to have_gitlab_http_status(:ok)
|
2017-04-06 12:36:38 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2018-07-11 10:36:08 -04:00
|
|
|
context 'as maintainer' do
|
|
|
|
let(:maintainer) { create(:user) }
|
2017-04-06 12:36:38 -04:00
|
|
|
|
|
|
|
before do
|
2018-07-11 10:36:08 -04:00
|
|
|
project.add_maintainer(maintainer)
|
|
|
|
sign_in(maintainer)
|
2018-12-17 17:52:17 -05:00
|
|
|
get :edit, params: default_params
|
2017-04-06 12:36:38 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'redirects to blob show' do
|
2020-01-28 07:08:44 -05:00
|
|
|
expect(response).to have_gitlab_http_status(:ok)
|
2017-04-06 12:36:38 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2016-11-07 12:09:22 -05:00
|
|
|
describe 'PUT update' do
|
2017-04-06 12:36:38 -04:00
|
|
|
let(:user) { create(:user) }
|
2016-11-07 12:09:22 -05:00
|
|
|
let(:default_params) do
|
|
|
|
{
|
2017-02-23 18:55:01 -05:00
|
|
|
namespace_id: project.namespace,
|
|
|
|
project_id: project,
|
2016-11-07 12:09:22 -05:00
|
|
|
id: 'master/CHANGELOG',
|
2017-04-19 20:37:44 -04:00
|
|
|
branch_name: 'master',
|
2016-11-07 12:09:22 -05:00
|
|
|
content: 'Added changes',
|
|
|
|
commit_message: 'Update CHANGELOG'
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
def blob_after_edit_path
|
2017-06-29 13:06:35 -04:00
|
|
|
project_blob_path(project, 'master/CHANGELOG')
|
2016-11-07 12:09:22 -05:00
|
|
|
end
|
|
|
|
|
2017-04-06 12:36:38 -04:00
|
|
|
before do
|
2018-07-11 10:36:08 -04:00
|
|
|
project.add_maintainer(user)
|
2017-04-06 12:36:38 -04:00
|
|
|
|
|
|
|
sign_in(user)
|
|
|
|
end
|
|
|
|
|
2016-11-07 12:09:22 -05:00
|
|
|
it 'redirects to blob' do
|
2018-12-17 17:52:17 -05:00
|
|
|
put :update, params: default_params
|
2016-11-07 12:09:22 -05:00
|
|
|
|
|
|
|
expect(response).to redirect_to(blob_after_edit_path)
|
|
|
|
end
|
|
|
|
|
|
|
|
context '?from_merge_request_iid' do
|
|
|
|
let(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
|
|
|
|
let(:mr_params) { default_params.merge(from_merge_request_iid: merge_request.iid) }
|
|
|
|
|
|
|
|
it 'redirects to MR diff' do
|
2018-12-17 17:52:17 -05:00
|
|
|
put :update, params: mr_params
|
2016-11-07 12:09:22 -05:00
|
|
|
|
2017-06-29 13:06:35 -04:00
|
|
|
after_edit_path = diffs_project_merge_request_path(project, merge_request)
|
2016-11-29 04:40:56 -05:00
|
|
|
file_anchor = "##{Digest::SHA1.hexdigest('CHANGELOG')}"
|
2016-11-07 12:09:22 -05:00
|
|
|
expect(response).to redirect_to(after_edit_path + file_anchor)
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when user doesn't have access" do
|
|
|
|
before do
|
2017-08-02 15:55:11 -04:00
|
|
|
other_project = create(:project, :repository)
|
2016-11-07 12:09:22 -05:00
|
|
|
merge_request.update!(source_project: other_project, target_project: other_project)
|
|
|
|
end
|
|
|
|
|
2019-04-05 04:43:27 -04:00
|
|
|
it "redirects to blob" do
|
2018-12-17 17:52:17 -05:00
|
|
|
put :update, params: mr_params
|
2016-11-07 12:09:22 -05:00
|
|
|
|
|
|
|
expect(response).to redirect_to(blob_after_edit_path)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2016-12-29 18:09:13 -05:00
|
|
|
|
|
|
|
context 'when user has forked project' do
|
2017-09-29 04:04:50 -04:00
|
|
|
let!(:forked_project) { fork_project(project, guest, namespace: guest.namespace, repository: true) }
|
|
|
|
let(:guest) { create(:user) }
|
2016-12-29 18:09:13 -05:00
|
|
|
|
2017-02-20 12:16:08 -05:00
|
|
|
before do
|
|
|
|
sign_in(guest)
|
|
|
|
end
|
2016-12-29 18:09:13 -05:00
|
|
|
|
2017-02-17 13:46:21 -05:00
|
|
|
context 'when editing on the fork' do
|
|
|
|
before do
|
2017-02-23 18:55:01 -05:00
|
|
|
default_params[:namespace_id] = forked_project.namespace
|
|
|
|
default_params[:project_id] = forked_project
|
2017-02-17 13:46:21 -05:00
|
|
|
end
|
|
|
|
|
2019-10-23 05:06:03 -04:00
|
|
|
it 'redirects to blob', :sidekiq_might_not_need_inline do
|
2018-12-17 17:52:17 -05:00
|
|
|
put :update, params: default_params
|
2017-02-17 13:46:21 -05:00
|
|
|
|
2017-06-29 13:06:35 -04:00
|
|
|
expect(response).to redirect_to(project_blob_path(forked_project, 'master/CHANGELOG'))
|
2017-02-17 13:46:21 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when editing on the original repository' do
|
2019-10-23 05:06:03 -04:00
|
|
|
it "redirects to forked project new merge request", :sidekiq_might_not_need_inline do
|
2017-04-19 20:37:44 -04:00
|
|
|
default_params[:branch_name] = "fork-test-1"
|
2017-02-17 13:46:21 -05:00
|
|
|
default_params[:create_merge_request] = 1
|
|
|
|
|
2018-12-17 17:52:17 -05:00
|
|
|
put :update, params: default_params
|
2017-02-17 13:46:21 -05:00
|
|
|
|
|
|
|
expect(response).to redirect_to(
|
2017-06-29 13:06:35 -04:00
|
|
|
project_new_merge_request_path(
|
2017-02-17 13:46:21 -05:00
|
|
|
forked_project,
|
|
|
|
merge_request: {
|
|
|
|
source_project_id: forked_project.id,
|
|
|
|
target_project_id: project.id,
|
2018-11-07 08:32:20 -05:00
|
|
|
source_branch: "fork-test-1",
|
2017-02-17 13:46:21 -05:00
|
|
|
target_branch: "master"
|
|
|
|
}
|
|
|
|
)
|
2016-12-29 18:09:13 -05:00
|
|
|
)
|
2017-02-17 13:46:21 -05:00
|
|
|
end
|
2016-12-29 18:09:13 -05:00
|
|
|
end
|
|
|
|
end
|
2020-09-03 08:08:47 -04:00
|
|
|
|
|
|
|
it_behaves_like 'tracking unique hll events', :track_editor_edit_actions do
|
|
|
|
subject { put :update, params: default_params, format: format }
|
|
|
|
|
|
|
|
let(:target_id) { 'g_edit_by_sfe' }
|
|
|
|
let(:expected_type) { instance_of(Integer) }
|
|
|
|
end
|
2016-11-07 12:09:22 -05:00
|
|
|
end
|
2018-10-17 06:27:58 -04:00
|
|
|
|
|
|
|
describe 'DELETE destroy' do
|
|
|
|
let(:user) { create(:user) }
|
|
|
|
let(:project_root_path) { project_tree_path(project, 'master') }
|
|
|
|
|
|
|
|
before do
|
|
|
|
project.add_maintainer(user)
|
|
|
|
|
|
|
|
sign_in(user)
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'for a file in a subdirectory' do
|
|
|
|
let(:default_params) do
|
|
|
|
{
|
|
|
|
namespace_id: project.namespace,
|
|
|
|
project_id: project,
|
|
|
|
id: 'master/files/whitespace',
|
|
|
|
original_branch: 'master',
|
|
|
|
branch_name: 'master',
|
|
|
|
commit_message: 'Delete whitespace'
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:after_delete_path) { project_tree_path(project, 'master/files') }
|
|
|
|
|
|
|
|
it 'redirects to the sub directory' do
|
2018-12-17 17:52:17 -05:00
|
|
|
delete :destroy, params: default_params
|
2018-10-17 06:27:58 -04:00
|
|
|
|
|
|
|
expect(response).to redirect_to(after_delete_path)
|
|
|
|
end
|
2020-06-11 14:08:28 -04:00
|
|
|
|
|
|
|
context 'when a validation failure occurs' do
|
|
|
|
let(:failure_path) { project_blob_path(project, default_params[:id]) }
|
|
|
|
|
|
|
|
render_views
|
|
|
|
|
|
|
|
it 'redirects to a valid page' do
|
|
|
|
expect_next_instance_of(Files::DeleteService) do |instance|
|
|
|
|
expect(instance).to receive(:validate!).and_raise(Commits::CreateService::ValidationError, "validation error")
|
|
|
|
end
|
|
|
|
|
|
|
|
delete :destroy, params: default_params
|
|
|
|
|
|
|
|
expect(response).to redirect_to(failure_path)
|
|
|
|
end
|
|
|
|
end
|
2018-10-17 06:27:58 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
context 'if deleted file is the last one in a subdirectory' do
|
|
|
|
let(:default_params) do
|
|
|
|
{
|
|
|
|
namespace_id: project.namespace,
|
|
|
|
project_id: project,
|
|
|
|
id: 'master/bar/branch-test.txt',
|
|
|
|
original_branch: 'master',
|
|
|
|
branch_name: 'master',
|
|
|
|
commit_message: 'Delete whitespace'
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'redirects to the project root' do
|
2018-12-17 17:52:17 -05:00
|
|
|
delete :destroy, params: default_params
|
2018-10-17 06:27:58 -04:00
|
|
|
|
|
|
|
expect(response).to redirect_to(project_root_path)
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when deleting a file in a branch other than master' do
|
|
|
|
let(:default_params) do
|
|
|
|
{
|
|
|
|
namespace_id: project.namespace,
|
|
|
|
project_id: project,
|
|
|
|
id: 'binary-encoding/foo/bar/.gitkeep',
|
|
|
|
original_branch: 'binary-encoding',
|
|
|
|
branch_name: 'binary-encoding',
|
|
|
|
commit_message: 'Delete whitespace'
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
let(:after_delete_path) { project_tree_path(project, 'binary-encoding') }
|
|
|
|
|
|
|
|
it 'redirects to the project root of the branch' do
|
2018-12-17 17:52:17 -05:00
|
|
|
delete :destroy, params: default_params
|
2018-10-17 06:27:58 -04:00
|
|
|
|
|
|
|
expect(response).to redirect_to(after_delete_path)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2020-09-03 08:08:47 -04:00
|
|
|
|
|
|
|
describe 'POST create' do
|
|
|
|
let(:user) { create(:user) }
|
|
|
|
let(:default_params) do
|
|
|
|
{
|
|
|
|
namespace_id: project.namespace,
|
|
|
|
project_id: project,
|
|
|
|
id: 'master',
|
|
|
|
branch_name: 'master',
|
|
|
|
file_name: 'docs/EXAMPLE_FILE',
|
|
|
|
content: 'Added changes',
|
|
|
|
commit_message: 'Create CHANGELOG'
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
before do
|
|
|
|
project.add_developer(user)
|
|
|
|
|
|
|
|
sign_in(user)
|
|
|
|
end
|
|
|
|
|
|
|
|
it_behaves_like 'tracking unique hll events', :track_editor_edit_actions do
|
|
|
|
subject { post :create, params: default_params, format: format }
|
|
|
|
|
|
|
|
let(:target_id) { 'g_edit_by_sfe' }
|
|
|
|
let(:expected_type) { instance_of(Integer) }
|
|
|
|
end
|
|
|
|
end
|
2016-06-24 17:20:53 -04:00
|
|
|
end
|