@@ -0,0 +1,46 @@
1+module BearerAuthTest.Spec where
2+
3+import Prelude
4+
5+import Data.String as String
6+import Effect (Effect)
7+import Yoga.HTTP.API.Path (Path, Lit)
8+import Yoga.HTTP.API.Route (GET, Route, Request, BearerToken, buildOpenAPISpec)
9+import Yoga.JSON (writeJSON)
10+import ViTest (ViTest, describe, test)
11+import ViTest.Expect (expectToBe)
12+
13+--------------------------------------------------------------------------------
14+-- Test API with BearerToken
15+--------------------------------------------------------------------------------
16+
17+type AuthAPI =
18+ { getProtected :: Route GET (Path (Lit "protected")) (Request { headers :: { authorization :: BearerToken } }) (ok :: { body :: { message :: String } })
19+ }
20+
21+--------------------------------------------------------------------------------
22+-- Tests
23+--------------------------------------------------------------------------------
24+
25+testBearerTokenNotInHeaders :: Effect ViTest
26+testBearerTokenNotInHeaders = describe "BearerToken in OpenAPI" do
27+ _ <- test "BearerToken does not appear as a regular header parameter" do
28+ let spec = buildOpenAPISpec @AuthAPI { title: "Auth API", version: "1.0.0" }
29+ let json = writeJSON spec
30+ -- Authorization should NOT appear in parameters array
31+ let hasAuthParam = String.contains (String.Pattern "\"name\":\"authorization\"") json
32+ expectToBe false hasAuthParam
33+
34+ _ <- test "BearerToken appears in security requirements" do
35+ let spec = buildOpenAPISpec @AuthAPI { title: "Auth API", version: "1.0.0" }
36+ let json = writeJSON spec
37+ -- Should contain bearerAuth security reference
38+ let hasBearerAuth = String.contains (String.Pattern "bearerAuth") json
39+ expectToBe true hasBearerAuth
40+
41+ test "OpenAPI spec contains securitySchemes component" do
42+ let spec = buildOpenAPISpec @AuthAPI { title: "Auth API", version: "1.0.0" }
43+ let json = writeJSON spec
44+ -- Should have bearerAuth defined in components.securitySchemes
45+ let hasSecuritySchemes = String.contains (String.Pattern "securitySchemes") json
46+ expectToBe true hasSecuritySchemes