support interaction between module and apps for updating templates before rendering
[squeep-authentication-module] / test / lib / template / helpers.js
diff --git a/test/lib/template/helpers.js b/test/lib/template/helpers.js
new file mode 100644 (file)
index 0000000..686f72b
--- /dev/null
@@ -0,0 +1,54 @@
+'use strict';
+
+const assert = require('node:assert');
+const Helpers = require('../../../lib/template/helpers');
+
+describe('Template Helpers', function () {
+  describe('sessionNavLinks', function () {
+    let pagePathLevel, ctx, options;
+    beforeEach(function () {
+      pagePathLevel = 0;
+      ctx = {
+        session: {
+          authenticatedIdentifier: 'username',
+        }
+      };
+      options = {};
+    });
+    it('adds nav links', function () {
+      Helpers.sessionNavLinks(pagePathLevel, ctx, options);
+      assert.strictEqual(options.navLinks.length, 2);
+    });
+    it('extends nav links', function () {
+      options.navLinks = [ {} ];
+      Helpers.sessionNavLinks(pagePathLevel, ctx, options);
+      assert.strictEqual(options.navLinks.length, 3);
+    });
+    it('add login link if no user', function () {
+      delete ctx.session.authenticatedIdentifier;
+      Helpers.sessionNavLinks(pagePathLevel, ctx, options);
+      assert.strictEqual(options.navLinks.length, 1);
+    });
+    it('adds nav links for profile', function () {
+      delete ctx.session.authenticatedIdentifier;
+      ctx.session.authenticatedProfile = 'https://example.com/';
+      Helpers.sessionNavLinks(pagePathLevel, ctx, options);
+      assert.strictEqual(options.navLinks.length, 2);
+    });
+    it('covers logout redirect', function () {
+      ctx.url = '../relative';
+      Helpers.sessionNavLinks(pagePathLevel, ctx, options);
+      assert.strictEqual(options.navLinks.length, 2);
+    });
+    it('covers page depth', function () {
+      pagePathLevel = 2;
+      Helpers.sessionNavLinks(pagePathLevel, ctx, options);
+      assert.strictEqual(options.navLinks.length, 2);
+    });
+    it('elides account link on account page', function () {
+      options.pageIdentifier = 'account';
+      Helpers.sessionNavLinks(pagePathLevel, ctx, options);
+      assert.strictEqual(options.navLinks.length, 1);
+    });
+  }); // sessionNavLinks
+}); // Template Helpers