{ it, ... }: let html = import ../nixite/html.nix; elems = import ../nixite/elems.nix; site = import ../nixite/site.nix; style = import ../nixite/style.nix; in with site; [ (it "applies a style" { expected = { "index.html" = html.tag "html" { } [ (html.tag "head" { } [ (elems.title { } "foobar") (elems.Stylesheet "/style.css") ]) (elems.main { } "something") ]; blog = { "index.html" = html.tag "html" { } [ (html.tag "head" { } [ (elems.title { } "foobar") (elems.Stylesheet "/style.css") ]) (elems.main { } "blogy blog") ]; }; "style.css" = '' this is a stylesheet ''; }; actual = applyStyle '' this is a stylesheet '' { "index.html" = html.tag "html" { } [ (html.tag "head" { } [ (elems.title { } "foobar") ]) (elems.main { } "something") ]; blog = { "index.html" = html.tag "html" { } [ (html.tag "head" { } [ (elems.title { } "foobar") ]) (elems.main { } "blogy blog") ]; }; }; asJSON = true; }) (it "applies a favicon" { expected = { "index.html" = elems.html { } [ (elems.head { } [ (elems.title { } "foobar") (elems.link { rel = "shortcut icon"; href = ./src/favicon.png; }) ]) (elems.main { } "something") ]; blog = { "index.html" = elems.html { } [ (elems.head { } [ (elems.title { } "foobar") (elems.link { rel = "shortcut icon"; href = ./src/favicon.png; }) ]) (elems.main { } "something") ]; }; }; actual = applyFavicon ./src/favicon.png { "index.html" = elems.html { } [ (elems.head { } [ (elems.title { } "foobar") ]) (elems.main { } "something") ]; blog = { "index.html" = elems.html { } [ (elems.head { } [ (elems.title { } "foobar") ]) (elems.main { } "something") ]; }; }; asJSON = true; }) (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; }) (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; }; }) (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"; }]; }; }) (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; }; }; }) (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"; }]; }; })) (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"; }; })) (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"; }; }; })) (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; })) (it "prepares the site" ({ actual = prepare { favicon = ./src/favicon.png; } { "index.html" = elems.html { } [ (elems.head { } [ (elems.title { } "foobar") ]) (elems.main { } [ (elems.a { href = { type = "link"; name = "a-page"; content = "this is another page"; }; } "A Page") ]) ]; blog = { "index.html" = elems.html { } [ (elems.head { } [ (elems.title { } "foobar") ]) (elems.main { } "something") ]; }; }; expected = { "index.html" = elems.html { } [ (elems.head { } [ (elems.title { } "foobar") (elems.link { rel = "shortcut icon"; href = "/static/favicon.png"; }) (elems.Stylesheet "/style.css") ]) (elems.main { } [ (elems.a { href = "/static/a-page"; } "A Page") ]) ]; blog = { "index.html" = elems.html { } [ (elems.head { } [ (elems.title { } "foobar") (elems.link { rel = "shortcut icon"; href = "/static/favicon.png"; }) (elems.Stylesheet "/style.css") ]) (elems.main { } "something") ]; }; static = { "favicon.png" = ./src/favicon.png; "a-page" = "this is another page"; }; "style.css" = ""; }; asJSON = true; })) ]