(defmodule lamina_library_tests
(export all)
(include-lib "eunit/include/eunit.hrl"))
(defun entry-text-roundtrips-a-unicode-name_test ()
(let* ((name (list 25351 21335))
(items (list (lamina_library:entry "4" "trunk" name)))
(bin (unicode:characters_to_binary (lamina_library:format-entries items)))
(parsed (lamina_library:parse-entries (lamina_docs:decode-text bin))))
(if (and (=:= 1 (length parsed))
(=:= name (maps:get 'name (hd parsed)))
(=:= "4" (maps:get 'repo_id (hd parsed)))
(=:= "trunk" (maps:get 'branch (hd parsed))))
'ok
(erlang:error parsed))))
(defun navigation-name-rejects-a-slash_test ()
(if (and (=:= 'true (lamina_library:valid-name? "User Guide"))
(=:= 'true (lamina_library:valid-name? (list 25351 21335)))
(=:= 'false (lamina_library:valid-name? "a/b"))
(=:= 'false (lamina_library:valid-name? ""))
(=:= 'false (lamina_library:valid-name? "..")))
'ok
(erlang:error 'name)))
(defun library-prefix-keeps-the-article-inside-its-section_test ()
(let ((html (lamina_docs:render-markdown "[x](intro.md)" (tuple "/library/API" "Guide"))))
(if (=:= 'true (contains? html "href=\"/library/API/Guide/intro\""))
'ok
(erlang:error html))))
(defun hidden-docs-repository-drops-out-of-the-homepage_test ()
(let ((summary (tuple "" "" "docsdemo" "Docs demo" "" "" "" "/repos/docsdemo.fossil"))
(hidden (list "/repos/docsdemo.fossil")))
(if (and (=:= 'true (lamina_site_mgr:hide-summary? summary hidden))
(=:= 'false (lamina_site_mgr:hide-summary? summary (list "/repos/other.fossil"))))
'ok
(erlang:error 'hide))))
(defun move-entry-swaps-with-its-neighbor_test ()
(let* ((items (list (lamina_library:entry "1" "trunk" "One")
(lamina_library:entry "2" "trunk" "Two")
(lamina_library:entry "3" "trunk" "Three")))
(up (lamina_library:swap items "Two" "up"))
(down (lamina_library:swap items "Two" "down")))
(if (and (=:= (list "Two" "One" "Three") (names up))
(=:= (list "One" "Three" "Two") (names down))
(=:= 'false (lamina_library:swap items "One" "up")))
'ok
(erlang:error (list (names up) (names down))))))
(defun names (items)
(lists:map (lambda (item) (maps:get 'name item)) items))
(defun contains? (text needle)
(/= 'nomatch (string:find text needle)))