reconTests.js revision 08b5793948544288f007d40b3391a6f69e2aeb07
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen/**
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen *
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * Copyright (c) 2014 ForgeRock AS. All Rights Reserved
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen *
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * The contents of this file are subject to the terms
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * of the Common Development and Distribution License
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * (the License). You may not use this file except in
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * compliance with the License.
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen *
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * You can obtain a copy of the License at
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * http://forgerock.org/license/CDDLv1.0.html
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * See the License for the specific language governing
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * permission and limitations under the License.
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen *
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * When distributing Covered Code, include this CDDL
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * Header Notice in each file and include the License file
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * at http://forgerock.org/license/CDDLv1.0.html
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * If applicable, add the following below the CDDL Header,
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * with the fields enclosed by brackets [] replaced by
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * your own identifying information:
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen * "Portions Copyrighted [year] [name of copyright owner]"
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen */
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen/*global require, define, QUnit, $ */
e2c88f0c2610f16de7b639746b40dea5f3e2256eGarrett D'Amore
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chendefine([
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen "sinon",
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen "org/forgerock/commons/ui/common/main/EventManager",
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen "org/forgerock/openidm/ui/admin/sync/SituationPolicyView",
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen "org/forgerock/openidm/ui/common/delegates/ConfigDelegate"
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen], function (sinon, eventManager, SituationPolicyView, ConfigDelegate) {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen $("body").append("<div id='policyPattern'></div>");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen return {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen executeAll: function (server) {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen // These three constants come from MappingBaseView and are the arguments passed into the SituationPolicyView render function.
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen // Should those arguments change than these need to be updated.
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen var sync = [{"target":"managed/user","properties":[{"target":"displayName","source":"cn"},{"target":"description","source":"description"},{"target":"givenName","source":"givenName"},{"target":"mail","source":"mail"},{"target":"telephoneNumber","source":"telephoneNumber"},{"target":"sn","source":"sn"},{"target":"userName","source":"uid"}],"source":"system/ldap/account","policies":[{"action":"UPDATE","situation":"CONFIRMED"},{"action":"UPDATE","situation":"FOUND"},{"action":"CREATE","situation":"ABSENT"},{"action":"EXCEPTION","situation":"AMBIGUOUS"},{"action":"CREATE","situation":"MISSING"},{"action":"DELETE","situation":"SOURCE_MISSING"},{"action":"IGNORE","situation":"UNQUALIFIED"},{"action":"IGNORE","situation":"UNASSIGNED"}],"name":"systemLdapAccounts_managedUser"},{"target":"system/ldap/account","links":"systemLdapAccounts_managedUser","properties":[{"target":"givenName","source":"givenName"},{"target":"sn","source":"sn"},{"target":"cn","source":"","transform":{"type":"text/javascript","source":"source.displayName || (source.givenName + ' ' + source.sn);"}},{"target":"uid","source":"userName"},{"target":"description","source":"description","condition":{"type":"text/javascript","source":"!!object.description"}},{"target":"mail","source":"mail"},{"target":"userPassword","transform":{"type":"text/javascript","source":"openidm.decrypt(source);"},"source":"password","condition":{"type":"text/javascript","source":"object.password != null"}},{"target":"telephoneNumber","source":"telephoneNumber","condition":{"type":"text/javascript","source":"!!object.telephoneNumber"}}],"source":"managed/user","onCreate":{"type":"text/javascript","source":"target.dn = 'uid=' + source.userName + ',ou=People,dc=example,dc=com';"},"policies":[{"action":"UPDATE","situation":"CONFIRMED"},{"action":"LINK","situation":"FOUND"},{"action":"CREATE","situation":"ABSENT"},{"action":"IGNORE","situation":"AMBIGUOUS"},{"action":"IGNORE","situation":"MISSING"},{"action":"DELETE","situation":"SOURCE_MISSING"},{"action":"IGNORE","situation":"UNQUALIFIED"},{"action":"IGNORE","situation":"UNASSIGNED"}],"name":"managedUser_systemLdapAccounts"}],
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen mapping = {"target":"managed/user","properties":[{"target":"displayName","source":"cn"},{"target":"description","source":"description"},{"target":"givenName","source":"givenName"},{"target":"mail","source":"mail"},{"target":"telephoneNumber","source":"telephoneNumber"},{"target":"sn","source":"sn"},{"target":"userName","source":"uid"}],"source":"system/ldap/account","policies":[{"action":"UPDATE","situation":"CONFIRMED"},{"action":"UPDATE","situation":"FOUND"},{"action":"CREATE","situation":"ABSENT"},{"action":"EXCEPTION","situation":"AMBIGUOUS"},{"action":"CREATE","situation":"MISSING"},{"action":"DELETE","situation":"SOURCE_MISSING"},{"action":"IGNORE","situation":"UNQUALIFIED"},{"action":"IGNORE","situation":"UNASSIGNED"}],"name":"systemLdapAccounts_managedUser"},
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen mappingName = "systemLdapAccounts_managedUser";
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen module("Admin Mapping tab, Recon sub-tab tests");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.asyncTest("Situational Policy Renders", function () {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.equal(SituationPolicyView.$el.children().length, 0, "There are no children in the container before render.");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen SituationPolicyView.render({sync: sync, mapping: mapping, mappingName: mappingName}, function() {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.ok(SituationPolicyView.$el.children().length > 0, "After rendering there are now child elements");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen // -1 because of the source row used to create the others is still on the page but hidden
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.equal(SituationPolicyView.$el.find("#situationalPolicies table tbody tr.event-hook").length,
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen _.size(SituationPolicyView.model.allPatterns["Default Actions"].policies),
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen "All default situations are present");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.equal(_.size(SituationPolicyView.model.allPatterns),
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen SituationPolicyView.$el.find("#policyPatterns option").length,
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen "Patterns rendered are the same as the stored patterns");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen var messages = true;
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen _.each(SituationPolicyView.model.allPatterns["Default Actions"].policies, function(situation, index) {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen if ($.t(situation.note) !== SituationPolicyView.$el.find("#situationalPolicies table tbody tr.event-hook:eq("+index+") td:eq(1) [data-title]").attr("data-title")) {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen messages = false;
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen }
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen });
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.ok(messages, "The help tooltips have been set");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.equal(SituationPolicyView.$el.find("#situationalPolicies table tbody .failure-display").length, 7, "There are 7 situations with error classes");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.equal(SituationPolicyView.$el.find("#situationalPolicies table tbody .warning-display").length, 3, "There are 3 situations with warning classes");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.equal(SituationPolicyView.$el.find("#situationalPolicies table tbody .success-display").length, 3, "There are 3 situations with success classes");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen var readOnly = true, defaultActions = true;
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen SituationPolicyView.$el.find("#policyPatterns").val("Read-only").change();
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen _.each(SituationPolicyView.$el.find(".situationRow"), function(row, index) {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen if ($(row).find(".action").val() !== "ASYNC" && index < SituationPolicyView.model.allPatterns["Read-only"].policies.length) {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen readOnly = false
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen }
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen });
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.ok(readOnly, "When the pattern changes to Read-Only all actions are set to Async");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen SituationPolicyView.$el.find("#policyPatterns").val("Default Actions").change();
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen _.each(SituationPolicyView.$el.find(".situationRow"), function(row, index) {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen if ($(row).find(".action :selected").text().indexOf("★") < 0 && index < SituationPolicyView.model.allPatterns["Read-only"].policies.length) {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen defaultActions = false
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen }
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen });
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.ok(defaultActions, "When the pattern changes to Default-Actions all actions are set to the starred value");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen/*
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen SituationPolicyView.$el.find(".ABSENT .action").val("LINK");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen var callback = sinon.spy(eventManager, "sendEvent"),
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen mappingUpdated = false,
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen deferredRead = $.Deferred(),
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen deferredWrite = $.Deferred(),
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen stubbedRead = sinon.stub(ConfigDelegate, "readEntity", function () {
e2c88f0c2610f16de7b639746b40dea5f3e2256eGarrett D'Amore return deferredRead.promise();
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen }),
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen stubbedWrite = sinon.stub(ConfigDelegate, "updateEntity", function (name, data) {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen _.each(data.mappings, function(mapping) {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen if(mapping.name === mappingName) {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen _.each(mapping.policies, function(policy) {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen if (policy.action === "LINK" && policy.situation === "ABSENT") {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen mappingUpdated = true;
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen }
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen });
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen }
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen });
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.ok(mappingUpdated, "The policy mapping was updated properly.");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen return deferredWrite.promise();
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen });
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen deferredRead.done(function() {
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen deferredWrite.resolve();
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen });
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen SituationPolicyView.$el.find(".savePolicy").click();
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen deferredRead.resolve({mappings: sync});
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.ok(callback.called, "The policy successfully saves");
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen stubbedRead.restore();
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen stubbedWrite.restore();
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen */
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen $("#policyPattern").remove();
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen QUnit.start();
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen });
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen });
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen }
0035018c6da861f1b758fb9bf6b50245c52b48e2Raymond Chen };
});