UNPKG

gpii-universal

Version:

Cross platform, core components of the GPII personalization infrastructure.

390 lines (374 loc) 15.3 kB
/* * User Logon State Change Test Definitions * * Copyright 2013-2019 OCAD University * * Licensed under the New BSD license. You may not use this file except in * compliance with this License. * * The research leading to these results has received funding from the European Union's * Seventh Framework Programme (FP7/2007-2013) * under grant agreement no. 289016. * * You may obtain a copy of the License at * https://github.com/GPII/universal/blob/master/LICENSE.txt */ "use strict"; var fluid = require("infusion"), jqUnit = fluid.require("node-jqunit", require, "jqUnit"), gpii = fluid.registerNamespace("gpii"); fluid.require("%gpii-universal"); gpii.loadTestingSupport(); fluid.registerNamespace("gpii.tests.userLogonHandlers"); fluid.defaults("gpii.tests.userLogonHandlers.proximityTriggered", { gradeNames: "kettle.test.request.http", path: "/user/%gpiiKey/proximityTriggered", termMap: { gpiiKey: "{tests}.options.gpiiKey" } }); fluid.defaults("gpii.tests.userLogonHandlers.testCaseHolder", { gradeNames: [ "gpii.test.common.lifecycleManagerReceiver", "gpii.test.testCaseHolder" ], components: { resetRequest: { type: "kettle.test.request.http", options: { path: "/user/reset/proximityTriggered" } }, resetRequest2: { type: "kettle.test.request.http", options: { path: "/user/reset/proximityTriggered" } }, proximityTriggeredRequest: { type: "gpii.tests.userLogonHandlers.proximityTriggered" }, proximityTriggeredRequest2: { type: "gpii.tests.userLogonHandlers.proximityTriggered" }, proximityTriggeredRequest3: { type: "gpii.tests.userLogonHandlers.proximityTriggered" }, proximityTriggeredRequestOther: { type: "kettle.test.request.http", options: { path: "/user/sammy/proximityTriggered" } }, logoutSammyRequest: { type: "kettle.test.request.http", options: { path: "/user/sammy/logout" } }, loginAdjustCursorRequest: { type: "kettle.test.request.http", options: { path: "/user/adjustCursor/login" } }, logoutAdjustCursorRequest: { type: "kettle.test.request.http", options: { path: "/user/adjustCursor/logout" } }, loginNonexistentRequest: { type: "kettle.test.request.http", options: { path: "/user/nonexistent-gpii-key/login" } }, logoutNonexistentRequest: { type: "kettle.test.request.http", options: { path: "/user/nonexistent-gpii-key/logout" } }, logoutNoUserRequest: { type: "kettle.test.request.http", options: { path: "/user/noUser/logout" } } }, events: { debounceTimeoutComplete: null } }); gpii.tests.userLogonHandlers.gpiiKey = "adjustCursor"; gpii.tests.userLogonHandlers.testLoginResponse = function (data, gpiiKey) { jqUnit.assertEquals("Response is correct", "User with GPII key " + gpiiKey + " was successfully logged in.", data); }; gpii.tests.userLogonHandlers.testLogoutResponse = function (data, gpiiKey) { jqUnit.assertEquals("Response is correct", "User with GPII key " + gpiiKey + " was successfully logged out.", data); }; gpii.tests.userLogonHandlers.testResetResponse = function (data) { jqUnit.assertEquals("Response is correct", "Reset successfully.", data); }; gpii.tests.userLogonHandlers.buildTestDefs = function (testDefs) { return fluid.transform(testDefs, function (testDef) { return fluid.extend(true, { config: { // The custom config file is to config the debounce time at /proximityTriggered endpoint to 3 seconds // rather than using the default 1.5 seconds. This is to work around an issue with testing a following // request that occurs < the debounce time. In this test, the following request was sent after waiting // for 1 second. However in the reality with all other running processes, CPU processing power etc, // this request is usually sent a bit more than after 1 second, occassionally even more than 1.5 seconds, // which causes the test to fail. Setting the debounce time to 3 seconds provides more buffering time // for the following request to send. configName: "gpii.tests.acceptance.userLogon.config", configPath: "%gpii-universal/tests/configs" }, gradeNames: ["gpii.tests.userLogonHandlers.testCaseHolder", "gpii.test.integration.testCaseHolder.linux"], gpiiKey: testDefs.gpiiKey || gpii.tests.userLogonHandlers.gpiiKey }, testDef); }); }; gpii.tests.userLogonHandlers.testDefs = [{ name: "Testing standard proximityTriggered login and logout", expect: 2, sequence: [{ // 1st /proximityTriggered request: standard login func: "{proximityTriggeredRequest}.send" }, { event: "{proximityTriggeredRequest}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testLoginResponse", args: ["{arguments}.0", gpii.tests.userLogonHandlers.gpiiKey] }, { // wait for the debounce period to pass so that the following /proximityTriggered request is not rejected func: "setTimeout", args: [ "{tests}.events.debounceTimeoutComplete.fire", 3500 ] }, { event: "{tests}.events.debounceTimeoutComplete", listener: "fluid.identity" }, { // 2nd /proximityTriggered request: standard logout func: "{proximityTriggeredRequest2}.send" }, { event: "{proximityTriggeredRequest2}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testLogoutResponse", args: ["{arguments}.0", gpii.tests.userLogonHandlers.gpiiKey] }] }, { name: "Testing proximityTriggered login with debounce", expect: 4, sequence: [{ // 1st /proximityTriggered request: standard login func: "{proximityTriggeredRequest}.send" }, { event: "{proximityTriggeredRequest}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testLoginResponse", args: ["{arguments}.0", gpii.tests.userLogonHandlers.gpiiKey] }, { // wait within the debounce period to trigger the debounce logic so that the following /proximityTriggered request will be rejected func: "setTimeout", args: [ "{tests}.events.debounceTimeoutComplete.fire", 100 ] }, { event: "{tests}.events.debounceTimeoutComplete", listener: "fluid.identity" }, { // 2nd /proximityTriggered request: will be rejected func: "{proximityTriggeredRequest2}.send" }, { event: "{proximityTriggeredRequest2}.events.onComplete", listener: "kettle.test.assertErrorResponse", args: { message: "Received 429 error due to debounce rules", errorTexts: "Proximity trigger ignored due to bounce rules", statusCode: 429, string: "{arguments}.0", request: "{proximityTriggeredRequest2}" } }] }, { name: "Testing proximityTriggered logout with debounce", expect: 5, sequence: [{ // 1st /proximityTriggered request: standard login func: "{proximityTriggeredRequest}.send" }, { event: "{proximityTriggeredRequest}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testLoginResponse", args: ["{arguments}.0", gpii.tests.userLogonHandlers.gpiiKey] }, { // wait for the debounce period to pass so that the following /proximityTriggered request is not rejected func: "setTimeout", args: [ "{tests}.events.debounceTimeoutComplete.fire", 3500 ] }, { event: "{tests}.events.debounceTimeoutComplete", listener: "fluid.identity" }, { // 2nd /proximityTriggered request: standard logout func: "{proximityTriggeredRequest2}.send" }, { event: "{proximityTriggeredRequest2}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testLogoutResponse", args: ["{arguments}.0", gpii.tests.userLogonHandlers.gpiiKey] }, { // wait within the debounce period to trigger the debounce logic so that the following /proximityTriggered request with the same GPII key will be rejected func: "setTimeout", args: [ "{tests}.events.debounceTimeoutComplete.fire", 100 ] }, { event: "{tests}.events.debounceTimeoutComplete", listener: "fluid.identity" }, { // 3rd /proximityTriggered request with the same GPII key: will be rejected func: "{proximityTriggeredRequest3}.send" }, { event: "{proximityTriggeredRequest3}.events.onComplete", listener: "kettle.test.assertErrorResponse", args: { message: "Received 429 error due to debounce rules", errorTexts: "Proximity trigger ignored due to bounce rules", statusCode: 429, string: "{arguments}.0", request: "{proximityTriggeredRequest3}" } }] }, { name: "Login with a different user with proximity trigger should log previous user out", expect: 2, sequence: [{ // 1st /proximityTriggered request: standard login func: "{proximityTriggeredRequest}.send" }, { event: "{proximityTriggeredRequest}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testLoginResponse", args: ["{arguments}.0", gpii.tests.userLogonHandlers.gpiiKey] }, { // wait for the debounce period to pass func: "setTimeout", args: [ "{tests}.events.debounceTimeoutComplete.fire", 3500 ] }, { event: "{tests}.events.debounceTimeoutComplete", listener: "fluid.identity" }, { // 2nd /proximityTriggered request to login with a different user func: "{proximityTriggeredRequestOther}.send" }, { event: "{proximityTriggeredRequestOther}.events.onComplete", listener: "jqUnit.assertEquals", args: [ "Response is correct", "User with GPII key sammy was successfully logged in.", "{arguments}.0" ] }] }, { name: "Login with a different user with proximity trigger should ignore debounce", expect: 2, sequence: [{ // 1st /proximityTriggered request: standard login func: "{proximityTriggeredRequest}.send" }, { event: "{proximityTriggeredRequest}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testLoginResponse", args: ["{arguments}.0", gpii.tests.userLogonHandlers.gpiiKey] }, { // wait within the debounce period func: "setTimeout", args: [ "{tests}.events.debounceTimeoutComplete.fire", 100 ] }, { event: "{tests}.events.debounceTimeoutComplete", listener: "fluid.identity" }, { // 2nd /proximityTriggered request to login with a different user func: "{proximityTriggeredRequestOther}.send" }, { event: "{proximityTriggeredRequestOther}.events.onComplete", listener: "jqUnit.assertEquals", args: [ "Response is correct", "User with GPII key sammy was successfully logged in.", "{arguments}.0" ] }] }, { name: "Testing proximityTriggered with 'reset' GPII key", expect: 2, sequence: [{ // log in a user (part 1: login) func: "{proximityTriggeredRequest}.send" }, { event: "{proximityTriggeredRequest}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testLoginResponse", args: ["{arguments}.0", gpii.tests.userLogonHandlers.gpiiKey] }, { // resetting with user logged in (part 2: reset and check that user is logged out) func: "{resetRequest2}.send" }, { event: "{resetRequest2}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testResetResponse", args: ["{arguments}.0"] }] }, { name: "Testing proximityTriggered with 'reset' noUser", expect: 1, sequence: [{ // resetting with no user logged in func: "{resetRequest}.send" }, { event: "{resetRequest}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testResetResponse", args: ["{arguments}.0"] }] }, { name: "Testing standard user/<gpiiKey>/login and /user/<gpiiKey>/logout URLs", expect: 9, sequence: [{ // standard login func: "{loginRequest}.send" }, { event: "{loginRequest}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testLoginResponse", args: ["{arguments}.0", gpii.tests.userLogonHandlers.gpiiKey] }, { // standard login with an already logged in user: func: "{loginAdjustCursorRequest}.send" }, { event: "{loginAdjustCursorRequest}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testLoginResponse", args: ["{arguments}.0", gpii.tests.userLogonHandlers.gpiiKey] }, { // logout of different user func: "{logoutSammyRequest}.send" }, { event: "{logoutSammyRequest}.events.onComplete", listener: "kettle.test.assertErrorResponse", args: { message: "Received 409 error when logging out user who is not logged in", errorTexts: "Got logout request from user sammy, but the user adjustCursor is logged in. So ignoring the request.", statusCode: 409, string: "{arguments}.0", request: "{logoutSammyRequest}" } }, { // logout of the correct user func: "{logoutAdjustCursorRequest}.send" }, { event: "{logoutAdjustCursorRequest}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testLogoutResponse", args: ["{arguments}.0", "adjustCursor"] }, { // logout of user when none is logged in func: "{logoutRequest}.send" }, { event: "{logoutRequest}.events.onComplete", listener: "kettle.test.assertErrorResponse", args: { message: "Received 409 error when logging out user when no user is logged in", errorTexts: "Got logout request from user adjustCursor, but the user noUser is logged in. So ignoring the request.", statusCode: 409, string: "{arguments}.0", request: "{logoutRequest}" } }] }, { name: "noUser logs back in after an explicit request to logout noUser", expect: 1, sequence: [{ // 1st /proximityTriggered request: standard login func: "{logoutNoUserRequest}.send" }, { event: "{logoutNoUserRequest}.events.onComplete", listener: "gpii.tests.userLogonHandlers.testLogoutResponse", args: ["{arguments}.0", "noUser"] }] }];