summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatija Čupić <matteeyah@gmail.com>2018-02-02 19:35:00 +0100
committerMatija Čupić <matteeyah@gmail.com>2018-02-05 18:58:21 +0100
commitf7ed096455c932a5ead8bafb8c937ff9cdb3070c (patch)
tree1b44c70ab934160d582e9d5cb04ecffffcf1078e
parent45a14b4f584dd1102bd81c560e4d2e7c4b34aea5 (diff)
downloadgitlab-ce-f7ed096455c932a5ead8bafb8c937ff9cdb3070c.tar.gz
Extract Variables controllers specs to shared_examples
-rw-r--r--spec/controllers/groups/variables_controller_spec.rb94
-rw-r--r--spec/controllers/projects/variables_controller_spec.rb109
-rw-r--r--spec/support/shared_examples/controllers/variables_shared_examples.rb100
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