test/genurl-tests.lisp

DOWNLOAD
(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))))