diff options
author | Matija Čupić <matteeyah@gmail.com> | 2018-02-02 19:35:00 +0100 |
---|---|---|
committer | Matija Čupić <matteeyah@gmail.com> | 2018-02-05 18:58:21 +0100 |
commit | f7ed096455c932a5ead8bafb8c937ff9cdb3070c (patch) | |
tree | 1b44c70ab934160d582e9d5cb04ecffffcf1078e | |
parent | 45a14b4f584dd1102bd81c560e4d2e7c4b34aea5 (diff) | |
download | gitlab-ce-f7ed096455c932a5ead8bafb8c937ff9cdb3070c.tar.gz |
Extract Variables controllers specs to shared_examples
3 files changed, 112 insertions, 191 deletions
diff --git a/spec/controllers/groups/variables_controller_spec.rb b/spec/controllers/groups/variables_controller_spec.rb index 8abdc1cb5b1..39a36b92bb4 100644 --- a/spec/controllers/groups/variables_controller_spec.rb +++ b/spec/controllers/groups/variables_controller_spec.rb @@ -16,15 +16,12 @@ describe Groups::VariablesController do get :show, group_id: group, format: :json end - it 'renders the ci_group_variable as json' do - subject - - expect(response).to match_response_schema('variables') - end + include_examples 'GET #show lists all variables' end - describe 'POST #update' do + describe 'PATCH #update' do let!(:variable) { create(:ci_group_variable, group: group) } + let(:owner) { group } subject do patch :update, @@ -33,89 +30,6 @@ describe Groups::VariablesController do format: :json end - let(:variable_attributes) do - { id: variable.id, - key: variable.key, - value: variable.value, - protected: variable.protected?.to_s } - end - let(:new_variable_attributes) do - { key: 'new_key', - value: 'dummy_value', - protected: 'false' } - end - - context 'with invalid new variable parameters' do - let(:variables_attributes) do - [ - variable_attributes.merge(value: 'other_value'), - new_variable_attributes.merge(key: '...?') - ] - end - - it 'does not update the existing variable' do - expect { subject }.not_to change { variable.reload.value } - end - - it 'does not create the new variable' do - expect { subject }.not_to change { group.variables.count } - end - - it 'returns a bad request response' do - subject - - expect(response).to have_gitlab_http_status(:bad_request) - end - end - - context 'with valid new variable parameters' do - let(:variables_attributes) do - [ - variable_attributes.merge(value: 'other_value'), - new_variable_attributes - ] - end - - it 'updates the existing variable' do - expect { subject }.to change { variable.reload.value }.to('other_value') - end - - it 'creates the new variable' do - expect { subject }.to change { group.variables.count }.by(1) - end - - it 'returns a successful response' do - subject - - expect(response).to have_gitlab_http_status(:ok) - end - - it 'has all variables in response' do - subject - - expect(response).to match_response_schema('variables') - end - end - - context 'with a deleted variable' do - let(:variables_attributes) { [variable_attributes.merge(_destroy: 'true')] } - - it 'destroys the variable' do - expect { subject }.to change { group.variables.count }.by(-1) - expect { variable.reload }.to raise_error ActiveRecord::RecordNotFound - end - - it 'returns a successful response' do - subject - - expect(response).to have_gitlab_http_status(:ok) - end - - it 'has all variables in response' do - subject - - expect(response).to match_response_schema('variables') - end - end + include_examples 'PATCH #update updates variables' end end diff --git a/spec/controllers/projects/variables_controller_spec.rb b/spec/controllers/projects/variables_controller_spec.rb index d2cb3dd9453..68019743be0 100644 --- a/spec/controllers/projects/variables_controller_spec.rb +++ b/spec/controllers/projects/variables_controller_spec.rb @@ -10,120 +10,27 @@ describe Projects::VariablesController do end describe 'GET #show' do - let(:variable) { create(:ci_variable) } - - before do - project.variables << variable - end + let!(:variable) { create(:ci_variable, project: project) } subject do get :show, namespace_id: project.namespace.to_param, project_id: project, format: :json end - it 'renders the ci_variable as json' do - subject - - expect(response).to match_response_schema('variables') - end + include_examples 'GET #show lists all variables' end - describe 'POST #update' do - let(:variable) { create(:ci_variable) } + describe 'PATCH #update' do + let!(:variable) { create(:ci_variable, project: project) } + let(:owner) { project } subject do patch :update, - namespace_id: project.namespace.to_param, project_id: project, + namespace_id: project.namespace.to_param, + project_id: project, variables_attributes: variables_attributes, format: :json end - let(:variable_attributes) do - { id: variable.id, - key: variable.key, - value: variable.value, - protected: variable.protected?.to_s } - end - let(:new_variable_attributes) do - { key: 'new_key', - value: 'dummy_value', - protected: 'false' } - end - - before do - project.variables << variable - end - - context 'with invalid new variable parameters' do - let(:variables_attributes) do - [ - variable_attributes.merge(value: 'other_value'), - new_variable_attributes.merge(key: '...?') - ] - end - - it 'does not update the existing variable' do - expect { subject }.not_to change { variable.reload.value } - end - - it 'does not create the new variable' do - expect { subject }.not_to change { project.variables.count } - end - - it 'returns a bad request response' do - subject - - expect(response).to have_gitlab_http_status(:bad_request) - end - end - - context 'with valid new variable parameters' do - let(:variables_attributes) do - [ - variable_attributes.merge(value: 'other_value'), - new_variable_attributes - ] - end - - it 'updates the existing variable' do - expect { subject }.to change { variable.reload.value }.to('other_value') - end - - it 'creates the new variable' do - expect { subject }.to change { project.variables.count }.by(1) - end - - it 'returns a successful response' do - subject - - expect(response).to have_gitlab_http_status(:ok) - end - - it 'has all variables in response' do - subject - - expect(response).to match_response_schema('variables') - end - end - - context 'with a deleted variable' do - let(:variables_attributes) { [variable_attributes.merge(_destroy: 'true')] } - - it 'destroys the variable' do - expect { subject }.to change { project.variables.count }.by(-1) - expect { variable.reload }.to raise_error ActiveRecord::RecordNotFound - end - - it 'returns a successful response' do - subject - - expect(response).to have_gitlab_http_status(:ok) - end - - it 'has all variables in response' do - subject - - expect(response).to match_response_schema('variables') - end - end + include_examples 'PATCH #update updates variables' end end diff --git a/spec/support/shared_examples/controllers/variables_shared_examples.rb b/spec/support/shared_examples/controllers/variables_shared_examples.rb new file mode 100644 index 00000000000..3f1690e71dd --- /dev/null +++ b/spec/support/shared_examples/controllers/variables_shared_examples.rb @@ -0,0 +1,100 @@ +shared_examples 'GET #show lists all variables' do + it 'renders the variables as json' do + subject + + expect(response).to match_response_schema('variables') + end + + it 'has only one variable' do + subject + + expect(json_response['variables'].count).to eq(1) + end +end + +shared_examples 'PATCH #update updates variables' do + let(:variable_attributes) do + { id: variable.id, + key: variable.key, + value: variable.value, + protected: variable.protected?.to_s } + end + let(:new_variable_attributes) do + { key: 'new_key', + value: 'dummy_value', + protected: 'false' } + end + + context 'with invalid new variable parameters' do + let(:variables_attributes) do + [ + variable_attributes.merge(value: 'other_value'), + new_variable_attributes.merge(key: '...?') + ] + end + + it 'does not update the existing variable' do + expect { subject }.not_to change { variable.reload.value } + end + + it 'does not create the new variable' do + expect { subject }.not_to change { owner.variables.count } + end + + it 'returns a bad request response' do + subject + + expect(response).to have_gitlab_http_status(:bad_request) + end + end + + context 'with valid new variable parameters' do + let(:variables_attributes) do + [ + variable_attributes.merge(value: 'other_value'), + new_variable_attributes + ] + end + + it 'updates the existing variable' do + expect { subject }.to change { variable.reload.value }.to('other_value') + end + + it 'creates the new variable' do + expect { subject }.to change { owner.variables.count }.by(1) + end + + it 'returns a successful response' do + subject + + expect(response).to have_gitlab_http_status(:ok) + end + + it 'has all variables in response' do + subject + + expect(response).to match_response_schema('variables') + end + end + + context 'with a deleted variable' do + let(:variables_attributes) { [variable_attributes.merge(_destroy: 'true')] } + + it 'destroys the variable' do + expect { subject }.to change { owner.variables.count }.by(-1) + expect { variable.reload }.to raise_error ActiveRecord::RecordNotFound + end + + it 'returns a successful response' do + subject + + expect(response).to have_gitlab_http_status(:ok) + end + + it 'has all variables in response' do + subject + + expect(response).to match_response_schema('variables') + end + end +end |