bump package version to 1.6.1
[squeep-html-template-helper] / test / lib / template-helper.js
index fa3f86a33a7517bbdee59626cc6de2f92218ac55..c62a3c01161be58bbc283c057bf75240312f941f 100644 (file)
@@ -3,14 +3,12 @@
 
 const assert = require('assert');
 const th = require('../../lib/template-helper');
-const lint = require('html-minifier-lint').lint; // eslint-disable-line node/no-unpublished-require
 const stubLogger = require('../stub-logger');
 
-function lintHtml(html) {
-  const result = lint(html);
-  stubLogger.debug('validHtml', '', { result, html });
-  assert(!result);
-}
+const { makeHtmlLint } = require('../lint-html');
+const { HtmlValidate } = require('html-validate');
+const htmlValidate = new HtmlValidate();
+const htmlLint = makeHtmlLint(stubLogger, htmlValidate);
 
 describe('Template Helper', function () {
   let ctx, options, pagePathLevel;
@@ -21,6 +19,16 @@ describe('Template Helper', function () {
     options = {};
   });
 
+  describe('initContext', function () {
+    it('covers', function () {
+      th.initContext(ctx);
+      assert(ctx.errors);
+      assert(ctx.notifications);
+      assert(Array.isArray(ctx.errors));
+      assert(Array.isArray(ctx.notifications));
+    });
+  }); // initContext
+
   describe('dateOrNot', function () {
     let date, otherwise;
     beforeEach(function () {
@@ -162,6 +170,17 @@ describe('Template Helper', function () {
     });
   }); // renderNavLink
 
+  describe('elementAttributes', function () {
+    it('covers', function () {
+      const attributes = {
+        class: 'foo bar',
+        disabled: '',
+      };
+      const result = th.elementAttributes(attributes);
+      assert.strictEqual(result, ' class="foo bar" disabled');
+    });
+  }); // elementAttributes
+
   describe('OL', function () {
     it('covers', function () {
       const result = th.OL(['item', 'another item'], 1, { class: 'class' }, (item) => ({ class: `${item}-class` }));
@@ -254,45 +273,54 @@ describe('Template Helper', function () {
   describe('htmlPage', function () {
     let main;
     beforeEach(function () {
-      main = [];
+      th.initContext(ctx);
+      ctx.errors.push('an error');
+      ctx.notifications.push('a notice');
+      options.headElements = ['<link rel="author" href="https://example.com/">'];
+      options.pageTitle = 'Test Page';
+      main = [
+        th.UL(['an item', 'another item']),
+        th.timeElement(new Date(), { title: 'now' }),
+      ];
     });
-    it('covers', function () {
+    it('covers', async function () {
+      this.slow(1000); // First invocation of htmlLint takes some time.
       const result = th.htmlPage(pagePathLevel, ctx, options, main);
-      lintHtml(result);
+      await htmlLint(result);
       assert(result);
     });
-    it('covers defaults', function () {
+    it('covers defaults', async function () {
       const result = th.htmlPage(pagePathLevel, ctx, options, main);
-      lintHtml(result);
+      await htmlLint(result);
       assert(result);
     });
-    it('covers user', function () {
+    it('covers user', async function () {
       ctx.session = {
         authenticatedProfile: 'https://user.example.com/',
       };
       const result = th.htmlPage(pagePathLevel, ctx, options, main);
-      lintHtml(result);
+      await htmlLint(result);
       assert(result);
     });
-    it('covers user at root path', function () {
+    it('covers user at root path', async function () {
       ctx.session = {
         authenticatedIdentifier: 'user',
       };
       pagePathLevel = 0;
       const result = th.htmlPage(pagePathLevel, ctx, options, main);
-      lintHtml(result);
+      await htmlLint(result);
       assert(result);
     });
-    it('covers logout redirect', function () {
+    it('covers logout redirect', async function () {
       ctx.session = {
         authenticatedIdentifier: 'user',
       };
       ctx.url = 'https://app.example.com/this_page';
       const result = th.htmlPage(pagePathLevel, ctx, options, main);
-      lintHtml(result);
+      await htmlLint(result);
       assert(result);
     });
-    it('covers existing navLinks', function () {
+    it('covers existing navLinks', async function () {
       ctx.session = {
         authenticatedIdentifier: 'user',
       };
@@ -301,7 +329,7 @@ describe('Template Helper', function () {
         href: 'link',
       }];
       const result = th.htmlPage(pagePathLevel, ctx, options);
-      lintHtml(result);
+      await htmlLint(result);
       assert(result);
     });
   }); // htmlPage