util.xtemplate: Add some initial tests
authorKim Alvefur <zash@zash.se>
Sat, 09 Dec 2023 15:15:06 +0100
changeset 13399 1675d4b6363a
parent 13398 6debd8dd12ab
child 13400 16413bc29361
util.xtemplate: Add some initial tests Strict typing does not magically make code correct
spec/util_xtemplate_spec.lua
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spec/util_xtemplate_spec.lua	Sat Dec 09 15:15:06 2023 +0100
@@ -0,0 +1,35 @@
+local st = require "prosody.util.stanza";
+local xtemplate = require "prosody.util.xtemplate";
+
+describe("util.xtemplate", function ()
+	describe("render()", function ()
+		it("works", function ()
+			assert.same("Hello", xtemplate.render("{greeting}", st.stanza("root"):text_tag("greeting", "Hello")), "regular text content")
+			assert.same("Hello", xtemplate.render("{#}", st.stanza("root"):text("Hello")), "top tag text content")
+			assert.same("Hello", xtemplate.render("{greeting/@en}", st.stanza("root"):tag("greeting", { en = "Hello" })), "attribute")
+		end)
+		it("supports conditionals", function ()
+			local atom_tmpl = "{@pubsub:title|and{*{@pubsub:title}*\n\n}}{summary|or{{author/name|and{{author/name} posted }}{title}}}";
+			local atom_data = st.stanza("entry", { xmlns = "http://www.w3.org/2005/Atom" });
+			assert.same("", xtemplate.render(atom_tmpl, atom_data));
+
+			atom_data:text_tag("title", "an Entry")
+			assert.same("an Entry", xtemplate.render(atom_tmpl, atom_data));
+
+			atom_data:tag("author"):text_tag("name","Juliet"):up();
+			assert.same("Juliet posted an Entry", xtemplate.render(atom_tmpl, atom_data));
+
+			atom_data:text_tag("summary", "Juliet just posted a new entry");
+			assert.same("Juliet just posted a new entry", xtemplate.render(atom_tmpl, atom_data));
+
+			atom_data.attr["xmlns:pubsub"] = "http://jabber.org/protocol/pubsub";
+			atom_data.attr["pubsub:title"] = "Juliets musings";
+			assert.same("*Juliets musings*\n\nJuliet just posted a new entry", xtemplate.render(atom_tmpl, atom_data));
+		end)
+		it("can strip surrounding whitespace", function ()
+			assert.same("Hello ", xtemplate.render(" {-greeting} ", st.stanza("root"):text_tag("greeting", "Hello")))
+			assert.same(" Hello", xtemplate.render(" {greeting-} ", st.stanza("root"):text_tag("greeting", "Hello")))
+			assert.same("Hello", xtemplate.render(" {-greeting-} ", st.stanza("root"):text_tag("greeting", "Hello")))
+		end)
+	end)
+end)