initial commit
[squeep-indie-auther] / test / src / template / admin-html.js
diff --git a/test/src/template/admin-html.js b/test/src/template/admin-html.js
new file mode 100644 (file)
index 0000000..4c9e7a7
--- /dev/null
@@ -0,0 +1,112 @@
+/* eslint-env mocha */
+'use strict';
+
+const assert = require('assert');
+const template = require('../../../src/template/admin-html');
+const Config = require('../../../config');
+const StubLogger = require('../../stub-logger');
+const lint = require('html-minifier-lint').lint; // eslint-disable-line node/no-unpublished-require
+
+const stubLogger = new StubLogger();
+
+function lintHtml(html) {
+  const result = lint(html);
+  stubLogger.debug('validHtml', '', { result, html });
+  assert(!result);
+}
+
+describe('Admin HTML Template', function () {
+  let ctx, config;
+  beforeEach(function () {
+    ctx = {
+      profilesScopes: {
+        scopeIndex: {
+          'scope': {
+            application: '',
+            description: '',
+            isPermanent: true,
+            isManuallyAdded: false,
+            profiles: ['https://example.com/'],
+          },
+          'other_scope': {
+            application: 'app1',
+            description: '',
+            isPermanent: false,
+            isManuallyAdded: true,
+            profiles: [],
+          },
+          'more_scope': {
+            application: 'app2',
+            description: '',
+            isPermanent: false,
+            isManuallyAdded: false,
+            profiles: [],
+          },
+          'scopitty_scope': {
+            application: 'app2',
+            description: '',
+            isPermanent: false,
+            isManuallyAdded: false,
+            profiles: [],
+          },
+          'last_scope': {
+            application: 'app1',
+            description: '',
+            isPermanent: false,
+            isManuallyAdded: false,
+            profiles: [],
+          },
+        },
+        profiles: ['https://example.com/'],
+      },
+      tokens: [
+        {
+          codeId: 'xxx',
+          clientId: 'https://client.example.com/',
+          profile: 'https://profile.example.com/',
+          created: new Date(),
+          expires: null,
+          isRevoked: false,
+        },
+        {
+          codeId: 'yyy',
+          clientId: 'https://client.example.com/',
+          profile: 'https://profile.example.com/',
+          isToken: true,
+          created: new Date(Date.now() - 86400000),
+          refreshed: new Date(),
+          expires: new Date(Date.now() + 86400000),
+          isRevoked: true,
+        },
+        {
+          codeId: 'zzz',
+          clientId: 'https://client.exmaple.com/',
+          profile: 'https://profile.example.com/',
+          resource: 'https://resource.example.com/',
+          created: new Date(),
+          scopes: ['read'],
+        },
+      ],
+    };
+    config = new Config('test');
+  });
+  it('renders', function () {
+    const result = template(ctx, config);
+    lintHtml(result);
+    assert(result);
+  });
+  it('renders no tokens', function () {
+    ctx.tokens = [];
+    const result = template(ctx, config);
+    lintHtml(result);
+    assert(result);
+  });
+  it('covers options', function () {
+    delete ctx.profilesScopes.profiles;
+    delete ctx.profilesScopes.scopeIndex.scope.profiles;
+    delete ctx.tokens;
+    const result = template(ctx, config);
+    lintHtml(result);
+    assert(result);
+  });
+}); // Admin HTML Template