From 434359446a5436d6c11b66c7107ecaea133cd6e1 Mon Sep 17 00:00:00 2001 From: Reuben Pereira Date: Mon, 15 Apr 2019 15:31:59 +0000 Subject: Add ability to do variable substitution - In prometheus proxy api, allow variables to be replaced. For example, if 'up{env="%{ci_environment_slug}"}' is passed to the endpoint, it becomes 'up{env="production"}' before being sent to prometheus. --- .../environments/prometheus_api_controller_spec.rb | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'spec/controllers') diff --git a/spec/controllers/projects/environments/prometheus_api_controller_spec.rb b/spec/controllers/projects/environments/prometheus_api_controller_spec.rb index 5a0b92c2514..d232408b775 100644 --- a/spec/controllers/projects/environments/prometheus_api_controller_spec.rb +++ b/spec/controllers/projects/environments/prometheus_api_controller_spec.rb @@ -14,6 +14,7 @@ describe Projects::Environments::PrometheusApiController do describe 'GET #proxy' do let(:prometheus_proxy_service) { instance_double(Prometheus::ProxyService) } + let(:expected_params) do ActionController::Parameters.new( environment_params( @@ -47,6 +48,38 @@ describe Projects::Environments::PrometheusApiController do expect(response).to have_gitlab_http_status(:ok) expect(json_response).to eq(prometheus_json_body) end + + context 'with format string' do + before do + expected_params[:query] = %{up{environment="#{environment.slug}"}} + end + + it 'replaces variables with values' do + get :proxy, params: environment_params.merge(query: 'up{environment="%{ci_environment_slug}"}') + + expect(Prometheus::ProxyService).to have_received(:new) + .with(environment, 'GET', 'query', expected_params) + end + + context 'with nil query' do + let(:params_without_query) do + params = environment_params + params.delete(:query) + params + end + + before do + expected_params.delete(:query) + end + + it 'does not raise error' do + get :proxy, params: params_without_query + + expect(Prometheus::ProxyService).to have_received(:new) + .with(environment, 'GET', 'query', expected_params) + end + end + end end context 'with nil result' do -- cgit v1.2.3