From a0158b1a9c21f648fdbf79765bbc1e19e776b5d9 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Tue, 8 Sep 2020 12:08:41 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- spec/requests/api/snippets_spec.rb | 126 +++---------------------------------- 1 file changed, 9 insertions(+), 117 deletions(-) (limited to 'spec/requests/api/snippets_spec.rb') diff --git a/spec/requests/api/snippets_spec.rb b/spec/requests/api/snippets_spec.rb index 508a39ce227..5bba308a2d3 100644 --- a/spec/requests/api/snippets_spec.rb +++ b/spec/requests/api/snippets_spec.rb @@ -368,7 +368,7 @@ RSpec.describe API::Snippets do context 'when the snippet is public' do let(:extra_params) { { visibility: 'public' } } - it 'rejects the shippet' do + it 'rejects the snippet' do expect { subject }.not_to change { Snippet.count } expect(response).to have_gitlab_http_status(:bad_request) @@ -391,98 +391,17 @@ RSpec.describe API::Snippets do create(:personal_snippet, :repository, author: user, visibility_level: visibility_level) end - let(:create_action) { { action: 'create', file_path: 'foo.txt', content: 'bar' } } - let(:update_action) { { action: 'update', file_path: 'CHANGELOG', content: 'bar' } } - let(:move_action) { { action: 'move', file_path: '.old-gitattributes', previous_path: '.gitattributes' } } - let(:delete_action) { { action: 'delete', file_path: 'CONTRIBUTING.md' } } - let(:bad_file_path) { { action: 'create', file_path: '../../etc/passwd', content: 'bar' } } - let(:bad_previous_path) { { action: 'create', previous_path: '../../etc/passwd', file_path: 'CHANGELOG', content: 'bar' } } - let(:invalid_move) { { action: 'move', file_path: 'missing_previous_path.txt' } } - - context 'with snippet file changes' do - using RSpec::Parameterized::TableSyntax - - where(:is_multi_file, :file_name, :content, :files, :status) do - true | nil | nil | [create_action] | :success - true | nil | nil | [update_action] | :success - true | nil | nil | [move_action] | :success - true | nil | nil | [delete_action] | :success - true | nil | nil | [create_action, update_action] | :success - true | 'foo.txt' | 'bar' | [create_action] | :bad_request - true | 'foo.txt' | 'bar' | nil | :bad_request - true | nil | nil | nil | :bad_request - true | 'foo.txt' | nil | [create_action] | :bad_request - true | nil | 'bar' | [create_action] | :bad_request - true | '' | nil | [create_action] | :bad_request - true | nil | '' | [create_action] | :bad_request - true | nil | nil | [bad_file_path] | :bad_request - true | nil | nil | [bad_previous_path] | :bad_request - true | nil | nil | [invalid_move] | :unprocessable_entity - - false | 'foo.txt' | 'bar' | nil | :success - false | 'foo.txt' | nil | nil | :success - false | nil | 'bar' | nil | :success - false | 'foo.txt' | 'bar' | [create_action] | :bad_request - false | nil | nil | nil | :bad_request - false | nil | '' | nil | :bad_request - false | nil | nil | [bad_file_path] | :bad_request - false | nil | nil | [bad_previous_path] | :bad_request - end - - with_them do - before do - allow_any_instance_of(Snippet).to receive(:multiple_files?).and_return(is_multi_file) - end - - it 'has the correct response' do - update_params = {}.tap do |params| - params[:files] = files if files - params[:file_name] = file_name if file_name - params[:content] = content if content - end - - update_snippet(params: update_params) - - expect(response).to have_gitlab_http_status(status) - end - end - - context 'when save fails due to a repository commit error' do - before do - allow_next_instance_of(Repository) do |instance| - allow(instance).to receive(:multi_action).and_raise(Gitlab::Git::CommitError) - end - - update_snippet(params: { files: [create_action] }) - end - - it 'returns a bad request response' do - expect(response).to have_gitlab_http_status(:bad_request) - end - end - end - - shared_examples 'snippet non-file updates' do - it 'updates a snippet non-file attributes' do - new_description = 'New description' - new_title = 'New title' - new_visibility = 'internal' - - update_snippet(params: { title: new_title, description: new_description, visibility: new_visibility }) + it_behaves_like 'snippet file updates' + it_behaves_like 'snippet non-file updates' + it_behaves_like 'invalid snippet updates' - snippet.reload + it "returns 404 for another user's snippet" do + update_snippet(requester: other_user, params: { title: 'foobar' }) - aggregate_failures do - expect(response).to have_gitlab_http_status(:ok) - expect(snippet.description).to eq(new_description) - expect(snippet.visibility).to eq(new_visibility) - expect(snippet.title).to eq(new_title) - end - end + expect(response).to have_gitlab_http_status(:not_found) + expect(json_response['message']).to eq('404 Snippet Not Found') end - it_behaves_like 'snippet non-file updates' - context 'with restricted visibility settings' do before do stub_application_setting(restricted_visibility_levels: @@ -493,33 +412,6 @@ RSpec.describe API::Snippets do it_behaves_like 'snippet non-file updates' end - it 'returns 404 for invalid snippet id' do - update_snippet(snippet_id: non_existing_record_id, params: { title: 'Foo' }) - - expect(response).to have_gitlab_http_status(:not_found) - expect(json_response['message']).to eq('404 Snippet Not Found') - end - - it "returns 404 for another user's snippet" do - update_snippet(requester: other_user, params: { title: 'foobar' }) - - expect(response).to have_gitlab_http_status(:not_found) - expect(json_response['message']).to eq('404 Snippet Not Found') - end - - it 'returns 400 for missing parameters' do - update_snippet - - expect(response).to have_gitlab_http_status(:bad_request) - end - - it 'returns 400 if title is blank' do - update_snippet(params: { title: '' }) - - expect(response).to have_gitlab_http_status(:bad_request) - expect(json_response['error']).to eq 'title is empty' - end - it_behaves_like 'update with repository actions' do let(:snippet_without_repo) { create(:personal_snippet, author: user, visibility_level: visibility_level) } end @@ -543,7 +435,7 @@ RSpec.describe API::Snippets do context 'when the snippet is public' do let(:visibility_level) { Snippet::PUBLIC } - it 'rejects the shippet' do + it 'rejects the snippet' do expect { update_snippet(params: { title: 'Foo' }) } .not_to change { snippet.reload.title } -- cgit v1.2.3