test/genurl-tests.lisp
(defpackage murja.tests.genurl
(:use :cl :fiveam :murja.genurl :ps :paren-async)
(:import-from :murja.tests :prepare-db-and-server :drakma->string :url :main-suite :prepare-db-and-server)
(:local-nicknames (:settings :murja.setting-definitions)
(:tabs :murja.view.components.tabs)
(:feed :murja.view.rss)))
(in-package :murja.tests.genurl)
(named-readtables:in-readtable :murja.ps)
(in-suite main-suite)
(def-test genurl-test (:fixture prepare-db-and-server)
(let ((old-prefix (settings:prefix)))
(unwind-protect
(progn
;; initial state is as expected
(is (string= (settings:prefix) ""))
(is (string=
(route->url 'feed::rss-single-item :feed-id "auto-testing" :item-id "lololo")
"/feeds/auto-testing/item/lololo"))
;; changing setting works as expected
(settings:prefix "/a-random-test-murja-instance")
(is (string=
(route->url 'feed::rss-single-item :feed-id "auto-testing" :item-id "lololo")
"/a-random-test-murja-instance/feeds/auto-testing/item/lololo"))
;; instances of tab class keep their inner url prefix-less
(is (string= "/"
(tabs::tab-url
(gethash 'murja.view.blog-root:root murja.view.components.tabs::*tabs*))))
;; test the parenscript side
(is (string=
"async function deleteFeed(feedId) {
var result = await fetch('/a-random-test-murja-instance' + '/' + 'feed/' + feedId, { method : 'DELETE' });
__PS_MV_REG = [];
return 204 == await result.status ? location.reload() : alert('FAIL ' + await result.text());
};"
(ps
(defun-async delete-feed (feed-id)
(let ((result (await (fetch (lisp (route->url-ps
'feed::delete-feed-route :id 'feed-id))
(create method "DELETE")))))
(if (equal 204 (await (@ result status)))
(chain location (reload))
(alert (+ "FAIL " (await (chain result (text)))))))))))
;; random interesting facts tested when rewriting every url in the frontend
(settings:prefix old-prefix)
(is (string=
"/feeds/feed-me?archived=NIL"
(route->url 'feed::rss-single-feed :feed-id "feed-me" :archived (not t))))
;;make sure resetting prefix changes whatever (lisp (route->url-ps ...)) returns
(is (string=
"async function deleteFeed(feedId) {
var result = await fetch('' + '/' + 'feed/' + feedId, { method : 'DELETE' });
__PS_MV_REG = [];
return 204 == await result.status ? location.reload() : alert('FAIL ' + await result.text());
};"
(ps
(defun-async delete-feed (feed-id)
(let ((result (await (fetch (lisp (route->url-ps
'feed::delete-feed-route :id 'feed-id))
(create method "DELETE")))))
(if (equal 204 (await (@ result status)))
(chain location (reload))
(alert (+ "FAIL " (await (chain result (text))))))))))))
(settings:prefix old-prefix))))