require "test_helper" class SanastoCorsTest < ActiveSupport::TestCase def setup @app = ->(_env) { [ 200, {}, [ "ok" ] ] } @middleware = Middleware::SanastoCors.new(@app) @origin = "http://localhost:5173" @app_id = "app.sanasto" end test "adds cors headers for allowed get requests" do env = Rack::MockRequest.env_for( "/api/entries", method: "GET", "HTTP_ORIGIN" => @origin, "HTTP_X_SANASTO_APP" => @app_id ) status, headers, _body = @middleware.call(env) assert_equal 200, status assert_equal @origin, headers["Access-Control-Allow-Origin"] assert_includes headers["Access-Control-Allow-Headers"], "X-Sanasto-App" end test "returns preflight response with cors headers when app header is requested" do env = Rack::MockRequest.env_for( "/api/entries", method: "OPTIONS", "HTTP_ORIGIN" => @origin, "HTTP_ACCESS_CONTROL_REQUEST_METHOD" => "GET", "HTTP_ACCESS_CONTROL_REQUEST_HEADERS" => "x-sanasto-app" ) status, headers, _body = @middleware.call(env) assert_equal 204, status assert_equal @origin, headers["Access-Control-Allow-Origin"] assert_includes headers["Access-Control-Allow-Headers"], "x-sanasto-app" assert_includes headers["Vary"], "Access-Control-Request-Headers" end test "does not add cors headers when app id is missing" do env = Rack::MockRequest.env_for( "/api/entries", method: "GET", "HTTP_ORIGIN" => @origin ) status, headers, _body = @middleware.call(env) assert_equal 200, status assert_nil headers["Access-Control-Allow-Origin"] end end