aboutsummaryrefslogtreecommitdiff
path: root/tests/router.scm
diff options
context:
space:
mode:
authorJakob L. Kreuze2026-07-11 16:40:02 -0400
committerJakob L. Kreuze2026-07-12 16:06:28 -0400
commit0290452fb61145587dc74e11925e9b4eb9160d83 (patch)
tree7aabfad811332e2e589674ca50997ac2d070207f /tests/router.scm
parent1e3eff419ee6acff05e5acf5476cb39e0d29e0a4 (diff)
URI anchoring fix
Diffstat (limited to 'tests/router.scm')
-rw-r--r--tests/router.scm30
1 files changed, 23 insertions, 7 deletions
diff --git a/tests/router.scm b/tests/router.scm
index 59ec793..9d5befe 100644
--- a/tests/router.scm
+++ b/tests/router.scm
@@ -18,8 +18,9 @@
(use-modules (srfi srfi-11)
(srfi srfi-64)
- (weeb router)
(weeb request)
+ (weeb response)
+ (weeb router)
(weeb struct))
;; Private imports for testing purposes.
@@ -34,22 +35,22 @@
(test-group "simple static route"
(let-values (((re vars) (uri-template->regexp-string "/health")))
- (test-equal "/health" re)
+ (test-equal "^/health$" re)
(test-equal '() vars)))
(test-group "single variable route"
(let-values (((re vars) (uri-template->regexp-string "/user/:id:")))
- (test-equal "/user/([^/]+)" re)
+ (test-equal "^/user/([^/]+)$" re)
(test-equal '(id) vars)))
(test-group "multiple variables with trailing slash"
(let-values (((re vars) (uri-template->regexp-string "/org/:org_id:/user/:user_id:/")))
- (test-equal "/org/([^/]+)/user/([^/]+)" re)
+ (test-equal "^/org/([^/]+)/user/([^/]+)/?$" re)
(test-equal '(org_id user_id) vars)))
(test-group "middle variables"
(let-values (((re vars) (uri-template->regexp-string "/api/:version:/data")))
- (test-equal "/api/([^/]+)/data" re)
+ (test-equal "^/api/([^/]+)/data$" re)
(test-equal '(version) vars)))
(test-group "handle route"
@@ -57,10 +58,10 @@
(list id))
(define-router router
("/user/:id:" (GET) handler))
- (let* ((req (make-struct <request> 'GET "/user/123/" #f #f #f))
+ (let* ((req (make-struct <request> 'GET "/user/123" #f #f #f))
(route-obj (car router)))
(test-equal '("123") (handle-route req route-obj)))
- (let ((req (make-struct <request> 'POST "/user/123/" #f #f #f))
+ (let ((req (make-struct <request> 'POST "/user/123" #f #f #f))
(route-obj (car router)))
(test-eqv #f (handle-route req route-obj))))
@@ -94,4 +95,19 @@
(let ((req (make-struct <request> 'GET "/" #f #f #f)))
(test-equal "home" (iter-routes req router))))
+(test-group "edge cases 3: anchor validation"
+ (define-router router
+ ("/health" (GET) (lambda (r) "ok"))
+ ("/user/:id:" (GET) (lambda (r id) id))
+ ("/" (GET) (lambda (r) "home")))
+ (let* ((req (make-struct <request> 'GET "/health/extra" #f #f #f))
+ (res (any->response (iter-routes req router))))
+ (with-accessors (res code) (test-eqv 404 code)))
+ (let* ((req (make-struct <request> 'GET "/user/123/extra" #f #f #f))
+ (res (any->response (iter-routes req router))))
+ (with-accessors (res code) (test-eqv 404 code)))
+ (let* ((req (make-struct <request> 'GET "/anything" #f #f #f))
+ (res (any->response (iter-routes req router))))
+ (with-accessors (res code) (test-eqv 404 code))))
+
(test-end)

© 2015 - 2026 Jakob L. Kreuze