summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-02-04 10:38:16 +0100
committerFilipa Lacerda <filipa@gitlab.com>2017-02-09 11:11:12 +0000
commit2aeb45bdb55a634a490bf535242a6f8c10aaa938 (patch)
treef234952d0437f5f9516eddf8db93e0d9fc6f77a1
parentb3309bb2fad36372b1e4821410691fa9f720bbe4 (diff)
downloadgitlab-ce-2aeb45bdb55a634a490bf535242a6f8c10aaa938.tar.gz
Add support for environment scopes in controller
-rw-r--r--app/controllers/projects/environments_controller.rb19
-rw-r--r--spec/controllers/projects/environments_controller_spec.rb59
2 files changed, 60 insertions, 18 deletions
diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb
index 0d1095da6c2..34b081b3e41 100644
--- a/app/controllers/projects/environments_controller.rb
+++ b/app/controllers/projects/environments_controller.rb
@@ -9,17 +9,22 @@ class Projects::EnvironmentsController < Projects::ApplicationController
before_action :verify_api_request!, only: :terminal_websocket_authorize
def index
- @scope = params[:scope]
- @environments = project.environments.includes(:last_deployment)
+ @environments = project.environments
+ .includes(:last_deployment)
+ .with_state(params[:scope] || :available)
respond_to do |format|
format.html
format.json do
- render json: EnvironmentSerializer
- .new(project: @project, user: @current_user)
- .with_pagination(request, response)
- .within_folders
- .represent(@environments)
+ render json: {
+ environments: EnvironmentSerializer
+ .new(project: @project, user: @current_user)
+ .with_pagination(request, response)
+ .within_folders
+ .represent(@environments),
+ available_count: project.environments.available.count,
+ stopped_count: project.environments.stopped.count
+ }
end
end
end
diff --git a/spec/controllers/projects/environments_controller_spec.rb b/spec/controllers/projects/environments_controller_spec.rb
index 4ec91738b9b..84d119f1867 100644
--- a/spec/controllers/projects/environments_controller_spec.rb
+++ b/spec/controllers/projects/environments_controller_spec.rb
@@ -7,8 +7,7 @@ describe Projects::EnvironmentsController do
let(:project) { create(:empty_project) }
let(:environment) do
- create(:environment, name: 'production',
- project: project)
+ create(:environment, name: 'production', project: project)
end
before do
@@ -28,18 +27,56 @@ describe Projects::EnvironmentsController do
context 'when requesting JSON response for folders' do
before do
- create(:environment, project: project, name: 'staging/review-1')
- create(:environment, project: project, name: 'staging/review-2')
+ create(:environment, project: project,
+ name: 'staging/review-1',
+ state: :available)
+
+ create(:environment, project: project,
+ name: 'staging/review-2',
+ state: :available)
+
+ create(:environment, project: project,
+ name: 'staging/review-3',
+ state: :stopped)
+ end
+
+ let(:environments) { json_response['environments'] }
+
+ context 'when requesting available environments scope' do
+ before do
+ get :index, environment_params(format: :json, scope: :available)
+ end
+
+ it 'responds with a payload describing available environments' do
+ expect(environments.count).to eq 2
+ expect(environments.first['name']).to eq 'production'
+ expect(environments.second['name']).to eq 'staging'
+ expect(environments.second['size']).to eq 2
+ expect(environments.second['latest']['name']).to eq 'staging/review-2'
+ end
+
+ it 'contains values describing environment scopes sizes' do
+ expect(json_response['available_count']).to eq 3
+ expect(json_response['stopped_count']).to eq 1
+ end
end
- it 'responds with correct JSON' do
- get :index, environment_params(format: :json)
+ context 'when requesting stopped environments scope' do
+ before do
+ get :index, environment_params(format: :json, scope: :stopped)
+ end
- expect(json_response.count).to eq 2
- expect(json_response.first['name']).to eq 'production'
- expect(json_response.second['name']).to eq 'staging'
- expect(json_response.second['size']).to eq 2
- expect(json_response.second['latest']['name']).to eq 'staging/review-2'
+ it 'responds with a payload describing stopped environments' do
+ expect(environments.count).to eq 1
+ expect(environments.first['name']).to eq 'staging'
+ expect(environments.first['size']).to eq 1
+ expect(environments.first['latest']['name']).to eq 'staging/review-3'
+ end
+
+ it 'contains values describing environment scopes sizes' do
+ expect(json_response['available_count']).to eq 3
+ expect(json_response['stopped_count']).to eq 1
+ end
end
end
end