diff --git a/app/controllers/client_configurations_controller.rb b/app/controllers/client_configurations_controller.rb new file mode 100644 index 000000000..0b0f2f670 --- /dev/null +++ b/app/controllers/client_configurations_controller.rb @@ -0,0 +1,15 @@ +class ClientConfigurationsController < ApplicationController + skip_before_action :require_account, :require_authentication + allow_unauthorized_access + + def show + expires_in 1.minute, public: true + + render action: client_configuration_name + end + + private + def client_configuration_name + "#{params.require(:platform)}_v#{params.require(:version)}" + end +end diff --git a/test/controllers/client_configurations_controller_test.rb b/test/controllers/client_configurations_controller_test.rb new file mode 100644 index 000000000..b2aa00e6d --- /dev/null +++ b/test/controllers/client_configurations_controller_test.rb @@ -0,0 +1,47 @@ +require "test_helper" + +class ClientConfigurationsControllerTest < ActionDispatch::IntegrationTest + test "android" do + assert_ok "/client_configurations/android_v1.json" + end + + test "ios" do + assert_ok "/client_configurations/ios_v1.json" + end + + test "bad platform" do + assert_no_route "/client_configurations/blackberry_v1.json" + end + + test "bad version" do + assert_no_route "/client_configurations/android_va.json" + end + + test "nonexistent version" do + assert_missing "/client_configurations/android_v2000.json" + assert_missing "/client_configurations/ios_v2000.json" + end + + private + def assert_ok(url, cache_control: { public: true, max_age: "60" }) + get url + assert_response :ok + + assert_kind_of Hash, response.parsed_body["settings"] + assert_kind_of Array, response.parsed_body["rules"] + + assert_equal cache_control, response.cache_control + end + + def assert_no_route(url) + without_action_dispatch_exception_handling do + assert_raises(ActionController::RoutingError) { get url } + end + end + + def assert_missing(url) + without_action_dispatch_exception_handling do + assert_raises(ActionView::MissingTemplate) { get url } + end + end +end