/* * Copyright (c) 2010-2015 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.evolveum.midpoint.model.common.mapping; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNull; import java.io.IOException; import java.math.BigDecimal; import java.math.BigInteger; import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import org.xml.sax.SAXException; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismProperty; import com.evolveum.midpoint.prism.PrismPropertyDefinition; import com.evolveum.midpoint.prism.PrismPropertyValue; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.delta.PrismValueDeltaSetTriple; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.prism.util.PrismAsserts; import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.SchemaTestConstants; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType; import com.evolveum.midpoint.xml.ns._public.common.common_3.CredentialsType; import com.evolveum.midpoint.xml.ns._public.common.common_3.PasswordType; import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType; /** * @author Radovan Semancik */ public class TestMappingDynamicSysVar { private static final String NS_EXTENSION = "http://midpoint.evolveum.com/xml/ns/test/extension"; private static final String PATTERN_NUMERIC = "^\\d+$"; private MappingTestEvaluator evaluator; @BeforeClass public void setupFactory() throws SAXException, IOException, SchemaException { evaluator = new MappingTestEvaluator(); evaluator.init(); } @Test public void testScriptSystemVariablesConditionAddObjectTrueGroovy() throws Exception { testScriptSystemVariablesConditionAddObjectTrue("mapping-script-system-variables-condition-groovy.xml"); } @Test public void testScriptSystemVariablesConditionAddObjectTrueSourcecontextGroovy() throws Exception { testScriptSystemVariablesConditionAddObjectTrue("mapping-script-system-variables-condition-sourcecontext-groovy.xml"); } @Test public void testScriptSystemVariablesConditionAddObjectTrueXPath() throws Exception { testScriptSystemVariablesConditionAddObjectTrue("mapping-script-system-variables-condition-xpath.xml"); } public void testScriptSystemVariablesConditionAddObjectTrue(String filename) throws Exception { // GIVEN final String TEST_NAME = "testScriptSystemVariablesConditionAddObjectTrue"; System.out.println("===[ "+TEST_NAME+"]==="); PrismObject<UserType> user = evaluator.getUserOld(); user.asObjectable().getEmployeeType().clear(); user.asObjectable().getEmployeeType().add("CAPTAIN"); ObjectDelta<UserType> delta = ObjectDelta.createAddDelta(user); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( filename, TEST_NAME, "title", delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("Captain jack")); PrismAsserts.assertTripleNoMinus(outputTriple); } /** * Change property that is not a source in this mapping */ @Test public void testScriptSystemVariablesConditionModifyObjectTrueGroovyUnrelated() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionAddObjectTrueGroovyUnrelated"; System.out.println("===[ "+TEST_NAME+"]==="); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, evaluator.toPath("employeeNumber"), evaluator.getPrismContext(), "666"); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( "mapping-script-system-variables-condition-groovy.xml", TEST_NAME, "title", delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); assertNull("Unexpected value in outputTriple: "+outputTriple, outputTriple); } @Test public void testScriptSystemVariablesConditionAddObjectFalseGroovy() throws Exception { testScriptSystemVariablesConditionAddObjectFalse("mapping-script-system-variables-condition-groovy.xml"); } @Test public void testScriptSystemVariablesConditionAddObjectFalseSourcecontextGroovy() throws Exception { testScriptSystemVariablesConditionAddObjectFalse("mapping-script-system-variables-condition-sourcecontext-groovy.xml"); } @Test public void testScriptSystemVariablesConditionAddObjectFalseXPath() throws Exception { testScriptSystemVariablesConditionAddObjectFalse("mapping-script-system-variables-condition-xpath.xml"); } public void testScriptSystemVariablesConditionAddObjectFalse(String filename) throws Exception { // GIVEN final String TEST_NAME = "testScriptSystemVariablesConditionAddObjectFalse"; System.out.println("===[ "+TEST_NAME+"]==="); PrismObject<UserType> user = evaluator.getUserOld(); user.asObjectable().getEmployeeType().clear(); user.asObjectable().getEmployeeType().add("SAILOR"); ObjectDelta<UserType> delta = ObjectDelta.createAddDelta(user); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( filename, TEST_NAME, "title", delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); assertNull("Unexpected output triple: "+outputTriple, outputTriple); } @Test public void testScriptSystemVariablesConditionAddObjectFalseNoValGroovy() throws Exception { testScriptSystemVariablesConditionAddObjectFalseNoVal("mapping-script-system-variables-condition-groovy.xml"); } @Test public void testScriptSystemVariablesConditionAddObjectFalseNoValSourcecontextGroovy() throws Exception { testScriptSystemVariablesConditionAddObjectFalseNoVal("mapping-script-system-variables-condition-sourcecontext-groovy.xml"); } @Test public void testScriptSystemVariablesConditionAddObjectFalseNoValXPath() throws Exception { testScriptSystemVariablesConditionAddObjectFalseNoVal("mapping-script-system-variables-condition-xpath.xml"); } public void testScriptSystemVariablesConditionAddObjectFalseNoVal(String filename) throws Exception { // GIVEN final String TEST_NAME = "testScriptSystemVariablesConditionAddObjectFalseNoVal"; System.out.println("===[ "+TEST_NAME+"]==="); PrismObject<UserType> user = evaluator.getUserOld(); PrismProperty<String> employeeTypeProperty = user.findProperty(UserType.F_EMPLOYEE_TYPE); employeeTypeProperty.clear(); ObjectDelta<UserType> delta = ObjectDelta.createAddDelta(user); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( filename, TEST_NAME, "title", delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); assertNull("Unexpected output triple: "+outputTriple, outputTriple); } @Test public void testScriptSystemVariablesConditionAddObjectFalseNoPropertyGroovy() throws Exception { testScriptSystemVariablesConditionAddObjectFalseNoProperty("mapping-script-system-variables-condition-groovy.xml"); } @Test public void testScriptSystemVariablesConditionAddObjectFalseNoPropertySourcecontextGroovy() throws Exception { testScriptSystemVariablesConditionAddObjectFalseNoProperty("mapping-script-system-variables-condition-sourcecontext-groovy.xml"); } @Test public void testScriptSystemVariablesConditionAddObjectFalseNoPropertyXPath() throws Exception { testScriptSystemVariablesConditionAddObjectFalseNoProperty("mapping-script-system-variables-condition-xpath.xml"); } public void testScriptSystemVariablesConditionAddObjectFalseNoProperty(String filename) throws Exception { // GIVEN final String TEST_NAME = "testScriptSystemVariablesConditionAddObjectFalseNoProperty"; System.out.println("===[ "+TEST_NAME+"]==="); PrismObject<UserType> user = evaluator.getUserOld(); user.removeProperty(UserType.F_EMPLOYEE_TYPE); ObjectDelta<UserType> delta = ObjectDelta.createAddDelta(user); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( filename, TEST_NAME, "title", delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); assertNull("Unexpected output triple: "+outputTriple, outputTriple); } @Test public void testScriptSystemVariablesConditionTrueToTrueGroovy() throws Exception { testScriptSystemVariablesConditionTrueToTrue("mapping-script-system-variables-condition-groovy.xml"); } @Test public void testScriptSystemVariablesConditionTrueToTrueXPath() throws Exception { testScriptSystemVariablesConditionTrueToTrue("mapping-script-system-variables-condition-xpath.xml"); } public void testScriptSystemVariablesConditionTrueToTrue(String filename) throws Exception { // GIVEN final String TEST_NAME = "testScriptSystemVariablesConditionTrueToTrue"; System.out.println("===[ "+TEST_NAME+"]==="); ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, evaluator.toPath("name"), evaluator.getPrismContext(), PrismTestUtil.createPolyString("Jack")); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( filename, TEST_NAME, "title", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); user.asObjectable().getEmployeeType().add("CAPTAIN"); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("Captain Jack")); PrismAsserts.assertTripleMinus(outputTriple, PrismTestUtil.createPolyString("Captain jack")); } @Test public void testScriptSystemVariablesConditionFalseToFalseGroovy() throws Exception { testScriptSystemVariablesConditionFalseToFalse("mapping-script-system-variables-condition-groovy.xml"); } @Test public void testScriptSystemVariablesConditionFalseToFalseXPath() throws Exception { testScriptSystemVariablesConditionFalseToFalse("mapping-script-system-variables-condition-xpath.xml"); } public void testScriptSystemVariablesConditionFalseToFalse(String filename) throws Exception { // GIVEN final String TEST_NAME = "testScriptSystemVariablesConditionFalseToFalse"; System.out.println("===[ "+TEST_NAME+"]==="); ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, evaluator.toPath("name"), evaluator.getPrismContext(), PrismTestUtil.createPolyString("Jack")); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( filename, TEST_NAME, "title", delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); assertNull("Unexpected value in outputTriple: "+outputTriple, outputTriple); } @Test public void testScriptSystemVariablesConditionFalseToTrueGroovy() throws Exception { testScriptSystemVariablesConditionFalseToTrue("mapping-script-system-variables-condition-groovy.xml"); } @Test public void testScriptSystemVariablesConditionFalseToTrueXPath() throws Exception { testScriptSystemVariablesConditionFalseToTrue("mapping-script-system-variables-condition-xpath.xml"); } public void testScriptSystemVariablesConditionFalseToTrue(String filename) throws Exception { // GIVEN final String TEST_NAME = "testScriptSystemVariablesConditionFalseToTrue"; System.out.println("===[ "+TEST_NAME+"]==="); ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, evaluator.toPath("name"), evaluator.getPrismContext(), PrismTestUtil.createPolyString("Jack")); delta.addModificationAddProperty(evaluator.toPath("employeeType"), "CAPTAIN"); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( filename, TEST_NAME, "title", delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("Captain Jack")); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testScriptSystemVariablesConditionTrueToFalseGroovy() throws Exception { testScriptSystemVariablesConditionTrueToFalse("mapping-script-system-variables-condition-groovy.xml"); } @Test public void testScriptSystemVariablesConditionTrueToFalseXPath() throws Exception { testScriptSystemVariablesConditionTrueToFalse("mapping-script-system-variables-condition-xpath.xml"); } public void testScriptSystemVariablesConditionTrueToFalse(String filename) throws Exception { // GIVEN final String TEST_NAME = "testScriptSystemVariablesConditionTrueToFalse"; System.out.println("===[ "+TEST_NAME+"]==="); ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, evaluator.toPath("name"), evaluator.getPrismContext(), "Jack"); delta.addModificationDeleteProperty(evaluator.toPath("employeeType"), "CAPTAIN"); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( filename, TEST_NAME, "title", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); user.asObjectable().getEmployeeType().add("CAPTAIN"); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTripleNoPlus(outputTriple); PrismAsserts.assertTripleMinus(outputTriple, PrismTestUtil.createPolyString("Captain jack")); } @Test public void testScriptSystemVariablesConditionEmptyTrue() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionEmptyTrue"; testScriptSystemVariablesConditionEmptyTrue(TEST_NAME, "mapping-script-system-variables-condition-empty.xml"); } @Test public void testScriptSystemVariablesConditionEmptyTrueFunction() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionEmptyTrueFunction"; testScriptSystemVariablesConditionEmptyTrue(TEST_NAME, "mapping-script-system-variables-condition-empty-function.xml"); } @Test public void testScriptSystemVariablesConditionEmptySingleTrue() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionEmptySingleTrue"; testScriptSystemVariablesConditionEmptyTrue(TEST_NAME, "mapping-script-system-variables-condition-empty-single.xml"); } @Test public void testScriptSystemVariablesConditionEmptySingleTrueFunction() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionEmptySingleTrueFunction"; testScriptSystemVariablesConditionEmptyTrue(TEST_NAME, "mapping-script-system-variables-condition-empty-single-function.xml"); } public void testScriptSystemVariablesConditionEmptyTrue(final String TEST_NAME, String filename) throws Exception { System.out.println("===[ "+TEST_NAME+"]==="); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, evaluator.toPath("name"), evaluator.getPrismContext(), PrismTestUtil.createPolyString("Jack")); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( filename, TEST_NAME, "title", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); user.asObjectable().getEmployeeType().clear(); user.asObjectable().setEmployeeNumber(null); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("Landlubber Jack")); PrismAsserts.assertTripleMinus(outputTriple, PrismTestUtil.createPolyString("Landlubber jack")); } @Test public void testScriptSystemVariablesConditionEmptySingleFalseToTrue() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionEmptySingleFalseToTrue"; testScriptSystemVariablesConditionEmptyFalseToTrue(TEST_NAME, "mapping-script-system-variables-condition-empty-single.xml"); } @Test public void testScriptSystemVariablesConditionEmptySingleFalseToTrueFunction() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionEmptySingleFalseToTrueFunction"; testScriptSystemVariablesConditionEmptyFalseToTrue(TEST_NAME, "mapping-script-system-variables-condition-empty-single-function.xml"); } public void testScriptSystemVariablesConditionEmptyFalseToTrue(final String TEST_NAME, String filename) throws Exception { System.out.println("===[ "+TEST_NAME+"]==="); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, evaluator.toPath("employeeNumber"), evaluator.getPrismContext()); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( filename, TEST_NAME, "title", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); user.asObjectable().setEmployeeNumber("666"); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("Landlubber jack")); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testScriptSystemVariablesConditionEmptyFalse() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionEmptyFalse"; testScriptSystemVariablesConditionEmptyFalse(TEST_NAME, "mapping-script-system-variables-condition-empty.xml"); } @Test public void testScriptSystemVariablesConditionEmptyFalseFunction() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionEmptyFalse"; testScriptSystemVariablesConditionEmptyFalse(TEST_NAME, "mapping-script-system-variables-condition-empty-function.xml"); } @Test public void testScriptSystemVariablesConditionEmptySingleFalse() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionEmptySingleFalse"; testScriptSystemVariablesConditionEmptyFalse(TEST_NAME, "mapping-script-system-variables-condition-empty-single.xml"); } @Test public void testScriptSystemVariablesConditionEmptySingleFalseFunction() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionEmptySingleFalseFunction"; testScriptSystemVariablesConditionEmptyFalse(TEST_NAME, "mapping-script-system-variables-condition-empty-single-function.xml"); } public void testScriptSystemVariablesConditionEmptyFalse(final String TEST_NAME, String filename) throws Exception { System.out.println("===[ "+TEST_NAME+"]==="); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, evaluator.toPath("name"), evaluator.getPrismContext(), PrismTestUtil.createPolyString("Jack")); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( filename, TEST_NAME, "title", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); user.asObjectable().getEmployeeType().add("SAILOR"); user.asObjectable().setEmployeeNumber("666"); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); assertNull("Unexpected value in outputTriple: "+outputTriple, outputTriple); } @Test public void testScriptSystemVariablesConditionEmptySingleTrueToFalse() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionEmptySingleTrueToFalse"; testScriptSystemVariablesConditionEmptyTrueToFalse(TEST_NAME, "mapping-script-system-variables-condition-empty-single.xml"); } @Test public void testScriptSystemVariablesConditionEmptySingleTrueToFalseFunction() throws Exception { final String TEST_NAME = "testScriptSystemVariablesConditionEmptySingleTrueToFalseFunction"; testScriptSystemVariablesConditionEmptyTrueToFalse(TEST_NAME, "mapping-script-system-variables-condition-empty-single-function.xml"); } public void testScriptSystemVariablesConditionEmptyTrueToFalse(final String TEST_NAME, String filename) throws Exception { System.out.println("===[ "+TEST_NAME+"]==="); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, evaluator.toPath("employeeNumber"), evaluator.getPrismContext(), "666"); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( filename, TEST_NAME, "title", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); user.asObjectable().setEmployeeNumber(null); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTripleNoPlus(outputTriple); PrismAsserts.assertTripleMinus(outputTriple, PrismTestUtil.createPolyString("Landlubber jack")); } @Test public void testNpeFalseToTrue() throws Exception { final String TEST_NAME = "testNpeFalseToTrue"; System.out.println("===[ "+TEST_NAME+"]==="); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, UserType.F_ADDITIONAL_NAME, evaluator.getPrismContext(), "Captain Sparrow"); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( "mapping-npe.xml", TEST_NAME, "title", delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("15")); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testNpeTrueToFalse() throws Exception { final String TEST_NAME = "testNpeTrueToFalse"; System.out.println("===[ "+TEST_NAME+"]==="); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, UserType.F_ADDITIONAL_NAME, evaluator.getPrismContext()); Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping( "mapping-npe.xml", TEST_NAME, "title", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); user.asObjectable().setAdditionalName(PrismTestUtil.createPolyStringType("Sultan of the Caribbean")); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTripleNoPlus(outputTriple); PrismAsserts.assertTripleMinus(outputTriple, PrismTestUtil.createPolyString("23")); } @Test public void testPathEnum() throws Exception { final String TEST_NAME = "testPathEnum"; System.out.println("===[ "+TEST_NAME+"]==="); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, SchemaConstants.PATH_ACTIVATION_ADMINISTRATIVE_STATUS, evaluator.getPrismContext(), ActivationStatusType.DISABLED); Mapping<PrismPropertyValue<String>,PrismPropertyDefinition<String>> mapping = evaluator.createMapping( "mapping-path-enum.xml", TEST_NAME, "costCenter", delta); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = mapping.getOutputTriple(); System.out.println("Output triple"); System.out.println(outputTriple.debugDump()); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, ActivationStatusType.DISABLED.value()); PrismAsserts.assertTripleMinus(outputTriple, ActivationStatusType.ENABLED.value()); } @Test public void testEmployeeNumberString() throws Exception { // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = evaluator.evaluateMappingDynamicReplace( "mapping-script-system-variables-employee-number.xml", "testEmployeeNumberString", "employeeType", // target "employeeNumber", // changed property "666"); // changed values // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, "666"); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testEmployeeNumberPolyString() throws Exception { final String TEST_NAME = "testEmployeeNumberPolyString"; System.out.println("===[ "+TEST_NAME+"]==="); // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = evaluator.evaluateMappingDynamicReplace( "mapping-script-system-variables-employee-number.xml", TEST_NAME, "additionalName", // target "employeeNumber", // changed property "666"); // changed values // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("666")); PrismAsserts.assertTripleNoMinus(outputTriple); // Make sure it is recomputed PolyString plusval = outputTriple.getPlusSet().iterator().next().getValue(); System.out.println("Plus polystring\n"+ plusval.debugDump()); assertEquals("Wrong norm value", "666", plusval.getNorm()); } @Test public void testEmployeeNumberInt() throws Exception { // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<Integer>> outputTriple = evaluator.evaluateMappingDynamicReplace( "mapping-script-system-variables-employee-number.xml", "testEmployeeNumberString", new ItemPath(UserType.F_EXTENSION, SchemaTestConstants.EXTENSION_INT_TYPE_ELEMENT), // target "employeeNumber", // changed property "666"); // changed values // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, 666); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testEmployeeNumberInteger() throws Exception { // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<Integer>> outputTriple = evaluator.evaluateMappingDynamicReplace( "mapping-script-system-variables-employee-number.xml", "testEmployeeNumberString", new ItemPath(UserType.F_EXTENSION, SchemaTestConstants.EXTENSION_INTEGER_TYPE_ELEMENT), // target "employeeNumber", // changed property "666"); // changed values // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, new BigInteger("666")); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testEmployeeNumberLong() throws Exception { // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<Long>> outputTriple = evaluator.evaluateMappingDynamicReplace( "mapping-script-system-variables-employee-number.xml", "testEmployeeNumberString", new ItemPath(UserType.F_EXTENSION, SchemaTestConstants.EXTENSION_LONG_TYPE_ELEMENT), // target "employeeNumber", // changed property "666"); // changed values // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, 666L); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testEmployeeNumberDecimal() throws Exception { // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<Integer>> outputTriple = evaluator.evaluateMappingDynamicReplace( "mapping-script-system-variables-employee-number.xml", "testEmployeeNumberString", new ItemPath(UserType.F_EXTENSION, SchemaTestConstants.EXTENSION_DECIMAL_TYPE_ELEMENT), // target "employeeNumber", // changed property "666.33"); // changed values // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, new BigDecimal("666.33")); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testEmployeeNumberProtectedString() throws Exception { // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<ProtectedStringType>> outputTriple = evaluator.evaluateMappingDynamicReplace( "mapping-script-system-variables-employee-number.xml", "testEmployeeNumberProtectedString", new ItemPath(UserType.F_CREDENTIALS, CredentialsType.F_PASSWORD, PasswordType.F_VALUE), // target "employeeNumber", // changed property "666"); // changed values // THEN evaluator.assertProtectedString("plus set", outputTriple.getPlusSet(), "666"); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testEmployeeTypeDeltaAreplaceB() throws Exception { final String TEST_NAME = "testEmployeeTypeDeltaAreplaceB"; TestUtil.displayTestTile(TEST_NAME); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, UserType.F_EMPLOYEE_TYPE, evaluator.getPrismContext(), "B"); Mapping<PrismPropertyValue<String>,PrismPropertyDefinition<String>> mapping = evaluator.createMapping( "mapping-script-system-variables-employee-type.xml", TEST_NAME, "employeeType", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); setEmployeeType(user.asObjectable(), "A"); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN evaluator.assertResult(opResult); PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = mapping.getOutputTriple(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, "B"); PrismAsserts.assertTripleMinus(outputTriple, "A"); } @Test public void testEmployeeTypeDeltaNullreplaceB() throws Exception { final String TEST_NAME = "testEmployeeTypeDeltaNullreplaceB"; TestUtil.displayTestTile(TEST_NAME); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, UserType.F_EMPLOYEE_TYPE, evaluator.getPrismContext(), "B"); Mapping<PrismPropertyValue<String>,PrismPropertyDefinition<String>> mapping = evaluator.createMapping( "mapping-script-system-variables-employee-type.xml", TEST_NAME, "employeeType", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); setEmployeeType(user.asObjectable()); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN evaluator.assertResult(opResult); PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = mapping.getOutputTriple(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, "B"); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testEmployeeTypeDeltaBreplaceB() throws Exception { final String TEST_NAME = "testEmployeeTypeDeltaBreplaceB"; TestUtil.displayTestTile(TEST_NAME); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID, UserType.F_EMPLOYEE_TYPE, evaluator.getPrismContext(), "B"); Mapping<PrismPropertyValue<String>,PrismPropertyDefinition<String>> mapping = evaluator.createMapping( "mapping-script-system-variables-employee-type.xml", TEST_NAME, "employeeType", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); setEmployeeType(user.asObjectable(), "B"); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN evaluator.assertResult(opResult); PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = mapping.getOutputTriple(); PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, "B"); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testEmployeeTypeDeltaAaddB() throws Exception { final String TEST_NAME = "testEmployeeTypeDeltaAaddB"; TestUtil.displayTestTile(TEST_NAME); // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = employeeTypeDeltaABAdd(TEST_NAME, "B", "A"); // THEN PrismAsserts.assertTripleZero(outputTriple, "A"); PrismAsserts.assertTriplePlus(outputTriple, "B"); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testEmployeeTypeDeltaABaddB() throws Exception { final String TEST_NAME = "testEmployeeTypeDeltaABaddB"; TestUtil.displayTestTile(TEST_NAME); // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = employeeTypeDeltaABAdd(TEST_NAME, "B", "A", "B"); // THEN PrismAsserts.assertTripleZero(outputTriple, "A"); PrismAsserts.assertTriplePlus(outputTriple, "B"); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testEmployeeTypeDeltaBaddB() throws Exception { final String TEST_NAME = "testEmployeeTypeDeltaBaddB"; TestUtil.displayTestTile(TEST_NAME); // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = employeeTypeDeltaABAdd(TEST_NAME, "B", "B"); // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, "B"); PrismAsserts.assertTripleNoMinus(outputTriple); } @Test public void testEmployeeTypeDeltaNulladdB() throws Exception { final String TEST_NAME = "testEmployeeTypeDeltaNulladdB"; TestUtil.displayTestTile(TEST_NAME); // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = employeeTypeDeltaABAdd(TEST_NAME, "B"); // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, "B"); PrismAsserts.assertTripleNoMinus(outputTriple); } public PrismValueDeltaSetTriple<PrismPropertyValue<String>> employeeTypeDeltaABAdd( final String TEST_NAME, String addVal, String... oldVals) throws Exception { TestUtil.displayTestTile(TEST_NAME); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationAddProperty(UserType.class, evaluator.USER_OLD_OID, UserType.F_EMPLOYEE_TYPE, evaluator.getPrismContext(), addVal); Mapping<PrismPropertyValue<String>,PrismPropertyDefinition<String>> mapping = evaluator.createMapping( "mapping-script-system-variables-employee-type.xml", TEST_NAME, "employeeType", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); setEmployeeType(user.asObjectable(), oldVals); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN evaluator.assertResult(opResult); return mapping.getOutputTriple(); } private void setEmployeeType(UserType userType, String... vals) { userType.getEmployeeType().clear(); for (String val: vals) { userType.getEmployeeType().add(val); } } @Test public void testEmployeeTypeDeltaBdeleteB() throws Exception { final String TEST_NAME = "testEmployeeTypeDeltaBdeleteB"; TestUtil.displayTestTile(TEST_NAME); // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = employeeTypeDeltaDelete(TEST_NAME, "B", "B"); // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTripleNoPlus(outputTriple); PrismAsserts.assertTripleMinus(outputTriple, "B"); } @Test public void testEmployeeTypeDeltaABdeleteB() throws Exception { final String TEST_NAME = "testEmployeeTypeDeltaABdeleteB"; TestUtil.displayTestTile(TEST_NAME); // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = employeeTypeDeltaDelete(TEST_NAME, "B", "A", "B"); // THEN PrismAsserts.assertTripleZero(outputTriple, "A"); PrismAsserts.assertTripleNoPlus(outputTriple); PrismAsserts.assertTripleMinus(outputTriple, "B"); } @Test public void testEmployeeTypeDeltaAdeleteB() throws Exception { final String TEST_NAME = "testEmployeeTypeDeltaAdeleteB"; TestUtil.displayTestTile(TEST_NAME); // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = employeeTypeDeltaDelete(TEST_NAME, "B", "A"); // THEN PrismAsserts.assertTripleZero(outputTriple, "A"); PrismAsserts.assertTripleNoPlus(outputTriple); PrismAsserts.assertTripleMinus(outputTriple, "B"); } @Test public void testEmployeeTypeDeltaNulldeleteB() throws Exception { final String TEST_NAME = "testEmployeeTypeDeltaNulldeleteB"; TestUtil.displayTestTile(TEST_NAME); // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = employeeTypeDeltaDelete(TEST_NAME, "B"); // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTripleNoPlus(outputTriple); PrismAsserts.assertTripleMinus(outputTriple, "B"); } public PrismValueDeltaSetTriple<PrismPropertyValue<String>> employeeTypeDeltaDelete(final String TEST_NAME, String delVal, String... oldVals) throws Exception { TestUtil.displayTestTile(TEST_NAME); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationDeleteProperty(UserType.class, evaluator.USER_OLD_OID, UserType.F_EMPLOYEE_TYPE, evaluator.getPrismContext(), delVal); Mapping<PrismPropertyValue<String>,PrismPropertyDefinition<String>> mapping = evaluator.createMapping( "mapping-script-system-variables-employee-type.xml", TEST_NAME, "employeeType", delta); PrismObject<UserType> user = (PrismObject<UserType>) mapping.getSourceContext().getOldObject(); setEmployeeType(user.asObjectable(), oldVals); mapping.getSourceContext().recompute(); OperationResult opResult = new OperationResult(TEST_NAME); // WHEN mapping.evaluate(null, opResult); // THEN evaluator.assertResult(opResult); return mapping.getOutputTriple(); } @Test public void testPasswordString() throws Exception { // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = evaluator.evaluateMappingDynamicReplace( "mapping-script-system-variables-password.xml", "testPasswordString", "employeeType", // target new ItemPath(UserType.F_CREDENTIALS, CredentialsType.F_PASSWORD, PasswordType.F_VALUE), // changed property evaluator.createProtectedString("weighAnch0r")); // changed values // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, "weighAnch0r"); PrismAsserts.assertTripleMinus(outputTriple, "d3adM3nT3llN0Tal3s"); } @Test public void testPasswordPolyString() throws Exception { // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = evaluator.evaluateMappingDynamicReplace( "mapping-script-system-variables-password.xml", "testPasswordPolyString", UserType.F_ADDITIONAL_NAME.getLocalPart(), // target new ItemPath(UserType.F_CREDENTIALS, CredentialsType.F_PASSWORD, PasswordType.F_VALUE), // changed property evaluator.createProtectedString("weighAnch0r")); // changed values // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("weighAnch0r")); PrismAsserts.assertTripleMinus(outputTriple, PrismTestUtil.createPolyString("d3adM3nT3llN0Tal3s")); } @Test public void testPasswordProtectedString() throws Exception { // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<ProtectedStringType>> outputTriple = evaluator.evaluateMappingDynamicReplace( "mapping-script-system-variables-password.xml", "testPasswordPolyString", new ItemPath(UserType.F_CREDENTIALS, CredentialsType.F_PASSWORD, PasswordType.F_VALUE), // target new ItemPath(UserType.F_CREDENTIALS, CredentialsType.F_PASSWORD, PasswordType.F_VALUE), // changed property evaluator.createProtectedString("weighAnch0r")); // changed values // THEN PrismAsserts.assertTripleNoZero(outputTriple); evaluator.assertProtectedString("plus set", outputTriple.getPlusSet(), "weighAnch0r"); evaluator.assertProtectedString("minus set", outputTriple.getMinusSet(), "d3adM3nT3llN0Tal3s"); } @Test public void testPasswordDecryptString() throws Exception { // WHEN PrismValueDeltaSetTriple<PrismPropertyValue<String>> outputTriple = evaluator.evaluateMappingDynamicReplace( "mapping-script-system-variables-password-decrypt.xml", "testPasswordDecryptString", "employeeType", // target new ItemPath(UserType.F_CREDENTIALS, CredentialsType.F_PASSWORD, PasswordType.F_VALUE), // changed property evaluator.createProtectedString("weighAnch0r")); // changed values // THEN PrismAsserts.assertTripleNoZero(outputTriple); PrismAsserts.assertTriplePlus(outputTriple, "weighAnch0r123"); PrismAsserts.assertTripleMinus(outputTriple, "d3adM3nT3llN0Tal3s123"); } }