Merge branch '57171-operations-controller-spec-refactor' into 'master'
Refactor operations controller spec Closes #57171 See merge request gitlab-org/gitlab-ce!27558
This commit is contained in:
commit
674e5e5baa
|
@ -11,15 +11,118 @@ describe Projects::Settings::OperationsController do
|
|||
project.add_maintainer(user)
|
||||
end
|
||||
|
||||
context 'error tracking' do
|
||||
describe 'GET #show' do
|
||||
it 'renders show template' do
|
||||
get :show, params: project_params(project)
|
||||
shared_examples 'PATCHable' do
|
||||
let(:operations_update_service) { instance_double(::Projects::Operations::UpdateService) }
|
||||
let(:operations_url) { project_settings_operations_url(project) }
|
||||
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response).to render_template(:show)
|
||||
let(:permitted_params) do
|
||||
ActionController::Parameters.new(params).permit!
|
||||
end
|
||||
|
||||
context 'format json' do
|
||||
context 'when update succeeds' do
|
||||
it 'returns success status' do
|
||||
stub_operations_update_service_returning(status: :success)
|
||||
|
||||
patch :update,
|
||||
params: project_params(project, params),
|
||||
format: :json
|
||||
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response).to eq('status' => 'success')
|
||||
expect(flash[:notice]).to eq('Your changes have been saved')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when update fails' do
|
||||
it 'returns error' do
|
||||
stub_operations_update_service_returning(
|
||||
status: :error,
|
||||
message: 'error message'
|
||||
)
|
||||
|
||||
patch :update,
|
||||
params: project_params(project, params),
|
||||
format: :json
|
||||
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
expect(json_response['message']).to eq('error message')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def stub_operations_update_service_returning(return_value = {})
|
||||
expect(::Projects::Operations::UpdateService)
|
||||
.to receive(:new).with(project, user, permitted_params)
|
||||
.and_return(operations_update_service)
|
||||
expect(operations_update_service).to receive(:execute)
|
||||
.and_return(return_value)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET #show' do
|
||||
it 'renders show template' do
|
||||
get :show, params: project_params(project)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(response).to render_template(:show)
|
||||
end
|
||||
|
||||
context 'with insufficient permissions' do
|
||||
before do
|
||||
project.add_reporter(user)
|
||||
end
|
||||
|
||||
it 'renders 404' do
|
||||
get :show, params: project_params(project)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
context 'as an anonymous user' do
|
||||
before do
|
||||
sign_out(user)
|
||||
end
|
||||
|
||||
it 'redirects to signup page' do
|
||||
get :show, params: project_params(project)
|
||||
|
||||
expect(response).to redirect_to(new_user_session_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PATCH #update' do
|
||||
context 'with insufficient permissions' do
|
||||
before do
|
||||
project.add_reporter(user)
|
||||
end
|
||||
|
||||
it 'renders 404' do
|
||||
patch :update, params: project_params(project)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
context 'as an anonymous user' do
|
||||
before do
|
||||
sign_out(user)
|
||||
end
|
||||
|
||||
it 'redirects to signup page' do
|
||||
patch :update, params: project_params(project)
|
||||
|
||||
expect(response).to redirect_to(new_user_session_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'error tracking' do
|
||||
describe 'GET #show' do
|
||||
context 'with existing setting' do
|
||||
let!(:error_tracking_setting) do
|
||||
create(:project_error_tracking_setting, project: project)
|
||||
|
@ -40,37 +143,10 @@ describe Projects::Settings::OperationsController do
|
|||
expect(controller.helpers.error_tracking_setting).to be_new_record
|
||||
end
|
||||
end
|
||||
|
||||
context 'with insufficient permissions' do
|
||||
before do
|
||||
project.add_reporter(user)
|
||||
end
|
||||
|
||||
it 'renders 404' do
|
||||
get :show, params: project_params(project)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
context 'as an anonymous user' do
|
||||
before do
|
||||
sign_out(user)
|
||||
end
|
||||
|
||||
it 'redirects to signup page' do
|
||||
get :show, params: project_params(project)
|
||||
|
||||
expect(response).to redirect_to(new_user_session_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'PATCH #update' do
|
||||
let(:operations_update_service) { spy(:operations_update_service) }
|
||||
let(:operations_url) { project_settings_operations_url(project) }
|
||||
|
||||
let(:error_tracking_params) do
|
||||
let(:params) do
|
||||
{
|
||||
error_tracking_setting_attributes: {
|
||||
enabled: '1',
|
||||
|
@ -86,79 +162,7 @@ describe Projects::Settings::OperationsController do
|
|||
}
|
||||
end
|
||||
|
||||
let(:error_tracking_permitted) do
|
||||
ActionController::Parameters.new(error_tracking_params).permit!
|
||||
end
|
||||
|
||||
context 'format json' do
|
||||
context 'when update succeeds' do
|
||||
before do
|
||||
stub_operations_update_service_returning(status: :success)
|
||||
end
|
||||
|
||||
it 'returns success status' do
|
||||
patch :update,
|
||||
params: project_params(project, error_tracking_params),
|
||||
format: :json
|
||||
|
||||
expect(response).to have_gitlab_http_status(:ok)
|
||||
expect(json_response).to eq('status' => 'success')
|
||||
expect(flash[:notice]).to eq('Your changes have been saved')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when update fails' do
|
||||
before do
|
||||
stub_operations_update_service_returning(
|
||||
status: :error,
|
||||
message: 'error message'
|
||||
)
|
||||
end
|
||||
|
||||
it 'returns error' do
|
||||
patch :update,
|
||||
params: project_params(project, error_tracking_params),
|
||||
format: :json
|
||||
|
||||
expect(response).to have_gitlab_http_status(:bad_request)
|
||||
expect(json_response['message']).not_to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'with insufficient permissions' do
|
||||
before do
|
||||
project.add_reporter(user)
|
||||
end
|
||||
|
||||
it 'renders 404' do
|
||||
patch :update, params: project_params(project)
|
||||
|
||||
expect(response).to have_gitlab_http_status(:not_found)
|
||||
end
|
||||
end
|
||||
|
||||
context 'as an anonymous user' do
|
||||
before do
|
||||
sign_out(user)
|
||||
end
|
||||
|
||||
it 'redirects to signup page' do
|
||||
patch :update, params: project_params(project)
|
||||
|
||||
expect(response).to redirect_to(new_user_session_path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def stub_operations_update_service_returning(return_value = {})
|
||||
expect(::Projects::Operations::UpdateService)
|
||||
.to receive(:new).with(project, user, error_tracking_permitted)
|
||||
.and_return(operations_update_service)
|
||||
expect(operations_update_service).to receive(:execute)
|
||||
.and_return(return_value)
|
||||
it_behaves_like 'PATCHable'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue