Commit a692ce1c authored by Tomasz Maczukin's avatar Tomasz Maczukin

Add update feature for variables API

parent ea4777ff
...@@ -24,7 +24,7 @@ module API ...@@ -24,7 +24,7 @@ module API
# id (required) - The ID of a project # id (required) - The ID of a project
# variable_id (required) - The ID OR `key` of variable to show; if variable_id contains only digits it's treated # variable_id (required) - The ID OR `key` of variable to show; if variable_id contains only digits it's treated
# as ID other ways it's treated as `key` # as ID other ways it's treated as `key`
# Example Reuest: # Example Request:
# GET /projects/:id/variables/:variable_id # GET /projects/:id/variables/:variable_id
get ':id/variables/:variable_id' do get ':id/variables/:variable_id' do
variable_id = params[:variable_id] variable_id = params[:variable_id]
...@@ -38,6 +38,25 @@ module API ...@@ -38,6 +38,25 @@ module API
present variables.first, with: Entities::Variable present variables.first, with: Entities::Variable
end end
# Update existing variable of a project
#
# Parameters:
# id (required) - The ID of a project
# variable_id (required) - The ID of a variable
# key (optional) - new value for `key` field of variable
# value (optional) - new value for `value` field of variable
# Example Request:
# PUT /projects/:id/variables/:variable_id
put ':id/variables/:variable_id' do
variable = user_project.variables.where(id: params[:variable_id].to_i).first
variable.key = params[:key]
variable.value = params[:value]
variable.save!
present variable, with: Entities::Variable
end
end end
end end
end end
...@@ -40,25 +40,25 @@ describe API::API, api: true do ...@@ -40,25 +40,25 @@ describe API::API, api: true do
describe 'GET /projects/:id/variables/:variable_id' do describe 'GET /projects/:id/variables/:variable_id' do
context 'authorized user with proper permissions' do context 'authorized user with proper permissions' do
it 'should return project variable details when ID is used as :variable_id' do it 'should return project variable details when ID is used as :variable_id' do
get api("/projects/#{project.id}/variables/1", user) get api("/projects/#{project.id}/variables/#{variable.id}", user)
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect(json_response['key']).to eq('TEST_VARIABLE_1') expect(json_response['key']).to eq(variable.key)
expect(json_response['value']).to eq('VALUE_1') expect(json_response['value']).to eq(variable.value)
end end
it 'should return project variable details when `key` is used as :variable_id' do it 'should return project variable details when `key` is used as :variable_id' do
get api("/projects/#{project.id}/variables/TEST_VARIABLE_1", user) get api("/projects/#{project.id}/variables/#{variable.key}", user)
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect(json_response['id']).to eq(1) expect(json_response['id']).to eq(variable.id)
expect(json_response['value']).to eq('VALUE_1') expect(json_response['value']).to eq(variable.value)
end end
end end
context 'authorized user with invalid permissions' do context 'authorized user with invalid permissions' do
it 'should not return project variable details' do it 'should not return project variable details' do
get api("/projects/#{project.id}/variables/1", user2) get api("/projects/#{project.id}/variables/#{variable.id}", user2)
expect(response.status).to eq(403) expect(response.status).to eq(403)
end end
...@@ -66,7 +66,43 @@ describe API::API, api: true do ...@@ -66,7 +66,43 @@ describe API::API, api: true do
context 'unauthorized user' do context 'unauthorized user' do
it 'should not return project variable details' do it 'should not return project variable details' do
get api("/projects/#{project.id}/variables/1") get api("/projects/#{project.id}/variables/#{variable.id}")
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
initial_variable = project.variables.first
key_before = initial_variable.key
value_before = initial_variable.value
put api("/projects/#{project.id}/variables/#{variable.id}", user), key: 'TEST_VARIABLE_1_UP', value: 'VALUE_1_UP'
updated_variable = project.variables.first
expect(response.status).to eq(200)
expect(key_before).to eq(variable.key)
expect(value_before).to eq(variable.value)
expect(updated_variable.key).to eq('TEST_VARIABLE_1_UP')
expect(updated_variable.value).to eq('VALUE_1_UP')
end
end
context 'authorized user with invalid permissions' do
it 'should not update variable' do
put api("/projects/#{project.id}/variables/#{variable.id}", user2)
expect(response.status).to eq(403)
end
end
context 'unauthorized user' do
it 'should not return project variable details' do
put api("/projects/#{project.id}/variables/#{variable.id}")
expect(response.status).to eq(401) expect(response.status).to eq(401)
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment