diff options
Diffstat (limited to 'spec/requests/api/broadcast_messages_spec.rb')
-rw-r--r-- | spec/requests/api/broadcast_messages_spec.rb | 87 |
1 files changed, 41 insertions, 46 deletions
diff --git a/spec/requests/api/broadcast_messages_spec.rb b/spec/requests/api/broadcast_messages_spec.rb index 5cbb7dbfa12..530c81364a8 100644 --- a/spec/requests/api/broadcast_messages_spec.rb +++ b/spec/requests/api/broadcast_messages_spec.rb @@ -2,16 +2,16 @@ require 'spec_helper' -RSpec.describe API::BroadcastMessages, feature_category: :onboarding do - let_it_be(:user) { create(:user) } +RSpec.describe API::BroadcastMessages, :aggregate_failures, feature_category: :onboarding do let_it_be(:admin) { create(:admin) } let_it_be(:message) { create(:broadcast_message) } + let_it_be(:path) { '/broadcast_messages' } describe 'GET /broadcast_messages' do it 'returns an Array of BroadcastMessages' do create(:broadcast_message) - get api('/broadcast_messages') + get api(path) expect(response).to have_gitlab_http_status(:ok) expect(response).to include_pagination_headers @@ -22,8 +22,10 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do end describe 'GET /broadcast_messages/:id' do + let_it_be(:path) { "#{path}/#{message.id}" } + it 'returns the specified message' do - get api("/broadcast_messages/#{message.id}") + get api(path) expect(response).to have_gitlab_http_status(:ok) expect(json_response['id']).to eq message.id @@ -33,16 +35,14 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do end describe 'POST /broadcast_messages' do - it 'returns a 401 for anonymous users' do - post api('/broadcast_messages'), params: attributes_for(:broadcast_message) - - expect(response).to have_gitlab_http_status(:unauthorized) + it_behaves_like 'POST request permissions for admin mode' do + let(:params) { { message: 'Test message' } } end - it 'returns a 403 for users' do - post api('/broadcast_messages', user), params: attributes_for(:broadcast_message) + it 'returns a 401 for anonymous users' do + post api(path), params: attributes_for(:broadcast_message) - expect(response).to have_gitlab_http_status(:forbidden) + expect(response).to have_gitlab_http_status(:unauthorized) end context 'as an admin' do @@ -50,7 +50,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do attrs = attributes_for(:broadcast_message) attrs.delete(:message) - post api('/broadcast_messages', admin), params: attrs + post api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:bad_request) expect(json_response['error']).to eq 'message is missing' @@ -59,7 +59,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'defines sane default start and end times' do time = Time.zone.parse('2016-07-02 10:11:12') travel_to(time) do - post api('/broadcast_messages', admin), params: { message: 'Test message' } + post api(path, admin, admin_mode: true), params: { message: 'Test message' } expect(response).to have_gitlab_http_status(:created) expect(json_response['starts_at']).to eq '2016-07-02T10:11:12.000Z' @@ -70,7 +70,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'accepts a custom background and foreground color' do attrs = attributes_for(:broadcast_message, color: '#000000', font: '#cecece') - post api('/broadcast_messages', admin), params: attrs + post api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:created) expect(json_response['color']).to eq attrs[:color] @@ -81,7 +81,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do target_access_levels = [Gitlab::Access::GUEST, Gitlab::Access::DEVELOPER] attrs = attributes_for(:broadcast_message, target_access_levels: target_access_levels) - post api('/broadcast_messages', admin), params: attrs + post api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:created) expect(json_response['target_access_levels']).to eq attrs[:target_access_levels] @@ -90,7 +90,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'accepts a target path' do attrs = attributes_for(:broadcast_message, target_path: "*/welcome") - post api('/broadcast_messages', admin), params: attrs + post api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:created) expect(json_response['target_path']).to eq attrs[:target_path] @@ -99,7 +99,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'accepts a broadcast type' do attrs = attributes_for(:broadcast_message, broadcast_type: 'notification') - post api('/broadcast_messages', admin), params: attrs + post api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:created) expect(json_response['broadcast_type']).to eq attrs[:broadcast_type] @@ -108,7 +108,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'uses default broadcast type' do attrs = attributes_for(:broadcast_message) - post api('/broadcast_messages', admin), params: attrs + post api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:created) expect(json_response['broadcast_type']).to eq 'banner' @@ -117,7 +117,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'errors for invalid broadcast type' do attrs = attributes_for(:broadcast_message, broadcast_type: 'invalid-type') - post api('/broadcast_messages', admin), params: attrs + post api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:bad_request) end @@ -125,7 +125,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'accepts an active dismissable value' do attrs = { message: 'new message', dismissable: true } - post api('/broadcast_messages', admin), params: attrs + post api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:created) expect(json_response['dismissable']).to eq true @@ -134,27 +134,25 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do end describe 'PUT /broadcast_messages/:id' do - it 'returns a 401 for anonymous users' do - put api("/broadcast_messages/#{message.id}"), - params: attributes_for(:broadcast_message) + let_it_be(:path) { "#{path}/#{message.id}" } - expect(response).to have_gitlab_http_status(:unauthorized) + it_behaves_like 'PUT request permissions for admin mode' do + let(:params) { { message: 'Test message' } } end - it 'returns a 403 for users' do - put api("/broadcast_messages/#{message.id}", user), + it 'returns a 401 for anonymous users' do + put api(path), params: attributes_for(:broadcast_message) - expect(response).to have_gitlab_http_status(:forbidden) + expect(response).to have_gitlab_http_status(:unauthorized) end context 'as an admin' do it 'accepts new background and foreground colors' do attrs = { color: '#000000', font: '#cecece' } - put api("/broadcast_messages/#{message.id}", admin), params: attrs + put api(path, admin, admin_mode: true), params: attrs - expect(response).to have_gitlab_http_status(:ok) expect(json_response['color']).to eq attrs[:color] expect(json_response['font']).to eq attrs[:font] end @@ -164,7 +162,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do travel_to(time) do attrs = { starts_at: Time.zone.now, ends_at: 3.hours.from_now } - put api("/broadcast_messages/#{message.id}", admin), params: attrs + put api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:ok) expect(json_response['starts_at']).to eq '2016-07-02T10:11:12.000Z' @@ -175,7 +173,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'accepts a new message' do attrs = { message: 'new message' } - put api("/broadcast_messages/#{message.id}", admin), params: attrs + put api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:ok) expect { message.reload }.to change { message.message }.to('new message') @@ -184,7 +182,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'accepts a new target_access_levels' do attrs = { target_access_levels: [Gitlab::Access::MAINTAINER] } - put api("/broadcast_messages/#{message.id}", admin), params: attrs + put api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:ok) expect(json_response['target_access_levels']).to eq attrs[:target_access_levels] @@ -193,7 +191,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'accepts a new target_path' do attrs = { target_path: '*/welcome' } - put api("/broadcast_messages/#{message.id}", admin), params: attrs + put api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:ok) expect(json_response['target_path']).to eq attrs[:target_path] @@ -202,7 +200,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'accepts a new broadcast_type' do attrs = { broadcast_type: 'notification' } - put api("/broadcast_messages/#{message.id}", admin), params: attrs + put api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:ok) expect(json_response['broadcast_type']).to eq attrs[:broadcast_type] @@ -211,7 +209,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'errors for invalid broadcast type' do attrs = { broadcast_type: 'invalid-type' } - put api("/broadcast_messages/#{message.id}", admin), params: attrs + put api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:bad_request) end @@ -219,7 +217,7 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do it 'accepts a new dismissable value' do attrs = { message: 'new message', dismissable: true } - put api("/broadcast_messages/#{message.id}", admin), params: attrs + put api(path, admin, admin_mode: true), params: attrs expect(response).to have_gitlab_http_status(:ok) expect(json_response['dismissable']).to eq true @@ -228,27 +226,24 @@ RSpec.describe API::BroadcastMessages, feature_category: :onboarding do end describe 'DELETE /broadcast_messages/:id' do - it 'returns a 401 for anonymous users' do - delete api("/broadcast_messages/#{message.id}"), - params: attributes_for(:broadcast_message) + let_it_be(:path) { "#{path}/#{message.id}" } - expect(response).to have_gitlab_http_status(:unauthorized) - end + it_behaves_like 'DELETE request permissions for admin mode' - it 'returns a 403 for users' do - delete api("/broadcast_messages/#{message.id}", user), + it 'returns a 401 for anonymous users' do + delete api(path), params: attributes_for(:broadcast_message) - expect(response).to have_gitlab_http_status(:forbidden) + expect(response).to have_gitlab_http_status(:unauthorized) end it_behaves_like '412 response' do - let(:request) { api("/broadcast_messages/#{message.id}", admin) } + let(:request) { api("/broadcast_messages/#{message.id}", admin, admin_mode: true) } end it 'deletes the broadcast message for admins' do expect do - delete api("/broadcast_messages/#{message.id}", admin) + delete api(path, admin, admin_mode: true) expect(response).to have_gitlab_http_status(:no_content) end.to change { BroadcastMessage.count }.by(-1) |