Add trailing-slash middlewares
This commit is contained in:
parent
c305616c91
commit
84d9b5d984
6 changed files with 147 additions and 11 deletions
tests
93
tests/trailing-slash.lisp
Normal file
93
tests/trailing-slash.lisp
Normal file
|
@ -0,0 +1,93 @@
|
|||
(defpackage #:lack-mw-test/trailing-slash
|
||||
(:use #:cl
|
||||
#:rove)
|
||||
(:import-from #:lack)
|
||||
(:import-from #:lack/test
|
||||
#:testing-app
|
||||
#:request)
|
||||
(:import-from #:ningle)
|
||||
(:import-from #:lack-mw/trailing-slash
|
||||
#:*trim-trailing-slash*
|
||||
#:*append-trailing-slash*))
|
||||
(in-package #:lack-mw-test/trailing-slash)
|
||||
|
||||
(defparameter *app-without-trailing-slash*
|
||||
(lack:builder
|
||||
*trim-trailing-slash*
|
||||
(let ((raw-app (make-instance 'ningle:app)))
|
||||
(setf (ningle:route raw-app "/") "ok")
|
||||
(setf (ningle:route raw-app "/without/trailing/slash") "ok")
|
||||
raw-app)))
|
||||
|
||||
(defparameter *app-with-trailing-slash*
|
||||
(lack:builder
|
||||
*append-trailing-slash*
|
||||
(let ((raw-app (make-instance 'ningle:app)))
|
||||
(setf (ningle:route raw-app "/") "ok")
|
||||
(setf (ningle:route raw-app "/something.file") "ok")
|
||||
(setf (ningle:route raw-app "/with/trailing/slash/") "ok")
|
||||
raw-app)))
|
||||
|
||||
(deftest trailing-slash
|
||||
(testing "trim"
|
||||
(testing-app *app-without-trailing-slash*
|
||||
(multiple-value-bind (body status headers)
|
||||
(request "/")
|
||||
(declare (ignore headers))
|
||||
(ok (not (null body)))
|
||||
(ok (eql status 200)))
|
||||
|
||||
(multiple-value-bind (body status headers)
|
||||
(request "/without/trailing/slash")
|
||||
(declare (ignore headers))
|
||||
(ok (not (null body)))
|
||||
(ok (eql status 200)))
|
||||
|
||||
(multiple-value-bind (body status headers)
|
||||
(request "/without/trailing/slash/" :max-redirects 0)
|
||||
(ok (string= body ""))
|
||||
(ok (eql status 301))
|
||||
(ok (string= (gethash "location" headers)
|
||||
"/without/trailing/slash")))
|
||||
|
||||
(multiple-value-bind (body status headers)
|
||||
(request "/without/trailing/slash/?param=foo" :max-redirects 0)
|
||||
(ok (string= body ""))
|
||||
(ok (eql status 301))
|
||||
(ok (string= (gethash "location" headers)
|
||||
"/without/trailing/slash?param=foo")))))
|
||||
|
||||
(testing "append"
|
||||
(testing-app *app-with-trailing-slash*
|
||||
(multiple-value-bind (body status headers)
|
||||
(request "/")
|
||||
(declare (ignore headers))
|
||||
|
||||
(ok (not (null body)))
|
||||
(ok (eql status 200)))
|
||||
|
||||
(multiple-value-bind (body status headers)
|
||||
(request "/something.file")
|
||||
(declare (ignore headers))
|
||||
(ok (not (null body)))
|
||||
(ok (eql status 200)))
|
||||
|
||||
(multiple-value-bind (body status headers)
|
||||
(request "/with/trailing/slash/")
|
||||
(declare (ignore headers))
|
||||
(ok (not (null body)))
|
||||
(ok (eql status 200)))
|
||||
|
||||
(multiple-value-bind (body status headers)
|
||||
(request "/with/trailing/slash" :max-redirects 0)
|
||||
(ok (string= body ""))
|
||||
(ok (eql status 301))
|
||||
(ok (string= (gethash "location" headers)
|
||||
"/with/trailing/slash/")))
|
||||
|
||||
(multiple-value-bind (body status headers)
|
||||
(request "/with/trailing/slash?param=foo" :max-redirects 0)
|
||||
(ok (string= body ""))
|
||||
(ok (eql status 301))
|
||||
(ok (string= (gethash "location" headers)
|
||||
"/with/trailing/slash/?param=foo"))))))
|
Loading…
Add table
Add a link
Reference in a new issue