Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update model:core to 1.7.9 #3621

Merged
merged 1 commit into from
Mar 19, 2024

Update model:core to 1.7.9

ff1a576
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
Merged

Update model:core to 1.7.9 #3621

Update model:core to 1.7.9
ff1a576
Select commit
Loading
Failed to load commit list.
GitHub Actions / Test report for 2.13-JVM-21 succeeded Mar 19, 2024 in 0s

390 passed, 0 failed and 0 skipped

Tests passed successfully

Report Passed Failed Skipped Time
server/netty-server/loom/target/jvm-2.13/test-reports/TEST-sttp.tapir.server.netty.loom.NettyIdServerTest.xml 201βœ… 10s
server/nima-server/target/jvm-2.13/test-reports/TEST-sttp.tapir.server.nima.NimaServerTest.xml 189βœ… 4s

βœ…Β server/netty-server/loom/target/jvm-2.13/test-reports/TEST-sttp.tapir.server.netty.loom.NettyIdServerTest.xml

201 tests were completed in 10s with 201 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
sttp.tapir.server.netty.loom.NettyIdServerTest 201βœ… 10s

βœ…Β sttp.tapir.server.netty.loom.NettyIdServerTest

βœ… ServerEndpoint(securityin: /auth auth(api key, via {header X-Api-Key}), in: -, errout: -, out: {body as text/plain (UTF-8)})
βœ… ServerEndpoint(securityin: /auth auth(api key, via {header X-Api-Key}), in: ?amount, errout: -, out: {body as text/plain (UTF-8)})
βœ… ServerEndpoint(securityin: /auth auth(api key, via ?api-key), in: -, errout: -, out: {body as text/plain (UTF-8)})
βœ… ServerEndpoint(securityin: /auth auth(Basic http, via {header Authorization}), in: -, errout: -, out: {body as text/plain (UTF-8)})
βœ… ServerEndpoint(securityin: /auth auth(Bearer http, via {header Authorization}), in: -, errout: -, out: {body as text/plain (UTF-8)})
βœ… ServerEndpoint(securityin: /auth auth(Basic http, via {header Authorization}), in: -, errout: -, out: {body as text/plain (UTF-8)}) In security Option[UsernamePassword] should let in basic auth as well as request without auth
βœ… ServerEndpoint(securityin: /auth auth(Basic http, via {header Authorization}) auth(Bearer http, via {header Authorization}), in: -, errout: -, out: {body as text/plain (UTF-8)}) In security (Option[UsernamePassword], Option[String]) should pass bearer auth, basic auth, and also request without auth
βœ… ServerEndpoint(securityin: /secret /[id] auth(Basic http, via {header Authorization}), in: POST ?q, errout: -, out: -) correct basic
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) correct bearer
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) correct lower case bearer
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via ?token), in: POST ?q, errout: -, out: -) correct apiKey in query param
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header x-api-key}), in: POST ?q, errout: -, out: -) correct apiKey in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) correct old token in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) correct new token in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(Basic http, via {header Authorization}), in: POST ?q, errout: -, out: -) missing basic
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) missing bearer
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) missing lower case bearer
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via ?token), in: POST ?q, errout: -, out: -) missing apiKey in query param
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header x-api-key}), in: POST ?q, errout: -, out: -) missing apiKey in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) missing old token in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) missing new token in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(Basic http, via {header Authorization}), in: POST ?q, errout: -, out: -) missing basic with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) missing bearer with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) missing lower case bearer with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via ?token), in: POST ?q, errout: -, out: -) missing apiKey in query param with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header x-api-key}), in: POST ?q, errout: -, out: -) missing apiKey in header with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) missing old token in header with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) missing new token in header with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(Basic http, via {header Authorization}), in: POST ?q, errout: -, out: -) invalid request basic
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) invalid request bearer
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) invalid request lower case bearer
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via ?token), in: POST ?q, errout: -, out: -) invalid request apiKey in query param
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header x-api-key}), in: POST ?q, errout: -, out: -) invalid request apiKey in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) invalid request old token in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) invalid request new token in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(Basic http, via {header Authorization}), in: POST ?q, errout: -, out: -) invalid request basic with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) invalid request bearer with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) invalid request lower case bearer with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via ?token), in: POST ?q, errout: -, out: -) invalid request apiKey in query param with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header x-api-key}), in: POST ?q, errout: -, out: -) invalid request apiKey in header with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) invalid request old token in header with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) invalid request new token in header with endpoint hiding
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)}) with URL encoding
βœ… Endpoint[infallible](securityin: -, in: ?fruit, errout: void, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: ?fruit ?amount, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: {header X-Role}, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: /fruit /[] /amount /[], errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: /fruit /[] /amount /[], errout: -, out: {body as text/plain (UTF-8)}) with URL encoding
βœ… Endpoint(securityin: -, in: GET /api /[], errout: -, out: -) Empty path should not be passed to path capture decoding
βœ… Endpoint(securityin: -, in: /in /[] /[], errout: -, out: {header a} {header b}) capturing two path parameters with the same specification
βœ… Endpoint(securityin: -, in: POST /api /echo {body as text/plain (UTF-8)}, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: POST /api /echo {body as text/plain (UTF-8)}, errout: -, out: {body as text/plain (UTF-8)}) with get method
βœ… Endpoint(securityin: -, in: {header SomeHeader} /[], errout: -, out: {header IntHeader} {body as text/plain (UTF-8)}) Header input before path capture input
βœ… Endpoint[echo json](securityin: -, in: POST /api /echo {body as application/json (UTF-8)}, errout: -, out: {body as application/json (UTF-8)})
βœ… Endpoint[echo json](securityin: -, in: POST /api /echo {body as application/json (UTF-8)}, errout: -, out: {body as application/json (UTF-8)}) with accept header
βœ… Endpoint[echo json](securityin: -, in: POST /api /echo {body as application/json (UTF-8)}, errout: -, out: {body as application/json (UTF-8)}) content type
βœ… Endpoint[echo byte array](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream})
βœ… Endpoint[echo byte buffer](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream})
βœ… Endpoint(securityin: -, in: /api /unit, errout: -, out: {body as application/json (UTF-8)}) unit json mapper
βœ… Endpoint(securityin: -, in: /api, errout: -, out: {body as text/plain (UTF-8)}) default status mapper
βœ… Endpoint(securityin: -, in: /api, errout: {body as text/plain (UTF-8)}, out: -) default error status mapper
βœ… Endpoint(securityin: -, in: POST /api /echo {body as application/x-www-form-urlencoded (UTF-8)}, errout: -, out: {body as application/x-www-form-urlencoded (UTF-8)})
βœ… Endpoint(securityin: -, in: GET /api /echo /params ?*, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: GET /[pathParam] ?*, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: GET /api /echo /params ?*, errout: -, out: {body as text/plain (UTF-8)}) should support value-less query param
βœ… Endpoint(securityin: -, in: GET /api /echo /headers {multiple headers}, errout: -, out: {multiple headers})
βœ… Endpoint(securityin: -, in: GET /*, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: GET /*, errout: -, out: {body as text/plain (UTF-8)}) paths should match empty path
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)}) invalid query parameter
βœ… Endpoint(securityin: -, in: GET /api /echo /param-to-header ?qq, errout: -, out: {header hh})
βœ… Endpoint(securityin: -, in: GET /api /echo /headers {header Cookie}, errout: -, out: {header Set-Cookie})
βœ… Endpoint(securityin: -, in: GET / ?q, errout: -, out: {header Set-Cookie} {body as text/plain (UTF-8)}) should be invulnerable to response splitting from unsanitized headers
βœ… Endpoint(securityin: -, in: GET /api /echo /headers {header Set-Cookie}, errout: -, out: {header Set-Cookie})
βœ… Endpoint(securityin: -, in: /api /echo {body as text/plain (UTF-8)}, errout: -, out: {body as text/plain (UTF-8)} {header Content-Type}) dynamic content type
βœ… Endpoint(securityin: -, in: /api /echo {header Content-Type}, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: POST /api /echo {header Content-Type: application/json}, errout: -, out: -) mismatch content-type
βœ… Endpoint(securityin: -, in: POST /api /echo {header Content-Type: application/json}, errout: -, out: -) missing content-type
βœ… Endpoint(securityin: -, in: POST /api /echo {header Content-Type}, errout: -, out: -) mismatch content-type
βœ… Endpoint(securityin: -, in: POST /api /echo {header Content-Type}, errout: -, out: -) missing content-type
βœ… Endpoint(securityin: -, in: /api /echo, errout: -, out: {body as text/html (UTF-8)})
βœ… Endpoint(securityin: -, in: -, errout: -, out: status code (308) {header Location})
βœ… Endpoint(securityin: -, in: -, errout: -, out: {header Location: Poland})
βœ… Endpoint(securityin: -, in: POST /api /echo {body as application/json (UTF-8)}, errout: -, out: {body as application/json (UTF-8)})
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: status code - possible codes (Map())) custom status code
βœ… Endpoint(securityin: -, in: {data from request}, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: status code - possible codes (Map()))
βœ… Endpoint[Query with default](securityin: -, in: ?p1, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: /api {header Content-Type: multipart/form-data}, errout: -, out: {body as text/plain (UTF-8)}) fixed multipart/form-data header input should ignore boundary directive
βœ… Endpoint(securityin: -, in: ?kind, errout: -, out: {header Content-Type})
βœ… Endpoint(securityin: -, in: ?kind, errout: -, out: {header Content-Type} {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: POST /api /echo {body as application/json (UTF-8)}, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: GET ?flag, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)}) should contain the content-length header
βœ… Endpoint(securityin: -, in: -, errout: -, out: -) GET empty endpoint
βœ… Endpoint(securityin: -, in: -, errout: -, out: -) POST empty endpoint
βœ… Endpoint(securityin: -, in: -, errout: -, out: {body as text/plain (UTF-8)} {header Content-Type: text/csv}) Fixed content-type header
βœ… Endpoint(securityin: -, in: GET, errout: -, out: -) GET a GET endpoint
βœ… Endpoint(securityin: -, in: GET, errout: -, out: -) POST a GET endpoint
βœ… Endpoint(securityin: -, in: -, errout: -, out: -) no path should match anything
βœ… Endpoint(securityin: -, in: GET /, errout: -, out: -) root path should not match non-root path
βœ… Endpoint(securityin: -, in: GET /, errout: -, out: -) root path should match empty path
βœ… Endpoint(securityin: -, in: GET /, errout: -, out: -) root path should match root path
βœ… Endpoint(securityin: -, in: GET /api, errout: -, out: -) single path should match single path
βœ… Endpoint(securityin: -, in: GET /api, errout: -, out: -) single path should match single/ path
βœ… Endpoint(securityin: -, in: GET /api /[] /and /*, errout: -, out: {header IntPath} {body as text/plain (UTF-8)}) Capturing paths after path capture
βœ… Endpoint(securityin: -, in: GET /api /[] /and /*, errout: -, out: {header IntPath} {body as text/plain (UTF-8)}) Capturing paths after path capture (when empty)
βœ… Endpoint(securityin: -, in: GET /api, errout: -, out: -) single path should not match root path
βœ… Endpoint(securityin: -, in: GET /api, errout: -, out: -) single path should not match larger path
βœ… ServerEndpoint(securityin: /auth, in: /settings, errout: -, out: {body as text/plain (UTF-8)})
βœ… ServerEndpoint(securityin: /auth, in: -, errout: -, out: {body as text/plain (UTF-8)})
βœ… two endpoints with increasingly specific path inputs: should match path exactly
βœ… two endpoints with a body defined as the first input: should only consume body when the path matches
βœ… two endpoints with query defined as the first input, path segments as second input: should try the second endpoint if the path doesn't match
βœ… two endpoints with increasingly specific path inputs, first with a required query parameter: should match path exactly
βœ… two endpoints with validation: should not try the second one if validation fails
βœ… endpoint with a security input and regular path input shouldn't shadow other endpoints
βœ… two endpoints, same path prefix, one without trailing slashes, second accepting trailing slashes
βœ… try other paths on decode failure if onDecodeFailureNextEndpoint
βœ… two endpoints with different methods, first one with path parsing
βœ… Endpoint(securityin: -, in: GET /customer /[customer_id] /orders /[order_id], errout: -, out: -) Returns 400 if path 'shape' matches, but failed to parse a path parameter, using a custom decode failure handler
βœ… Endpoint(securityin: -, in: GET /customer /[customer_id] /orders /[order_id], errout: -, out: -) Returns 404 if path 'shape' doesn't match
βœ… Endpoint(securityin: -, in: GET /customer /[customer_id], errout: -, out: -) Returns 400 if path 'shape' matches, but failed to parse a path parameter
βœ… Tries next endpoint if path 'shape' matches, but validation fails, using .onDecodeFailureNextEndpoint
βœ… ServerEndpoint(securityin: ?x, in: ?y, errout: -, out: {body as text/plain (UTF-8)}) server security logic - one input
βœ… ServerEndpoint(securityin: ?x ?y, in: ?z ?u, errout: -, out: {body as text/plain (UTF-8)}) server security logic - multiple inputs
βœ… Endpoint[echo input stream](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream})
βœ… Endpoint[input string output stream with header](securityin: -, in: POST /api /echo {body as text/plain (UTF-8)}, errout: -, out: {body as application/octet-stream} {header Content-Length})
βœ… Endpoint(securityin: -, in: POST /api /echo {body as text/plain (UTF-8)}, errout: -, out: {body as text/plain (UTF-8)}) checks payload limit and returns 413 on exceeded max content length (request)
βœ… Endpoint[echo byte array](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream}) checks payload limit and returns 413 on exceeded max content length (request)
βœ… Endpoint[echo file](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream}) checks payload limit and returns 413 on exceeded max content length (request)
βœ… Endpoint[echo input stream](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream}) checks payload limit and returns 413 on exceeded max content length (request)
βœ… Endpoint[echo byte buffer](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream}) checks payload limit and returns 413 on exceeded max content length (request)
βœ… Endpoint(securityin: -, in: POST /api /echo {body as text/plain (UTF-8)}, errout: -, out: {body as text/plain (UTF-8)}) checks payload limit and returns OK on content length  below or equal max (request)
βœ… Endpoint[echo input stream](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream}) checks payload limit and returns OK on content length  below or equal max (request)
βœ… Endpoint[echo byte array](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream}) checks payload limit and returns OK on content length  below or equal max (request)
βœ… Endpoint[echo file](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream}) checks payload limit and returns OK on content length  below or equal max (request)
βœ… Endpoint[echo byte buffer](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream}) checks payload limit and returns OK on content length  below or equal max (request)
βœ… Endpoint(securityin: -, in: -, errout: -, out: -) handle exceptions
βœ… recover errors from exceptions
βœ… fail when status is 204 or 304, but there's a body
βœ… Endpoint(securityin: -, in: GET /content-negotiation /organization {header Accept}, errout: -, out: one of(status code (200) {body as application/json (UTF-8)}|status code (200) {body as application/xml (UTF-8)}|status code (200) {body as text/html (UTF-8)}|status code (200) {body as text/html (ISO-8859-1)}))
βœ… Endpoint(securityin: -, in: GET /content-negotiation /organization, errout: -, out: one of(status code (200) {body as application/json (UTF-8)}|status code (200) {body as application/xml (UTF-8)})) takes first content type when no accepts header
βœ… Endpoint(securityin: -, in: GET /content-negotiation /organization, errout: -, out: one of(status code (200) {body as application/xml (UTF-8)}|status code (200) {body as application/json (UTF-8)})) takes first content type when no accepts header
βœ… Endpoint(securityin: -, in: GET /, errout: -, out: -) accepts header without output body
βœ… Endpoint[echo byte array](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream}) not take into account the accept charset header when the body media type doesn't specify one
βœ… Endpoint(securityin: -, in: GET /content-negotiation /organization-parameters, errout: -, out: one of({body as application/json (UTF-8)}|{body as application/json; name=unknown (UTF-8)})) matches content type on accept parameters
βœ… Endpoint(securityin: -, in: GET /content-negotiation /multipart-mixed multipart/mixed -> {body as text/plain (UTF-8)}, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint[echo file](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream})
βœ… Endpoint[mapped query](securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint[mapped path](securityin: -, in: /fruit /[], errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint[mapped path path](securityin: -, in: /fruit /[] /amount /[], errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint[query and mapped path path](securityin: -, in: /fruit /[] /amount /[] ?color, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint[out mapped](securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint[out mapped](securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)} {header X-Role})
βœ… Endpoint(securityin: -, in: {header A: 1} {header X}, errout: -, out: {header B: 2} {header Y})
βœ… Endpoint(securityin: -, in: ?a ?b ?x ?y, errout: -, out: {header A} {header B} {header X} {header Y})
βœ… Endpoint(securityin: -, in: ?p1 ?p2 ?p3, errout: -, out: {header P1} {header P2} {header P3})
βœ… Endpoint[mapped to unit](securityin: -, in: ?p1 ?p2, errout: -, out: {header P1} {header P2})
βœ… Endpoint[metrics](securityin: -, in: POST /api /echo {body as application/json (UTF-8)}, errout: -, out: {body as application/json (UTF-8)})
βœ… Endpoint[metrics](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream})
βœ… Endpoint[metrics](securityin: -, in: GET /, errout: -, out: -)
βœ… Endpoint[metrics on exception](securityin: -, in: GET /, errout: -, out: -)
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: one of(status code (202) {body as text/plain (UTF-8)}|status code (200) {body as text/plain (UTF-8)}))
βœ… Endpoint(securityin: -, in: /mapping ?num, errout: -, out: one of(status code (202) {body as text/plain (UTF-8)}|status code (200) {body as text/plain (UTF-8)}))
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: one of(status code (202)|status code (200) {body as text/plain (UTF-8)}))
βœ… Endpoint(securityin: -, in: GET /entity /[type], errout: -, out: one of(status code (201) {body as application/json (UTF-8)}|{body as application/json (UTF-8)}))
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: one of(status code (204)|status code (202) {body as application/json (UTF-8)}|status code (200) {body as application/json (UTF-8)}))
βœ… Endpoint(securityin: -, in: ?fruit, errout: {body as application/json (UTF-8)}, out: -)
βœ… ServerEndpoint(securityin: {header token}, in: ?y, errout: {body as application/json (UTF-8)}, out: {body as text/plain (UTF-8)}) security error outputs extended with additional variants in main logic
βœ… Endpoint(securityin: -, in: /status ?statusOut, errout: -, out: one of(status code (404)|status code (400) {body as application/json (UTF-8)}))
βœ… given a list of endpoints, should return 405 for unsupported methods
βœ… given a list of endpoints with different paths, should return 405 for unsupported methods
βœ… given a list of endpoints and a customized reject handler, should return a custom response for unsupported methods
βœ… Endpoint(securityin: -, in: /path, errout: -, out: -) should return 404 for an unknown endpoint
βœ… Endpoint(securityin: -, in: GET /path, errout: -, out: -) should return 404 for an unsupported method, when a single endpoint is interpreted
βœ… Endpoint(securityin: -, in: ?fruit(~apple|banana), errout: -, out: -) support query validation with tagged type
βœ… Endpoint(securityin: -, in: ?amount(>=0), errout: -, out: -) support query validation
βœ… Endpoint(securityin: -, in: {body as application/json (UTF-8)}(fruit->(length>=4),amount->(>=1)), errout: -, out: -) support jsonBody validation with wrapped type
βœ… Endpoint(securityin: -, in: ?amount(>=1), errout: -, out: -) support query validation with wrapper type
βœ… Endpoint(securityin: -, in: {body as application/json (UTF-8)}(fruits->(size>=1,elements(fruit->(length>=4),amount->(>=1)))), errout: -, out: -) support jsonBody validation with list of wrapped type
βœ… Endpoint(securityin: -, in: POST one of({body as application/json (UTF-8)}|{body as application/xml (UTF-8)}|{body as text/plain (UTF-8)}), errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: POST one of({body as application/json (UTF-8)}|text/* -> {body as text/plain (UTF-8)}), errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: POST {body as text/plain (UTF-8)}, errout: -, out: one of({body as application/json (UTF-8)}|{body as application/xml (UTF-8)}|{body as text/plain (UTF-8)}))
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: {body as text/plain (UTF-8)}) CORS with default config; valid preflight request
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with specific allowed origin, method, headers, allowed credentials and max age; preflight request with matching origin, method and headers
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with multiple allowed origins, method, headers, allowed credentials and max age; preflight request with matching origin, method and headers
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with specific allowed origin; preflight request with unsupported origin
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with multiple allowed origins; preflight request with unsupported origin
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with specific allowed method; preflight request with unsupported method
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with specific allowed headers; preflight request with unsupported header
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with reflected allowed headers; preflight request
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with custom response code for preflight requests; valid preflight request
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with default config; preflight request without Origin (non-CORS)
βœ… Endpoint(securityin: -, in: GET /path, errout: -, out: {body as text/plain (UTF-8)}) CORS with default config; valid CORS request
βœ… Endpoint(securityin: -, in: GET /path, errout: -, out: {body as text/plain (UTF-8)}) CORS with custom allowed origin, allowed credentials and exposed headers; valid CORS request
βœ… Endpoint(securityin: -, in: GET /path, errout: -, out: {body as text/plain (UTF-8)}) CORS with all headers exposed; valid CORS request
βœ… returns tapir-generated 404 when defaultHandlers(notFoundWhenRejected = true) is used
βœ… Log events with provided functions, skipping certain endpoints
βœ… ServerEndpoint(securityin: -, in: -, errout: -, out: {body as text/plain (UTF-8)}) Server waits for long-running request to complete within timeout
βœ… ServerEndpoint(securityin: -, in: -, errout: -, out: {body as text/plain (UTF-8)}) Server rejects requests with 503 during shutdown

βœ…Β server/nima-server/target/jvm-2.13/test-reports/TEST-sttp.tapir.server.nima.NimaServerTest.xml

189 tests were completed in 4s with 189 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
sttp.tapir.server.nima.NimaServerTest 189βœ… 4s

βœ…Β sttp.tapir.server.nima.NimaServerTest

βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)}) with URL encoding
βœ… Endpoint[infallible](securityin: -, in: ?fruit, errout: void, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: ?fruit ?amount, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: {header X-Role}, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: /fruit /[] /amount /[], errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: /fruit /[] /amount /[], errout: -, out: {body as text/plain (UTF-8)}) with URL encoding
βœ… Endpoint(securityin: -, in: GET /api /[], errout: -, out: -) Empty path should not be passed to path capture decoding
βœ… Endpoint(securityin: -, in: /in /[] /[], errout: -, out: {header a} {header b}) capturing two path parameters with the same specification
βœ… Endpoint(securityin: -, in: POST /api /echo {body as text/plain (UTF-8)}, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: POST /api /echo {body as text/plain (UTF-8)}, errout: -, out: {body as text/plain (UTF-8)}) with get method
βœ… Endpoint(securityin: -, in: {header SomeHeader} /[], errout: -, out: {header IntHeader} {body as text/plain (UTF-8)}) Header input before path capture input
βœ… Endpoint[echo json](securityin: -, in: POST /api /echo {body as application/json (UTF-8)}, errout: -, out: {body as application/json (UTF-8)})
βœ… Endpoint[echo json](securityin: -, in: POST /api /echo {body as application/json (UTF-8)}, errout: -, out: {body as application/json (UTF-8)}) with accept header
βœ… Endpoint[echo json](securityin: -, in: POST /api /echo {body as application/json (UTF-8)}, errout: -, out: {body as application/json (UTF-8)}) content type
βœ… Endpoint[echo byte array](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream})
βœ… Endpoint[echo byte buffer](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream})
βœ… Endpoint(securityin: -, in: /api /unit, errout: -, out: {body as application/json (UTF-8)}) unit json mapper
βœ… Endpoint(securityin: -, in: /api, errout: -, out: {body as text/plain (UTF-8)}) default status mapper
βœ… Endpoint(securityin: -, in: /api, errout: {body as text/plain (UTF-8)}, out: -) default error status mapper
βœ… Endpoint(securityin: -, in: POST /api /echo {body as application/x-www-form-urlencoded (UTF-8)}, errout: -, out: {body as application/x-www-form-urlencoded (UTF-8)})
βœ… Endpoint(securityin: -, in: GET /api /echo /params ?*, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: GET /[pathParam] ?*, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: GET /api /echo /params ?*, errout: -, out: {body as text/plain (UTF-8)}) should support value-less query param
βœ… Endpoint(securityin: -, in: GET /api /echo /headers {multiple headers}, errout: -, out: {multiple headers})
βœ… Endpoint(securityin: -, in: GET /*, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: GET /*, errout: -, out: {body as text/plain (UTF-8)}) paths should match empty path
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)}) invalid query parameter
βœ… Endpoint(securityin: -, in: GET /api /echo /param-to-header ?qq, errout: -, out: {header hh})
βœ… Endpoint(securityin: -, in: GET /api /echo /headers {header Cookie}, errout: -, out: {header Set-Cookie})
βœ… Endpoint(securityin: -, in: GET / ?q, errout: -, out: {header Set-Cookie} {body as text/plain (UTF-8)}) should be invulnerable to response splitting from unsanitized headers
βœ… Endpoint(securityin: -, in: GET /api /echo /headers {header Set-Cookie}, errout: -, out: {header Set-Cookie})
βœ… Endpoint(securityin: -, in: /api /echo {body as text/plain (UTF-8)}, errout: -, out: {body as text/plain (UTF-8)} {header Content-Type}) dynamic content type
βœ… Endpoint(securityin: -, in: /api /echo {header Content-Type}, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: POST /api /echo {header Content-Type: application/json}, errout: -, out: -) mismatch content-type
βœ… Endpoint(securityin: -, in: POST /api /echo {header Content-Type: application/json}, errout: -, out: -) missing content-type
βœ… Endpoint(securityin: -, in: POST /api /echo {header Content-Type}, errout: -, out: -) mismatch content-type
βœ… Endpoint(securityin: -, in: POST /api /echo {header Content-Type}, errout: -, out: -) missing content-type
βœ… Endpoint(securityin: -, in: /api /echo, errout: -, out: {body as text/html (UTF-8)})
βœ… Endpoint(securityin: -, in: -, errout: -, out: status code (308) {header Location})
βœ… Endpoint(securityin: -, in: -, errout: -, out: {header Location: Poland})
βœ… Endpoint(securityin: -, in: POST /api /echo {body as application/json (UTF-8)}, errout: -, out: {body as application/json (UTF-8)})
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: status code - possible codes (Map())) custom status code
βœ… Endpoint(securityin: -, in: {data from request}, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: status code - possible codes (Map()))
βœ… Endpoint[Query with default](securityin: -, in: ?p1, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: /api {header Content-Type: multipart/form-data}, errout: -, out: {body as text/plain (UTF-8)}) fixed multipart/form-data header input should ignore boundary directive
βœ… Endpoint(securityin: -, in: ?kind, errout: -, out: {header Content-Type})
βœ… Endpoint(securityin: -, in: ?kind, errout: -, out: {header Content-Type} {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: POST /api /echo {body as application/json (UTF-8)}, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: GET ?flag, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)}) should contain the content-length header
βœ… Endpoint(securityin: -, in: -, errout: -, out: -) GET empty endpoint
βœ… Endpoint(securityin: -, in: -, errout: -, out: -) POST empty endpoint
βœ… Endpoint(securityin: -, in: -, errout: -, out: {body as text/plain (UTF-8)} {header Content-Type: text/csv}) Fixed content-type header
βœ… Endpoint(securityin: -, in: GET, errout: -, out: -) GET a GET endpoint
βœ… Endpoint(securityin: -, in: GET, errout: -, out: -) POST a GET endpoint
βœ… Endpoint(securityin: -, in: -, errout: -, out: -) no path should match anything
βœ… Endpoint(securityin: -, in: GET /, errout: -, out: -) root path should not match non-root path
βœ… Endpoint(securityin: -, in: GET /, errout: -, out: -) root path should match empty path
βœ… Endpoint(securityin: -, in: GET /, errout: -, out: -) root path should match root path
βœ… Endpoint(securityin: -, in: GET /api, errout: -, out: -) single path should match single path
βœ… Endpoint(securityin: -, in: GET /api, errout: -, out: -) single path should match single/ path
βœ… Endpoint(securityin: -, in: GET /api /[] /and /*, errout: -, out: {header IntPath} {body as text/plain (UTF-8)}) Capturing paths after path capture
βœ… Endpoint(securityin: -, in: GET /api /[] /and /*, errout: -, out: {header IntPath} {body as text/plain (UTF-8)}) Capturing paths after path capture (when empty)
βœ… Endpoint(securityin: -, in: GET /api, errout: -, out: -) single path should not match root path
βœ… Endpoint(securityin: -, in: GET /api, errout: -, out: -) single path should not match larger path
βœ… ServerEndpoint(securityin: /auth, in: /settings, errout: -, out: {body as text/plain (UTF-8)})
βœ… ServerEndpoint(securityin: /auth, in: -, errout: -, out: {body as text/plain (UTF-8)})
βœ… two endpoints with increasingly specific path inputs: should match path exactly
βœ… two endpoints with a body defined as the first input: should only consume body when the path matches
βœ… two endpoints with query defined as the first input, path segments as second input: should try the second endpoint if the path doesn't match
βœ… two endpoints with increasingly specific path inputs, first with a required query parameter: should match path exactly
βœ… two endpoints with validation: should not try the second one if validation fails
βœ… endpoint with a security input and regular path input shouldn't shadow other endpoints
βœ… two endpoints, same path prefix, one without trailing slashes, second accepting trailing slashes
βœ… try other paths on decode failure if onDecodeFailureNextEndpoint
βœ… two endpoints with different methods, first one with path parsing
βœ… Endpoint(securityin: -, in: GET /customer /[customer_id] /orders /[order_id], errout: -, out: -) Returns 400 if path 'shape' matches, but failed to parse a path parameter, using a custom decode failure handler
βœ… Endpoint(securityin: -, in: GET /customer /[customer_id] /orders /[order_id], errout: -, out: -) Returns 404 if path 'shape' doesn't match
βœ… Endpoint(securityin: -, in: GET /customer /[customer_id], errout: -, out: -) Returns 400 if path 'shape' matches, but failed to parse a path parameter
βœ… Tries next endpoint if path 'shape' matches, but validation fails, using .onDecodeFailureNextEndpoint
βœ… ServerEndpoint(securityin: ?x, in: ?y, errout: -, out: {body as text/plain (UTF-8)}) server security logic - one input
βœ… ServerEndpoint(securityin: ?x ?y, in: ?z ?u, errout: -, out: {body as text/plain (UTF-8)}) server security logic - multiple inputs
βœ… Endpoint[echo input stream](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream})
βœ… Endpoint[input string output stream with header](securityin: -, in: POST /api /echo {body as text/plain (UTF-8)}, errout: -, out: {body as application/octet-stream} {header Content-Length})
βœ… Endpoint(securityin: -, in: -, errout: -, out: -) handle exceptions
βœ… recover errors from exceptions
βœ… fail when status is 204 or 304, but there's a body
βœ… ServerEndpoint(securityin: /auth auth(api key, via {header X-Api-Key}), in: -, errout: -, out: {body as text/plain (UTF-8)})
βœ… ServerEndpoint(securityin: /auth auth(api key, via {header X-Api-Key}), in: ?amount, errout: -, out: {body as text/plain (UTF-8)})
βœ… ServerEndpoint(securityin: /auth auth(api key, via ?api-key), in: -, errout: -, out: {body as text/plain (UTF-8)})
βœ… ServerEndpoint(securityin: /auth auth(Basic http, via {header Authorization}), in: -, errout: -, out: {body as text/plain (UTF-8)})
βœ… ServerEndpoint(securityin: /auth auth(Bearer http, via {header Authorization}), in: -, errout: -, out: {body as text/plain (UTF-8)})
βœ… ServerEndpoint(securityin: /auth auth(Basic http, via {header Authorization}), in: -, errout: -, out: {body as text/plain (UTF-8)}) In security Option[UsernamePassword] should let in basic auth as well as request without auth
βœ… ServerEndpoint(securityin: /auth auth(Basic http, via {header Authorization}) auth(Bearer http, via {header Authorization}), in: -, errout: -, out: {body as text/plain (UTF-8)}) In security (Option[UsernamePassword], Option[String]) should pass bearer auth, basic auth, and also request without auth
βœ… ServerEndpoint(securityin: /secret /[id] auth(Basic http, via {header Authorization}), in: POST ?q, errout: -, out: -) correct basic
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) correct bearer
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) correct lower case bearer
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via ?token), in: POST ?q, errout: -, out: -) correct apiKey in query param
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header x-api-key}), in: POST ?q, errout: -, out: -) correct apiKey in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) correct old token in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) correct new token in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(Basic http, via {header Authorization}), in: POST ?q, errout: -, out: -) missing basic
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) missing bearer
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) missing lower case bearer
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via ?token), in: POST ?q, errout: -, out: -) missing apiKey in query param
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header x-api-key}), in: POST ?q, errout: -, out: -) missing apiKey in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) missing old token in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) missing new token in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(Basic http, via {header Authorization}), in: POST ?q, errout: -, out: -) missing basic with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) missing bearer with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) missing lower case bearer with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via ?token), in: POST ?q, errout: -, out: -) missing apiKey in query param with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header x-api-key}), in: POST ?q, errout: -, out: -) missing apiKey in header with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) missing old token in header with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) missing new token in header with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(Basic http, via {header Authorization}), in: POST ?q, errout: -, out: -) invalid request basic
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) invalid request bearer
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) invalid request lower case bearer
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via ?token), in: POST ?q, errout: -, out: -) invalid request apiKey in query param
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header x-api-key}), in: POST ?q, errout: -, out: -) invalid request apiKey in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) invalid request old token in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) invalid request new token in header
βœ… ServerEndpoint(securityin: /secret /[id] auth(Basic http, via {header Authorization}), in: POST ?q, errout: -, out: -) invalid request basic with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) invalid request bearer with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(Bearer http, via {header Authorization}), in: POST ?q, errout: -, out: -) invalid request lower case bearer with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via ?token), in: POST ?q, errout: -, out: -) invalid request apiKey in query param with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header x-api-key}), in: POST ?q, errout: -, out: -) invalid request apiKey in header with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) invalid request old token in header with endpoint hiding
βœ… ServerEndpoint(securityin: /secret /[id] auth(api key, via {header token-old}) auth(api key, via {header token-new}), in: POST ?q, errout: -, out: -) invalid request new token in header with endpoint hiding
βœ… Endpoint(securityin: -, in: GET /content-negotiation /organization {header Accept}, errout: -, out: one of(status code (200) {body as application/json (UTF-8)}|status code (200) {body as application/xml (UTF-8)}|status code (200) {body as text/html (UTF-8)}|status code (200) {body as text/html (ISO-8859-1)}))
βœ… Endpoint(securityin: -, in: GET /content-negotiation /organization, errout: -, out: one of(status code (200) {body as application/json (UTF-8)}|status code (200) {body as application/xml (UTF-8)})) takes first content type when no accepts header
βœ… Endpoint(securityin: -, in: GET /content-negotiation /organization, errout: -, out: one of(status code (200) {body as application/xml (UTF-8)}|status code (200) {body as application/json (UTF-8)})) takes first content type when no accepts header
βœ… Endpoint(securityin: -, in: GET /, errout: -, out: -) accepts header without output body
βœ… Endpoint[echo byte array](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream}) not take into account the accept charset header when the body media type doesn't specify one
βœ… Endpoint(securityin: -, in: GET /content-negotiation /organization-parameters, errout: -, out: one of({body as application/json (UTF-8)}|{body as application/json; name=unknown (UTF-8)})) matches content type on accept parameters
βœ… Endpoint(securityin: -, in: GET /content-negotiation /multipart-mixed multipart/mixed -> {body as text/plain (UTF-8)}, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint[echo file](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream})
βœ… Endpoint[mapped query](securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint[mapped path](securityin: -, in: /fruit /[], errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint[mapped path path](securityin: -, in: /fruit /[] /amount /[], errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint[query and mapped path path](securityin: -, in: /fruit /[] /amount /[] ?color, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint[out mapped](securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint[out mapped](securityin: -, in: ?fruit, errout: -, out: {body as text/plain (UTF-8)} {header X-Role})
βœ… Endpoint(securityin: -, in: {header A: 1} {header X}, errout: -, out: {header B: 2} {header Y})
βœ… Endpoint(securityin: -, in: ?a ?b ?x ?y, errout: -, out: {header A} {header B} {header X} {header Y})
βœ… Endpoint(securityin: -, in: ?p1 ?p2 ?p3, errout: -, out: {header P1} {header P2} {header P3})
βœ… Endpoint[mapped to unit](securityin: -, in: ?p1 ?p2, errout: -, out: {header P1} {header P2})
βœ… Endpoint[metrics](securityin: -, in: POST /api /echo {body as application/json (UTF-8)}, errout: -, out: {body as application/json (UTF-8)})
βœ… Endpoint[metrics](securityin: -, in: POST /api /echo {body as application/octet-stream}, errout: -, out: {body as application/octet-stream})
βœ… Endpoint[metrics](securityin: -, in: GET /, errout: -, out: -)
βœ… Endpoint[metrics on exception](securityin: -, in: GET /, errout: -, out: -)
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: one of(status code (202) {body as text/plain (UTF-8)}|status code (200) {body as text/plain (UTF-8)}))
βœ… Endpoint(securityin: -, in: /mapping ?num, errout: -, out: one of(status code (202) {body as text/plain (UTF-8)}|status code (200) {body as text/plain (UTF-8)}))
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: one of(status code (202)|status code (200) {body as text/plain (UTF-8)}))
βœ… Endpoint(securityin: -, in: GET /entity /[type], errout: -, out: one of(status code (201) {body as application/json (UTF-8)}|{body as application/json (UTF-8)}))
βœ… Endpoint(securityin: -, in: ?fruit, errout: -, out: one of(status code (204)|status code (202) {body as application/json (UTF-8)}|status code (200) {body as application/json (UTF-8)}))
βœ… Endpoint(securityin: -, in: ?fruit, errout: {body as application/json (UTF-8)}, out: -)
βœ… ServerEndpoint(securityin: {header token}, in: ?y, errout: {body as application/json (UTF-8)}, out: {body as text/plain (UTF-8)}) security error outputs extended with additional variants in main logic
βœ… Endpoint(securityin: -, in: /status ?statusOut, errout: -, out: one of(status code (404)|status code (400) {body as application/json (UTF-8)}))
βœ… given a list of endpoints, should return 405 for unsupported methods
βœ… given a list of endpoints with different paths, should return 405 for unsupported methods
βœ… given a list of endpoints and a customized reject handler, should return a custom response for unsupported methods
βœ… Endpoint(securityin: -, in: /path, errout: -, out: -) should return 404 for an unknown endpoint
βœ… Endpoint(securityin: -, in: GET /path, errout: -, out: -) should return 404 for an unsupported method, when a single endpoint is interpreted
βœ… Endpoint(securityin: -, in: ?fruit(~apple|banana), errout: -, out: -) support query validation with tagged type
βœ… Endpoint(securityin: -, in: ?amount(>=0), errout: -, out: -) support query validation
βœ… Endpoint(securityin: -, in: {body as application/json (UTF-8)}(fruit->(length>=4),amount->(>=1)), errout: -, out: -) support jsonBody validation with wrapped type
βœ… Endpoint(securityin: -, in: ?amount(>=1), errout: -, out: -) support query validation with wrapper type
βœ… Endpoint(securityin: -, in: {body as application/json (UTF-8)}(fruits->(size>=1,elements(fruit->(length>=4),amount->(>=1)))), errout: -, out: -) support jsonBody validation with list of wrapped type
βœ… Endpoint(securityin: -, in: POST one of({body as application/json (UTF-8)}|{body as application/xml (UTF-8)}|{body as text/plain (UTF-8)}), errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: POST one of({body as application/json (UTF-8)}|text/* -> {body as text/plain (UTF-8)}), errout: -, out: {body as text/plain (UTF-8)})
βœ… Endpoint(securityin: -, in: POST {body as text/plain (UTF-8)}, errout: -, out: one of({body as application/json (UTF-8)}|{body as application/xml (UTF-8)}|{body as text/plain (UTF-8)}))
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: {body as text/plain (UTF-8)}) CORS with default config; valid preflight request
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with specific allowed origin, method, headers, allowed credentials and max age; preflight request with matching origin, method and headers
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with multiple allowed origins, method, headers, allowed credentials and max age; preflight request with matching origin, method and headers
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with specific allowed origin; preflight request with unsupported origin
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with multiple allowed origins; preflight request with unsupported origin
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with specific allowed method; preflight request with unsupported method
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with specific allowed headers; preflight request with unsupported header
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with reflected allowed headers; preflight request
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with custom response code for preflight requests; valid preflight request
βœ… Endpoint(securityin: -, in: OPTIONS /path, errout: -, out: -) CORS with default config; preflight request without Origin (non-CORS)
βœ… Endpoint(securityin: -, in: GET /path, errout: -, out: {body as text/plain (UTF-8)}) CORS with default config; valid CORS request
βœ… Endpoint(securityin: -, in: GET /path, errout: -, out: {body as text/plain (UTF-8)}) CORS with custom allowed origin, allowed credentials and exposed headers; valid CORS request
βœ… Endpoint(securityin: -, in: GET /path, errout: -, out: {body as text/plain (UTF-8)}) CORS with all headers exposed; valid CORS request
βœ… returns tapir-generated 404 when defaultHandlers(notFoundWhenRejected = true) is used
βœ… Log events with provided functions, skipping certain endpoints