summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/api/variables.rb20
-rw-r--r--spec/factories/ci/variables.rb2
-rw-r--r--spec/requests/api/variables_spec.rb38
3 files changed, 59 insertions, 1 deletions
diff --git a/lib/api/variables.rb b/lib/api/variables.rb
index dac2ba679c7..fc63ac2f56a 100644
--- a/lib/api/variables.rb
+++ b/lib/api/variables.rb
@@ -41,6 +41,24 @@ module API
present variables.first, with: Entities::Variable
end
+ # Create a new variable in project
+ #
+ # Parameters:
+ # id (required) - The ID of a project
+ # key (required) - The key of variable being created
+ # value (required) - The value of variable being created
+ # Example Request:
+ # POST /projects/:id/variables
+ post ':id/variables' do
+ required_attributes! [:key, :value]
+
+ variable = user_project.variables.create(key: params[:key], value: params[:value])
+ return render_validation_error!(variable) unless variable.valid?
+ variable.save!
+
+ present variable, with: Entities::Variable
+ end
+
# Update existing variable of a project
#
# Parameters:
@@ -75,6 +93,8 @@ module API
return not_found!('Variable') unless variable
variable.destroy
+
+ present variable, with: Entities::Variable
end
end
end
diff --git a/spec/factories/ci/variables.rb b/spec/factories/ci/variables.rb
index c3dcb678da7..a19b9fc72f2 100644
--- a/spec/factories/ci/variables.rb
+++ b/spec/factories/ci/variables.rb
@@ -16,7 +16,7 @@
FactoryGirl.define do
factory :ci_variable, class: Ci::Variable do
- id 1
+ id 10
key 'TEST_VARIABLE_1'
value 'VALUE_1'
diff --git a/spec/requests/api/variables_spec.rb b/spec/requests/api/variables_spec.rb
index b35ee2d32d1..bf0dd77473a 100644
--- a/spec/requests/api/variables_spec.rb
+++ b/spec/requests/api/variables_spec.rb
@@ -79,6 +79,44 @@ describe API::API, api: true do
end
end
+ describe 'POST /projects/:id/variables' do
+ context 'authorized user with proper permissions' do
+ it 'should create variable' do
+ expect do
+ post api("/projects/#{project.id}/variables", user), key: 'TEST_VARIABLE_2', value: 'VALUE_2'
+ end.to change{project.variables.count}.by(1)
+
+ expect(response.status).to eq(201)
+ expect(json_response['key']).to eq('TEST_VARIABLE_2')
+ expect(json_response['value']).to eq('VALUE_2')
+ end
+
+ it 'should not allow to duplicate variable key' do
+ expect do
+ post api("/projects/#{project.id}/variables", user), key: 'TEST_VARIABLE_1', value: 'VALUE_2'
+ end.to change{project.variables.count}.by(0)
+
+ expect(response.status).to eq(400)
+ end
+ end
+
+ context 'authorized user with invalid permissions' do
+ it 'should not create variable' do
+ post api("/projects/#{project.id}/variables", user2)
+
+ expect(response.status).to eq(403)
+ end
+ end
+
+ context 'unauthorized user' do
+ it 'should not create variable' do
+ post api("/projects/#{project.id}/variables")
+
+ expect(response.status).to eq(401)
+ end
+ end
+ end
+
describe 'PUT /projects/:id/variables/:variable_id' do
context 'authorized user with proper permissions' do
it 'should update variable data' do