/** * DataFormsJS Unit Testing * * This is the main file for testing the Framework. * * Unit Testing runs in the Browser using QUnit. * See instructions in [../server.js]. * * NOTE - Vue was added several years after this file was created * and because the behavior of Vue is different from Templating (Handlebars, etc) * many tests and checks have to be skipped for Vue. Because many tests * are skipped it's important that demos be manually tested when * updates are made and when new versions of Vue are released. */ /* Validates with both [jshint] and [eslint] */ /* global QUnit, app, DataFormsJS, tester, nunjucks, Vue */ /* jshint strict: true */ /* eslint-env browser */ /* eslint quotes: ["error", "single", { "avoidEscape": true }] */ /* eslint strict: ["error", "function"] */ /* eslint spaced-comment: ["error", "always"] */ /* eslint no-console: ["error", { allow: ["log", "warn", "error"] }] */ /* eslint no-prototype-builtins: "off" */ (function () { 'use strict'; var isIE = (navigator.userAgent.indexOf('Trident/') !== -1); var isFirefox = (navigator.userAgent.indexOf('Firefox/') !== -1); document.addEventListener('DOMContentLoaded', function () { // Default expected DataFormJS Settings based on the current page // Controllers and Plugins are variable which allows for different // builds to be tested. The required pages/plugins are checked at setup. tester.controllersCount = 19; tester.modelsCount = 5; tester.pagesCount = Object.keys(app.pages).length; // min=2 tester.pluginsCount = Object.keys(app.plugins).length; // min=1 tester.compiledTemplates = 1; tester.submittedRequestCount = 0; // Run tests in the order that they are defined QUnit.config.reorder = false; QUnit.test('DataFormsJS Version, Settings, Automatic Setup, and Initial View Rendering Test', function (assert) { assert.ok(app === DataFormsJS, 'Global Variables [app] and [DataFormsJS] are Defined'); assert.equal(app.settings.viewSelector, '#view', 'Default Settings for app.settings.viewSelector: ' + app.settings.viewSelector); assert.equal(app.settings.defaultRoute, '/', 'Default Settings for app.settings.defaultRoute: ' + app.settings.defaultRoute); assert.equal(app.settings.logFetchRequests, false, 'Default Settings for app.settings.logFetchRequests: ' + app.settings.logFetchRequests); assert.deepEqual(app.settings.requestHeaders, {}, 'Default Settings for app.settings.requestHeaders: ' + JSON.stringify(app.settings.requestHeaders)); assert.deepEqual(app.settings.requestHeadersByHostName, {}, 'Default Settings for app.settings.requestHeadersByHostName: ' + JSON.stringify(app.settings.requestHeadersByHostName)); assert.equal(app.settings.errors.pageLoading, 'Error loading the current page because the previous page is still loading and is taking a long time. Please refresh the page and try again.', 'Default settings for app.settings.errors.pageLoading: ' + app.settings.errors.pageLoading); assert.equal(Object.keys(app.settings).length, 12, 'Number of properties in app.settings'); var version = app.version.match(/^5.\d+.\d+$/); assert.ok(version !== null, 'app.version is major version 5, full version: ' + version); switch (app.viewEngine()) { case 'Handlebars': case 'Nunjucks': case 'Underscore': case 'Vue': assert.ok(true, 'app.viewEngine() - ' + app.viewEngine()); break; default: assert.ok(false, 'app.viewEngine() - ' + app.viewEngine()); } switch (app.viewEngine()) { case 'Handlebars': tester.controllersCount++; break; case 'Nunjucks': tester.controllersCount += 2; break; default: break; } tester.setup(); tester.checkCounts(assert); // Required Pages/Plugins // Tests will fail if required files are not included in the build assert.ok(app.pages.jsonData !== undefined, 'Checking for required page: app.pages.jsonData'); assert.ok(app.pages.unitTestEventOrder !== undefined, 'Checking for required page: app.pages.unitTestEventOrder'); assert.ok(app.plugins.unitTestEventOrder !== undefined, 'Checking for required plugin: app.plugins.unitTestEventOrder'); var text = document.getElementById('view').textContent.trim(); var expectedText = 'Initial view has loaded'; assert.equal(text, expectedText, 'Checking for Initial Template: ' + text); assert.equal(app.activeController.settings.content, expectedText, 'app.activeController.settings.content: ' + app.activeController.settings.content); var template0 = document.querySelector('#template0[data-route="/"]'); var isValid = (template0 !== null && template0.tagName === 'SCRIPT'); assert.ok(isValid, 'Checking assigned Template ID'); assert.equal(template0.getAttribute('data-content'), expectedText, 'Template [data-content]: ' + template0.getAttribute('data-content')); // Verify that [app.viewEngine()] is being determined by