diff options
author | Krasimir Angelov <kangelov@gitlab.com> | 2019-04-05 22:38:35 +1300 |
---|---|---|
committer | Krasimir Angelov <kangelov@gitlab.com> | 2019-04-08 09:01:48 +1200 |
commit | 7eca5dc555eb27ff166dcaf9ac984b19ed23963e (patch) | |
tree | b86431f12fe3b99fab16b91f9a1d0f92da521579 | |
parent | 4c9ab64da79fbbcfe58253a02134e0d39329cea7 (diff) | |
download | gitlab-ce-30157-api-expose-single-environment.tar.gz |
Use json-schema to spec API endpoint30157-api-expose-single-environment
Add public_api/v4/environment.json and other related schemas.
-rw-r--r-- | doc/api/environments.md | 6 | ||||
-rw-r--r-- | lib/api/environments.rb | 4 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/public_api/v4/artifact.json | 16 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/public_api/v4/artifact_file.json | 12 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/public_api/v4/deployment.json | 32 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/public_api/v4/environment.json | 23 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/public_api/v4/job.json | 63 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/public_api/v4/runner.json | 24 | ||||
-rw-r--r-- | spec/requests/api/environments_spec.rb | 8 |
9 files changed, 176 insertions, 12 deletions
diff --git a/doc/api/environments.md b/doc/api/environments.md index ab94384c6bd..ebcdc546d08 100644 --- a/doc/api/environments.md +++ b/doc/api/environments.md @@ -66,12 +66,6 @@ Example of response "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", "web_url": "http://localhost:3000/root" } - "environment": { - "id": 5, - "name": "staging", - "slug": "staging", - "external_url": "https://staging.gitlab.com" - }, "deployable": { "id": 710, "status": "success", diff --git a/lib/api/environments.rb b/lib/api/environments.rb index 5ec0e225c35..6cd43923559 100644 --- a/lib/api/environments.rb +++ b/lib/api/environments.rb @@ -112,7 +112,9 @@ module API authorize! :read_environment, user_project environment = user_project.environments.find(params[:environment_id]) - present environment, with: Entities::Environment, current_user: current_user, except: [:project], last_deployment: true + present environment, with: Entities::Environment, current_user: current_user, + except: [:project, { last_deployment: [:environment] }], + last_deployment: true end end end diff --git a/spec/fixtures/api/schemas/public_api/v4/artifact.json b/spec/fixtures/api/schemas/public_api/v4/artifact.json new file mode 100644 index 00000000000..9df957b1498 --- /dev/null +++ b/spec/fixtures/api/schemas/public_api/v4/artifact.json @@ -0,0 +1,16 @@ +{ + "type": "object", + "required": [ + "file_type", + "size", + "filename", + "file_format" + ], + "properties": { + "file_type": { "type": "string"}, + "size": { "type": "integer"}, + "filename": { "type": "string"}, + "file_format": { "type": "string"} + }, + "additionalProperties": false +} diff --git a/spec/fixtures/api/schemas/public_api/v4/artifact_file.json b/spec/fixtures/api/schemas/public_api/v4/artifact_file.json new file mode 100644 index 00000000000..4017e6bdabc --- /dev/null +++ b/spec/fixtures/api/schemas/public_api/v4/artifact_file.json @@ -0,0 +1,12 @@ +{ + "type": "object", + "required": [ + "filename", + "size" + ], + "properties": { + "filename": { "type": "string"}, + "size": { "type": "integer"} + }, + "additionalProperties": false +} diff --git a/spec/fixtures/api/schemas/public_api/v4/deployment.json b/spec/fixtures/api/schemas/public_api/v4/deployment.json new file mode 100644 index 00000000000..3af2dc27d55 --- /dev/null +++ b/spec/fixtures/api/schemas/public_api/v4/deployment.json @@ -0,0 +1,32 @@ +{ + "type": "object", + "required": [ + "id", + "iid", + "ref", + "sha", + "created_at", + "user", + "deployable" + ], + "properties": { + "id": { "type": "integer" }, + "iid": { "type": "integer" }, + "ref": { "type": "string" }, + "sha": { "type": "string" }, + "created_at": { "type": "string" }, + "user": { + "oneOf": [ + { "type": "null" }, + { "$ref": "user/basic.json" } + ] + }, + "deployable": { + "oneOf": [ + { "type": "null" }, + { "$ref": "job.json" } + ] + } + }, + "additionalProperties": false +} diff --git a/spec/fixtures/api/schemas/public_api/v4/environment.json b/spec/fixtures/api/schemas/public_api/v4/environment.json new file mode 100644 index 00000000000..242e90fb7ac --- /dev/null +++ b/spec/fixtures/api/schemas/public_api/v4/environment.json @@ -0,0 +1,23 @@ +{ + "type": "object", + "required": [ + "id", + "name", + "slug", + "external_url", + "last_deployment" + ], + "properties": { + "id": { "type": "integer" }, + "name": { "type": "string" }, + "slug": { "type": "string" }, + "external_url": { "$ref": "../../types/nullable_string.json" }, + "last_deployment": { + "oneOf": [ + { "type": "null" }, + { "$ref": "deployment.json" } + ] + } + }, + "additionalProperties": false +} diff --git a/spec/fixtures/api/schemas/public_api/v4/job.json b/spec/fixtures/api/schemas/public_api/v4/job.json new file mode 100644 index 00000000000..454935422a0 --- /dev/null +++ b/spec/fixtures/api/schemas/public_api/v4/job.json @@ -0,0 +1,63 @@ +{ + "type": "object", + "required": [ + "id", + "status", + "stage", + "name", + "ref", + "tag", + "coverage", + "created_at", + "started_at", + "finished_at", + "duration", + "user", + "commit", + "pipeline", + "web_url", + "artifacts", + "artifacts_expire_at", + "runner" + ], + "properties": { + "id": { "type": "integer" }, + "status": { "type": "string" }, + "stage": { "type": "string" }, + "name": { "type": "string" }, + "ref": { "type": "string" }, + "tag": { "type": "boolean" }, + "coverage": { "type": ["number", "null"] }, + "created_at": { "type": "string" }, + "started_at": { "type": ["null", "string"] }, + "finished_at": { "type": ["null", "string"] }, + "duration": { "type": ["null", "number"] }, + "user": { "$ref": "user/basic.json" }, + "commit": { + "oneOf": [ + { "type": "null" }, + { "$ref": "commit/basic.json" } + ] + }, + "pipeline": { "$ref": "pipeline/basic.json" }, + "web_url": { "type": "string" }, + "artifacts": { + "type": "array", + "items": { "$ref": "artifact.json" } + }, + "artifacts_file": { + "oneOf": [ + { "type": "null" }, + { "$ref": "artifact_file.json" } + ] + }, + "artifacts_expire_at": { "type": ["null", "string"] }, + "runner": { + "oneOf": [ + { "type": "null" }, + { "$ref": "runner.json" } + ] + } + }, + "additionalProperties":false +} diff --git a/spec/fixtures/api/schemas/public_api/v4/runner.json b/spec/fixtures/api/schemas/public_api/v4/runner.json new file mode 100644 index 00000000000..d97d74a93f2 --- /dev/null +++ b/spec/fixtures/api/schemas/public_api/v4/runner.json @@ -0,0 +1,24 @@ +{ + "type": "object", + "required": [ + "id", + "description", + "ip_address", + "active", + "is_shared", + "name", + "online", + "status" + ], + "properties": { + "id": { "type": "integer" }, + "description": { "type": "string" }, + "ip_address": { "type": "string" }, + "active": { "type": "boolean" }, + "is_shared": { "type": "boolean" }, + "name": { "type": ["null", "string"] }, + "online": { "type": "boolean" }, + "status": { "type": "string" } + }, + "additionalProperties": false +} diff --git a/spec/requests/api/environments_spec.rb b/spec/requests/api/environments_spec.rb index c11bb417191..8fc7fdc8632 100644 --- a/spec/requests/api/environments_spec.rb +++ b/spec/requests/api/environments_spec.rb @@ -193,14 +193,12 @@ describe API::Environments do describe 'GET /projects/:id/environments/:environment_id' do context 'as member of the project' do it 'returns project environments' do + create(:deployment, :success, project: project, environment: environment) + get api("/projects/#{project.id}/environments/#{environment.id}", user) expect(response).to have_gitlab_http_status(200) - expect(json_response['name']).to eq(environment.name) - expect(json_response['slug']).to eq(environment.slug) - expect(json_response['external_url']).to eq(environment.external_url) - expect(json_response).not_to have_key("project") - expect(json_response).to have_key("last_deployment") + expect(response).to match_response_schema('public_api/v4/environment') end end |