{ describe, it, ... }: let html = import ../nixite/html.nix; elems = import ../nixite/elems.nix; site = import ../nixite/site.nix; style = import ../nixite/style.nix; my-site = { "index.html" = html.document { head = [(elems.title {} "foobar")]; body = [(elems.main {} "something")]; }; blog = { "index.html" = html.document { head = [(elems.title {} "foobar")]; body = elems.main {} "blogy blog"; }; }; }; in with site; [ ( describe "linkStyle" [ (it "links a stylesheet" { actual = linkStyle "my-styles.css" my-site; expected = { "index.html" = html.addToHead my-site."index.html" [(elems.Stylesheet "my-styles.css")]; blog = { "index.html" = html.addToHead my-site.blog."index.html" [(elems.Stylesheet "my-styles.css")]; }; }; asJSON = true; }) ] ) ( describe "applyStyle" [ (it "applies a style" { expected = { "index.html" = html.addToHead my-site."index.html" [(elems.Stylesheet "/style.css")]; blog = { "index.html" = html.addToHead my-site.blog."index.html" [(elems.Stylesheet "/style.css")]; }; "style.css" = '' this is a stylesheet ''; }; actual = applyStyle '' this is a stylesheet '' my-site; asJSON = true; }) ] ) ( describe "applyFavicon" [ (it "applies a favicon" ( let href = "my-favicon.ico"; favicon-link = elems.link { rel = "shortcut icon"; inherit href; }; in { expected = { "index.html" = my-site."index.html" // { head = my-site."index.html".head ++ [favicon-link]; }; blog = { "index.html" = my-site.blog."index.html" // { head = my-site.blog."index.html".head ++ [favicon-link]; }; }; }; actual = applyFavicon href my-site; } )) ] ) ( describe "getStyles" [ (it "gets all styles" { expected = { "p" = {}; "div" = {}; "p.class" = {color = "blue";}; "div.class2" = {color = "green";}; }; actual = getStyles (let p = style.component elems.p "class" {style = {color = "blue";};}; g = style.component elems.div "class2" {style = {color = "green";};}; in { "index.html" = p ""; blog = {"index.html" = g "";}; }); removeDunders = true; }) ] ) ( describe "getPaths" [ (it "gets top level paths" { actual = getPaths { something = ""; src = ./src/index.md; }; expected = {"index.md" = ./src/index.md;}; }) (it "gets lower level paths" { actual = getPaths { something = "yes"; a-list = [ {thingy = ./src/index.md;} [(html.tag "img" {src = ./src/favicon.png;} "")] ]; }; expected = { "index.md" = ./src/index.md; "favicon.png" = ./src/favicon.png; }; }) ] ) ( describe "switchPaths" [ (it "switches paths" { actual = switchPaths { something = ""; a-thing = {src = ./src/index.md;}; a-list = [{thingy = ./src/index.md;}]; }; expected = { something = ""; a-thing = {src = "/static/index.md";}; a-list = [{thingy = "/static/index.md";}]; }; }) ] ) ( describe "extractPaths" [ (it "extracts paths" { actual = extractPaths { something = ""; a-thing = {src = ./src/index.md;}; a-list = [{thingy = ./src/index.md;}]; }; expected = { something = ""; a-thing = {src = "/static/index.md";}; a-list = [{thingy = "/static/index.md";}]; static = {"index.md" = ./src/index.md;}; }; }) ] ) (describe "switchLinks" [ (it "switches links" (let coolPage = { type = "link"; name = "cool-page"; content = ""; }; in { actual = switchLinks { something = ""; a-thing = {src = coolPage;}; a-list = [{thingy = coolPage;}]; }; expected = { something = ""; a-thing = {src = "/static/cool-page";}; a-list = [{thingy = "/static/cool-page";}]; }; })) ]) (describe "getLinks" [ (it "gets links" (let coolPage = { type = "link"; name = "cool-page"; content = "cool content"; }; otherPage = { type = "link"; name = "page2"; content = "stuff"; }; in { actual = getLinks { something = "yes"; a-list = [{thingy = coolPage;} [(elems.img {src = otherPage;} "")]]; }; expected = { "cool-page" = "cool content"; "page2" = "stuff"; }; })) ]) (describe "extractLinks" [ (it "extracts links" (let coolPage = { type = "link"; name = "cool-page"; content = "cool content"; }; otherPage = { type = "link"; name = "page2"; content = "stuff"; }; in { actual = extractLinks { something = ""; a-thing = {src = coolPage;}; a-list = [{thingy = otherPage;}]; }; expected = { something = ""; a-thing = {src = "/static/cool-page";}; a-list = [{thingy = "/static/page2";}]; static = { "cool-page" = "cool content"; "page2" = "stuff"; }; }; })) ]) (describe "copyTo" [ (it "copies all the files" { actual = copyTo "." { page = "this is a page"; subdir = { page = "this page is in a subdir"; link = ./src; }; }; expected = '' cp /nix/store/crirfz0n6f8dgl1si3x7pwyw7fqm0r8l-page ./page mkdir -p ./subdir cp -r /nix/store/q95cn7ccixzi9w22aic4bl0ykk40ka7v-src ./subdir/link cp /nix/store/ic6fyy8wg8r4338a3m5kinmg11igxsyj-page ./subdir/page ''; }) (it "throws with a list for a page" { actual = copyTo "." {page = [];}; throws = true; }) (it "throws with null for a page" { actual = copyTo "." {page = null;}; throws = true; }) (it "throws with a bool for a page" { actual = copyTo "." {page = true;}; throws = true; }) (it "throws with a number for a page" { actual = copyTo "." {page = 5;}; throws = true; }) ]) (describe "prepare" [ (it "prepares the site" { actual = prepare {favicon = ./src/favicon.png;} my-site; expected = let my-favicon-link = elems.link { rel = "shortcut icon"; href = "/static/favicon.png"; }; my-style = elems.Stylesheet "/style.css"; in { "index.html" = html.document { head = my-site."index.html".head ++ [my-favicon-link my-style]; body = my-site."index.html".body; }; blog = { "index.html" = html.document { body = my-site.blog."index.html".body; head = my-site.blog."index.html".head ++ [my-favicon-link my-style]; }; }; static = { "favicon.png" = ./src/favicon.png; }; "style.css" = ""; }; asJSON = true; }) ]) ]