UNPKG

gpii-universal

Version:

Cross platform, core components of the GPII personalization infrastructure.

349 lines (333 loc) 13.1 kB
/* eslint-env node */ "use strict"; var fluid = require("infusion"); var gpii = fluid.registerNamespace("gpii"); var jqUnit = require("node-jqunit"); // Add the ability to require JSON5 files. require("json5/lib/register"); // Require universal so that we can resolve paths to it and any sub-modules. fluid.require("%gpii-universal"); // We reuse the fairly lightweight caseholder from gpii-json-schema to avoid having to perform our own mixing of // sequenceGrades into each test sequence. fluid.require("%gpii-json-schema/tests/js/node/lib/fixtures.js"); fluid.loadTestingSupport(); fluid.registerNamespace("gpii.tests.universal.solutionsRegistry.kettle.caseHolder"); gpii.tests.universal.solutionsRegistry.kettle.caseHolder.examineResponse = function (body, shouldBeValid) { if (shouldBeValid) { jqUnit.assertEquals("The response body should be correct.", "Payload accepted.", body.message); } else { jqUnit.assertEquals("The data should be flagged as invalid.", body.isValid, false); jqUnit.assertTrue("There should be at least one validation error", body.errors && body.errors.length > 0); } }; fluid.defaults("gpii.tests.universal.solutionsRegistry.kettle.caseHolder", { gradeNames: ["gpii.test.schema.caseHolder"], validPayloadPath: "%gpii-universal/testData/preferences/jaws.json5", inputs: { validSettings: "@expand:fluid.require({that}.options.validPayloadPath)", shallowlyInvalidSettings: {}, deeplyInvalidSettings: { "flat": { "name": "JAWS", "contexts": { "gpii-default": { "name": "Default preferences", "preferences": { "http://registry.gpii.net/applications/com.freedomscientific.jaws": { "Braille.AttributeRotationDelay": "nonsense" } } } } } }, validPrefs: { "contexts": { "gpii-default": { "name": "Default preferences", "preferences": { "http://registry.gpii.net/applications/com.freedomscientific.jaws": { "Braille.AttributeRotationDelay": 450 } } } } }, shallowlyInvalidPrefs: {}, deeplyInvalidPrefs: { "contexts": { "gpii-default": { "name": "Default preferences", "preferences": { "http://registry.gpii.net/applications/com.freedomscientific.jaws": { "Braille.AttributeRotationDelay": "nonsense" } } } } }, // Test "intra-application" transforms, see https://issues.gpii.net/browse/GPII-4323 intraApplicationPrefs: { "contexts": { "gpii-default": { "name": "Default preferences", "preferences": { "http://registry.gpii.net/applications/com.microsoft.windows.desktopBackground": { "Image": "%SystemRoot%\\Web\\Wallpaper\\Windows\\img0.jpg" } } } } } }, rawModules: [{ name: "Filtered settings middleware tests.", tests: [ { name: "Testing a valid settings payload.", type: "test", sequence: [ { func: "{validSettingsRequest}.send", args: ["{that}.options.inputs.validSettings"] }, { listener: "gpii.tests.universal.solutionsRegistry.kettle.caseHolder.examineResponse", event: "{validSettingsRequest}.events.onComplete", args: ["@expand:JSON.parse({arguments}.0)", true] } ] }, { name: "Testing a shallowly invalid settings payload.", type: "test", sequence: [ { func: "{shallowlyInvalidSettingsRequest}.send", args: ["{that}.options.inputs.shallowlyInvalidSettings "] }, { listener: "gpii.tests.universal.solutionsRegistry.kettle.caseHolder.examineResponse", event: "{shallowlyInvalidSettingsRequest}.events.onComplete", args: ["@expand:JSON.parse({arguments}.0)", false] } ] }, { name: "Testing a deeply invalid settings payload.", type: "test", sequence: [ { func: "{deeplyInvalidSettingsRequest}.send", args: ["{that}.options.inputs.deeplyInvalidSettings "] }, { listener: "gpii.tests.universal.solutionsRegistry.kettle.caseHolder.examineResponse", event: "{deeplyInvalidSettingsRequest}.events.onComplete", args: ["@expand:JSON.parse({arguments}.0)", false] } ] }, { name: "Testing a valid preferences payload.", type: "test", sequence: [ { func: "{validPrefsRequest}.send", args: ["{that}.options.inputs.validPrefs"] }, { listener: "gpii.tests.universal.solutionsRegistry.kettle.caseHolder.examineResponse", event: "{validPrefsRequest}.events.onComplete", args: ["@expand:JSON.parse({arguments}.0)", true] } ] }, { name: "Testing a shallowly invalid preferences payload.", type: "test", sequence: [ { func: "{shallowlyInvalidPrefsRequest}.send", args: ["{that}.options.inputs.shallowlyInvalidPrefs"] }, { listener: "gpii.tests.universal.solutionsRegistry.kettle.caseHolder.examineResponse", event: "{shallowlyInvalidPrefsRequest}.events.onComplete", args: ["@expand:JSON.parse({arguments}.0)", false] } ] }, { name: "Testing a deeply invalid preferences payload.", type: "test", sequence: [ { func: "{deeplyInvalidPrefsRequest}.send", args: ["{that}.options.inputs.deeplyInvalidPrefs"] }, { listener: "gpii.tests.universal.solutionsRegistry.kettle.caseHolder.examineResponse", event: "{deeplyInvalidPrefsRequest}.events.onComplete", args: ["@expand:JSON.parse({arguments}.0)", false] } ] }, { name: "Testing support for transforming preferences.", type: "test", sequence: [ { func: "{intraApplicationPrefsRequest}.send", args: ["{that}.options.inputs.intraApplicationPrefs"] }, { listener: "gpii.tests.universal.solutionsRegistry.kettle.caseHolder.examineResponse", event: "{intraApplicationPrefsRequest}.events.onComplete", args: ["@expand:JSON.parse({arguments}.0)", true] } ] } ] }], components: { validPrefsRequest: { type: "gpii.tests.universal.solutionsRegistry.request", options: { method: "POST", path: "/gatedPreferences" } }, shallowlyInvalidPrefsRequest: { type: "gpii.tests.universal.solutionsRegistry.request", options: { method: "POST", path: "/gatedPreferences" } }, deeplyInvalidPrefsRequest: { type: "gpii.tests.universal.solutionsRegistry.request", options: { method: "POST", path: "/gatedPreferences" } }, validSettingsRequest: { type: "gpii.tests.universal.solutionsRegistry.request", options: { method: "POST", path: "/gatedSettings" } }, deeplyInvalidSettingsRequest: { type: "gpii.tests.universal.solutionsRegistry.request", options: { method: "POST", path: "/gatedSettings" } }, shallowlyInvalidSettingsRequest: { type: "gpii.tests.universal.solutionsRegistry.request", options: { method: "POST", path: "/gatedSettings" } }, intraApplicationPrefsRequest: { type: "gpii.tests.universal.solutionsRegistry.request", options: { method: "POST", path: "/gatedPreferences" } } } }); // A wrapper for `kettle.request.http` designed for use with the `testEnvironment` below. fluid.defaults("gpii.tests.universal.solutionsRegistry.request", { gradeNames: ["kettle.test.request.http"], port: "{testEnvironment}.options.port", path: { expander: { funcName: "fluid.stringTemplate", args: ["http://localhost:%port/%endpoint", { port: "{testEnvironment}.options.port", endpoint: "{that}.options.endpoint"}] } } }); // A mix-in grade to ensure a "success" response is sent if the payload is valid. fluid.defaults("gpii.tests.universal.solutionsRegistry.handlers.base", { gradeNames: ["fluid.component"], invokers: { handleRequest: { func: "{that}.events.onSuccess.fire", args: [{ message: "Payload accepted." }] } } }); // handler with settings validation. fluid.defaults("gpii.tests.universal.solutionsRegistry.handlers.settings", { gradeNames: ["gpii.universal.solutionsRegistry.requestHandlers.settings", "gpii.tests.universal.solutionsRegistry.handlers.base"] }); // handler with settings validation. fluid.defaults("gpii.tests.universal.solutionsRegistry.handlers.preferences", { gradeNames: ["gpii.universal.solutionsRegistry.requestHandlers.preferences", "gpii.tests.universal.solutionsRegistry.handlers.base"] }); fluid.defaults("gpii.tests.universal.solutionsRegistry.kettle.app", { gradeNames: ["kettle.app"], components: { preferencesValidator: { type: "gpii.universal.solutionsRegistry.validators.preferences" }, settingsValidator: { type: "gpii.universal.solutionsRegistry.validators.settings" } }, requestHandlers: { gatedPreferences: { type: "gpii.tests.universal.solutionsRegistry.handlers.preferences", route: "/gatedPreferences", method: "post" }, gatedSettings: { type: "gpii.tests.universal.solutionsRegistry.handlers.settings", route: "/gatedSettings", method: "post" } } }); fluid.defaults("gpii.tests.universal.solutionsRegistry.testEnvironment", { gradeNames: ["fluid.test.testEnvironment"], port: 7734, events: { constructFixtures: null, onKettleReady: null, onFixturesConstructed: { events: { onKettleReady: "onKettleReady" } } }, components: { kettle: { createOnEvent: "constructFixtures", type: "kettle.server", options: { port: "{testEnvironment}.options.port", listeners: { "onListen.notifyEnvironment": { func: "{testEnvironment}.events.onKettleReady.fire" } }, components: { app: { type: "gpii.tests.universal.solutionsRegistry.kettle.app" } } } }, caseHolder: { type: "gpii.tests.universal.solutionsRegistry.kettle.caseHolder" } } }); fluid.test.runTests("gpii.tests.universal.solutionsRegistry.testEnvironment");