diff options
Diffstat (limited to 'spec/requests/api/badges_spec.rb')
-rw-r--r-- | spec/requests/api/badges_spec.rb | 208 |
1 files changed, 104 insertions, 104 deletions
diff --git a/spec/requests/api/badges_spec.rb b/spec/requests/api/badges_spec.rb index 1271324a2ba..9578905d8fc 100644 --- a/spec/requests/api/badges_spec.rb +++ b/spec/requests/api/badges_spec.rb @@ -1,7 +1,7 @@ -require 'spec_helper' +require "spec_helper" describe API::Badges do - let(:maintainer) { create(:user, username: 'maintainer_user') } + let(:maintainer) { create(:user, username: "maintainer_user") } let(:developer) { create(:user) } let(:access_requester) { create(:user) } let(:stranger) { create(:user) } @@ -9,27 +9,27 @@ describe API::Badges do let(:project) { setup_project } let!(:group) { setup_group } - shared_context 'source helpers' do + shared_context "source helpers" do def get_source(source_type) - source_type == 'project' ? project : group + source_type == "project" ? project : group end end - shared_examples 'GET /:sources/:id/badges' do |source_type| - include_context 'source helpers' + shared_examples "GET /:sources/:id/badges" do |source_type| + include_context "source helpers" let(:source) { get_source(source_type) } context "with :sources == #{source_type.pluralize}" do - it_behaves_like 'a 404 response when source is private' do + it_behaves_like "a 404 response when source is private" do let(:route) { get api("/#{source_type.pluralize}/#{source.id}/badges", stranger) } end %i[maintainer developer access_requester stranger].each do |type| context "when authenticated as a #{type}" do - it 'returns 200' do + it "returns 200" do user = public_send(type) - badges_count = source_type == 'project' ? 3 : 2 + badges_count = source_type == "project" ? 3 : 2 get api("/#{source_type.pluralize}/#{source.id}/badges", user) @@ -41,50 +41,50 @@ describe API::Badges do end end - it 'avoids N+1 queries' do + it "avoids N+1 queries" do # Establish baseline get api("/#{source_type.pluralize}/#{source.id}/badges", maintainer) - control = ActiveRecord::QueryRecorder.new do + control = ActiveRecord::QueryRecorder.new { get api("/#{source_type.pluralize}/#{source.id}/badges", maintainer) - end + } project.add_developer(create(:user)) - expect do + expect { get api("/#{source_type.pluralize}/#{source.id}/badges", maintainer) - end.not_to exceed_query_limit(control) + }.not_to exceed_query_limit(control) end end end - shared_examples 'GET /:sources/:id/badges/:badge_id' do |source_type| - include_context 'source helpers' + shared_examples "GET /:sources/:id/badges/:badge_id" do |source_type| + include_context "source helpers" let(:source) { get_source(source_type) } context "with :sources == #{source_type.pluralize}" do - it_behaves_like 'a 404 response when source is private' do + it_behaves_like "a 404 response when source is private" do let(:route) { get api("/#{source_type.pluralize}/#{source.id}/badges/#{developer.id}", stranger) } end - context 'when authenticated as a non-member' do + context "when authenticated as a non-member" do %i[maintainer developer access_requester stranger].each do |type| let(:badge) { source.badges.first } context "as a #{type}" do - it 'returns 200' do + it "returns 200" do user = public_send(type) get api("/#{source_type.pluralize}/#{source.id}/badges/#{badge.id}", user) expect(response).to have_gitlab_http_status(200) - expect(json_response['id']).to eq(badge.id) - expect(json_response['link_url']).to eq(badge.link_url) - expect(json_response['rendered_link_url']).to eq(badge.rendered_link_url) - expect(json_response['image_url']).to eq(badge.image_url) - expect(json_response['rendered_image_url']).to eq(badge.rendered_image_url) - expect(json_response['kind']).to eq source_type + expect(json_response["id"]).to eq(badge.id) + expect(json_response["link_url"]).to eq(badge.link_url) + expect(json_response["rendered_link_url"]).to eq(badge.rendered_link_url) + expect(json_response["image_url"]).to eq(badge.image_url) + expect(json_response["rendered_image_url"]).to eq(badge.rendered_image_url) + expect(json_response["kind"]).to eq source_type end end end @@ -92,29 +92,29 @@ describe API::Badges do end end - shared_examples 'POST /:sources/:id/badges' do |source_type| - include_context 'source helpers' + shared_examples "POST /:sources/:id/badges" do |source_type| + include_context "source helpers" let(:source) { get_source(source_type) } - let(:example_url) { 'http://www.example.com' } - let(:example_url2) { 'http://www.example1.com' } + let(:example_url) { "http://www.example.com" } + let(:example_url2) { "http://www.example1.com" } context "with :sources == #{source_type.pluralize}" do - it_behaves_like 'a 404 response when source is private' do + it_behaves_like "a 404 response when source is private" do let(:route) do post api("/#{source_type.pluralize}/#{source.id}/badges", stranger), - params: { link_url: example_url, image_url: example_url2 } + params: {link_url: example_url, image_url: example_url2} end end - context 'when authenticated as a non-member or member with insufficient rights' do + context "when authenticated as a non-member or member with insufficient rights" do %i[access_requester stranger developer].each do |type| context "as a #{type}" do - it 'returns 403' do + it "returns 403" do user = public_send(type) post api("/#{source_type.pluralize}/#{source.id}/badges", user), - params: { link_url: example_url, image_url: example_url2 } + params: {link_url: example_url, image_url: example_url2} expect(response).to have_gitlab_http_status(403) end @@ -122,69 +122,69 @@ describe API::Badges do end end - context 'when authenticated as a maintainer/owner' do - it 'creates a new badge' do - expect do + context "when authenticated as a maintainer/owner" do + it "creates a new badge" do + expect { post api("/#{source_type.pluralize}/#{source.id}/badges", maintainer), - params: { link_url: example_url, image_url: example_url2 } + params: {link_url: example_url, image_url: example_url2} expect(response).to have_gitlab_http_status(201) - end.to change { source.badges.count }.by(1) + }.to change { source.badges.count }.by(1) - expect(json_response['link_url']).to eq(example_url) - expect(json_response['image_url']).to eq(example_url2) - expect(json_response['kind']).to eq source_type + expect(json_response["link_url"]).to eq(example_url) + expect(json_response["image_url"]).to eq(example_url2) + expect(json_response["kind"]).to eq source_type end end - it 'returns 400 when link_url is not given' do + it "returns 400 when link_url is not given" do post api("/#{source_type.pluralize}/#{source.id}/badges", maintainer), - params: { link_url: example_url } + params: {link_url: example_url} expect(response).to have_gitlab_http_status(400) end - it 'returns 400 when image_url is not given' do + it "returns 400 when image_url is not given" do post api("/#{source_type.pluralize}/#{source.id}/badges", maintainer), - params: { image_url: example_url2 } + params: {image_url: example_url2} expect(response).to have_gitlab_http_status(400) end - it 'returns 400 when link_url or image_url is not valid' do + it "returns 400 when link_url or image_url is not valid" do post api("/#{source_type.pluralize}/#{source.id}/badges", maintainer), - params: { link_url: 'whatever', image_url: 'whatever' } + params: {link_url: "whatever", image_url: "whatever"} expect(response).to have_gitlab_http_status(400) end end end - shared_examples 'PUT /:sources/:id/badges/:badge_id' do |source_type| - include_context 'source helpers' + shared_examples "PUT /:sources/:id/badges/:badge_id" do |source_type| + include_context "source helpers" let(:source) { get_source(source_type) } context "with :sources == #{source_type.pluralize}" do let(:badge) { source.badges.first } - let(:example_url) { 'http://www.example.com' } - let(:example_url2) { 'http://www.example1.com' } + let(:example_url) { "http://www.example.com" } + let(:example_url2) { "http://www.example1.com" } - it_behaves_like 'a 404 response when source is private' do + it_behaves_like "a 404 response when source is private" do let(:route) do put api("/#{source_type.pluralize}/#{source.id}/badges/#{badge.id}", stranger), - params: { link_url: example_url } + params: {link_url: example_url} end end - context 'when authenticated as a non-member or member with insufficient rights' do + context "when authenticated as a non-member or member with insufficient rights" do %i[access_requester stranger developer].each do |type| context "as a #{type}" do - it 'returns 403' do + it "returns 403" do user = public_send(type) put api("/#{source_type.pluralize}/#{source.id}/badges/#{badge.id}", user), - params: { link_url: example_url } + params: {link_url: example_url} expect(response).to have_gitlab_http_status(403) end @@ -192,43 +192,43 @@ describe API::Badges do end end - context 'when authenticated as a maintainer/owner' do - it 'updates the member' do + context "when authenticated as a maintainer/owner" do + it "updates the member" do put api("/#{source_type.pluralize}/#{source.id}/badges/#{badge.id}", maintainer), - params: { link_url: example_url, image_url: example_url2 } + params: {link_url: example_url, image_url: example_url2} expect(response).to have_gitlab_http_status(200) - expect(json_response['link_url']).to eq(example_url) - expect(json_response['image_url']).to eq(example_url2) - expect(json_response['kind']).to eq source_type + expect(json_response["link_url"]).to eq(example_url) + expect(json_response["image_url"]).to eq(example_url2) + expect(json_response["kind"]).to eq source_type end end - it 'returns 400 when link_url or image_url is not valid' do + it "returns 400 when link_url or image_url is not valid" do put api("/#{source_type.pluralize}/#{source.id}/badges/#{badge.id}", maintainer), - params: { link_url: 'whatever', image_url: 'whatever' } + params: {link_url: "whatever", image_url: "whatever"} expect(response).to have_gitlab_http_status(400) end end end - shared_examples 'DELETE /:sources/:id/badges/:badge_id' do |source_type| - include_context 'source helpers' + shared_examples "DELETE /:sources/:id/badges/:badge_id" do |source_type| + include_context "source helpers" let(:source) { get_source(source_type) } context "with :sources == #{source_type.pluralize}" do let(:badge) { source.badges.first } - it_behaves_like 'a 404 response when source is private' do + it_behaves_like "a 404 response when source is private" do let(:route) { delete api("/#{source_type.pluralize}/#{source.id}/badges/#{badge.id}", stranger) } end - context 'when authenticated as a non-member or member with insufficient rights' do + context "when authenticated as a non-member or member with insufficient rights" do %i[access_requester developer stranger].each do |type| context "as a #{type}" do - it 'returns 403' do + it "returns 403" do user = public_send(type) delete api("/#{source_type.pluralize}/#{source.id}/badges/#{badge.id}", user) @@ -239,21 +239,21 @@ describe API::Badges do end end - context 'when authenticated as a maintainer/owner' do - it 'deletes the badge' do - expect do + context "when authenticated as a maintainer/owner" do + it "deletes the badge" do + expect { delete api("/#{source_type.pluralize}/#{source.id}/badges/#{badge.id}", maintainer) expect(response).to have_gitlab_http_status(204) - end.to change { source.badges.count }.by(-1) + }.to change { source.badges.count }.by(-1) end - it_behaves_like '412 response' do + it_behaves_like "412 response" do let(:request) { api("/#{source_type.pluralize}/#{source.id}/badges/#{badge.id}", maintainer) } end end - it 'returns 404 if badge does not exist' do + it "returns 404 if badge does not exist" do delete api("/#{source_type.pluralize}/#{source.id}/badges/123", maintainer) expect(response).to have_gitlab_http_status(404) @@ -261,24 +261,24 @@ describe API::Badges do end end - shared_examples 'GET /:sources/:id/badges/render' do |source_type| - include_context 'source helpers' + shared_examples "GET /:sources/:id/badges/render" do |source_type| + include_context "source helpers" let(:source) { get_source(source_type) } - let(:example_url) { 'http://www.example.com' } - let(:example_url2) { 'http://www.example1.com' } + let(:example_url) { "http://www.example.com" } + let(:example_url2) { "http://www.example1.com" } context "with :sources == #{source_type.pluralize}" do - it_behaves_like 'a 404 response when source is private' do + it_behaves_like "a 404 response when source is private" do let(:route) do get api("/#{source_type.pluralize}/#{source.id}/badges/render?link_url=#{example_url}&image_url=#{example_url2}", stranger) end end - context 'when authenticated as a non-member or member with insufficient rights' do + context "when authenticated as a non-member or member with insufficient rights" do %i[access_requester stranger developer].each do |type| context "as a #{type}" do - it 'returns 403' do + it "returns 403" do user = public_send(type) get api("/#{source_type.pluralize}/#{source.id}/badges/render?link_url=#{example_url}&image_url=#{example_url2}", user) @@ -289,33 +289,33 @@ describe API::Badges do end end - context 'when authenticated as a maintainer/owner' do - it 'gets the rendered badge values' do + context "when authenticated as a maintainer/owner" do + it "gets the rendered badge values" do get api("/#{source_type.pluralize}/#{source.id}/badges/render?link_url=#{example_url}&image_url=#{example_url2}", maintainer) expect(response).to have_gitlab_http_status(200) - expect(json_response.keys).to contain_exactly('link_url', 'rendered_link_url', 'image_url', 'rendered_image_url') - expect(json_response['link_url']).to eq(example_url) - expect(json_response['image_url']).to eq(example_url2) - expect(json_response['rendered_link_url']).to eq(example_url) - expect(json_response['rendered_image_url']).to eq(example_url2) + expect(json_response.keys).to contain_exactly("link_url", "rendered_link_url", "image_url", "rendered_image_url") + expect(json_response["link_url"]).to eq(example_url) + expect(json_response["image_url"]).to eq(example_url2) + expect(json_response["rendered_link_url"]).to eq(example_url) + expect(json_response["rendered_image_url"]).to eq(example_url2) end end - it 'returns 400 when link_url is not given' do + it "returns 400 when link_url is not given" do get api("/#{source_type.pluralize}/#{source.id}/badges/render?link_url=#{example_url}", maintainer) expect(response).to have_gitlab_http_status(400) end - it 'returns 400 when image_url is not given' do + it "returns 400 when image_url is not given" do get api("/#{source_type.pluralize}/#{source.id}/badges/render?image_url=#{example_url}", maintainer) expect(response).to have_gitlab_http_status(400) end - it 'returns 400 when link_url or image_url is not valid' do + it "returns 400 when link_url or image_url is not valid" do get api("/#{source_type.pluralize}/#{source.id}/badges/render?link_url=whatever&image_url=whatever", maintainer) expect(response).to have_gitlab_http_status(400) @@ -323,9 +323,9 @@ describe API::Badges do end end - context 'when deleting a badge' do - context 'and the source is a project' do - it 'cannot delete badges owned by the project group' do + context "when deleting a badge" do + context "and the source is a project" do + it "cannot delete badges owned by the project group" do delete api("/projects/#{project.id}/badges/#{project_group.badges.first.id}", maintainer) expect(response).to have_gitlab_http_status(403) @@ -333,14 +333,14 @@ describe API::Badges do end end - describe 'Endpoints' do - %w(project group).each do |source_type| - it_behaves_like 'GET /:sources/:id/badges', source_type - it_behaves_like 'GET /:sources/:id/badges/:badge_id', source_type - it_behaves_like 'GET /:sources/:id/badges/render', source_type - it_behaves_like 'POST /:sources/:id/badges', source_type - it_behaves_like 'PUT /:sources/:id/badges/:badge_id', source_type - it_behaves_like 'DELETE /:sources/:id/badges/:badge_id', source_type + describe "Endpoints" do + %w[project group].each do |source_type| + it_behaves_like "GET /:sources/:id/badges", source_type + it_behaves_like "GET /:sources/:id/badges/:badge_id", source_type + it_behaves_like "GET /:sources/:id/badges/render", source_type + it_behaves_like "POST /:sources/:id/badges", source_type + it_behaves_like "PUT /:sources/:id/badges/:badge_id", source_type + it_behaves_like "DELETE /:sources/:id/badges/:badge_id", source_type end end |