Fosi Fossil Service
Small teams. Open source. Built on Fossil.

CaaS / Lamina

Unified Management for Fossil Repositories

Public | Owner: CaaS | Default branch: trunk | Last update: 2026-10-25 00:41

Artifact d1946a5440b32eac335c59e42eec08f6027aa97c5e269dc3e6f849241bfb1183:


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

Clone

You can clone this repository with the following command:

fossil clone https://fosi.dev/CaaS/Lamina

Contribute

The best way to contribute is through e-mail. See the project documentation for more details.