diff --git a/app/controllers/installation_controller.rb b/app/controllers/installation_controller.rb new file mode 100644 index 000000000..a0bc0aa74 --- /dev/null +++ b/app/controllers/installation_controller.rb @@ -0,0 +1,24 @@ +class InstallationController < ApplicationController + + skip_authorization_check + + def details + respond_to do |format| + format.any { render json: consul_installation_details.to_json, content_type: 'application/json' } + end + end + + private + + def consul_installation_details + { + release: 'v0.11' + }.merge(features: settings_feature_flags) + end + + def settings_feature_flags + Setting.where("key LIKE 'feature.%'").each_with_object({}) { |x, n| n[x.key.remove('feature.')] = x.value } + end + +end + diff --git a/config/routes.rb b/config/routes.rb index df7e03a4f..31d811293 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -36,6 +36,8 @@ Rails.application.routes.draw do get '/welcome', to: 'welcome#welcome' get '/cuentasegura', to: 'welcome#verification', as: :cuentasegura + get '/consul.json', to: "installation#details" + resources :debates do member do post :vote diff --git a/spec/controllers/installation_controller_spec.rb b/spec/controllers/installation_controller_spec.rb new file mode 100644 index 000000000..68c2e7c07 --- /dev/null +++ b/spec/controllers/installation_controller_spec.rb @@ -0,0 +1,54 @@ +require 'rails_helper' + +describe InstallationController, type: :request do + + describe "consul.json" do + let(:feature_settings) do + { + 'debates' => nil, + 'spending_proposals' => 't', + 'polls' => nil, + 'twitter_login' => nil, + 'facebook_login' => nil, + 'google_login' => nil, + 'public_stats' => nil, + 'budgets' => nil, + 'signature_sheets' => nil, + 'legislation' => nil, + 'user.recommendations' => nil, + 'community' => nil, + 'map' => 't', + 'spending_proposal_features.voting_allowed' => 't' + } + end + + before do + feature_settings.each { |feature_name, feature_value| Setting["feature.#{feature_name}"] = feature_value } + end + + after do + Setting['feature.debates'] = true + Setting['feature.spending_proposals'] = nil + Setting['feature.polls'] = true + Setting['feature.twitter_login'] = true + Setting['feature.facebook_login'] = true + Setting['feature.google_login'] = true + Setting['feature.public_stats'] = true + Setting['feature.budgets'] = true + Setting['feature.signature_sheets'] = true + Setting['feature.legislation'] = true + Setting['feature.user.recommendations'] = true + Setting['feature.community'] = true + Setting['feature.map'] = nil + Setting['feature.spending_proposal_features.voting_allowed'] = nil + end + + specify "with query string inside query params" do + get '/consul.json' + + expect(response).to have_http_status(:ok) + expect(JSON.parse(response.body)['release']).not_to be_empty + expect(JSON.parse(response.body)['features']).to eq(feature_settings) + end + end +end