/*
* Copyright (c) 2010-2017 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.assertNull;
import static com.evolveum.midpoint.test.IntegrationTestTools.display;
import java.io.IOException;
import java.util.List;
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.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.polystring.PolyString;
import com.evolveum.midpoint.prism.util.PrismAsserts;
import com.evolveum.midpoint.prism.util.PrismTestUtil;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.test.util.TestUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;
/**
* Tests for mapping domain. Those are multival input and multival output.
*
* MID-3692
* @author Radovan Semancik
*/
public class TestMappingDomain {
private static final String MAPPING_DOMAIN_FILENAME = "mapping-domain.xml";
private MappingTestEvaluator evaluator;
@BeforeClass
public void setupFactory() throws SchemaException, SAXException, IOException {
evaluator = new MappingTestEvaluator();
evaluator.init();
}
/**
* Control. All goes well here. All values in the domain.
*/
@Test
public void testControlReplaceSingleValue() throws Exception {
final String TEST_NAME = "testControlReplaceSingleValue";
TestUtil.displayTestTile(this, TEST_NAME);
// GIVEN
PrismObject<UserType> userOld = evaluator.getUserOld();
List<String> employeeTypeOld = userOld.asObjectable().getEmployeeType();
employeeTypeOld.clear();
employeeTypeOld.add("1234567890");
ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID,
UserType.F_ADDITIONAL_NAME, evaluator.getPrismContext(), "Jackie");
delta.addModificationReplaceProperty(UserType.F_EMPLOYEE_TYPE, "321");
Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping(
MAPPING_DOMAIN_FILENAME,
TEST_NAME, "organization", delta, userOld);
OperationResult opResult = new OperationResult(TEST_NAME);
// WHEN
mapping.evaluate(null, opResult);
// THEN
PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple();
outputTriple.checkConsistence();
PrismAsserts.assertTripleNoZero(outputTriple);
PrismAsserts.assertTriplePlus(outputTriple, PrismTestUtil.createPolyString("Pirate Jackie (321)"));
PrismAsserts.assertTripleMinus(outputTriple, PrismTestUtil.createPolyString("Pirate null (1234567890)"));
}
/**
* Control. All goes well here. All values in the domain.
*/
@Test
public void testControlReplaceMultiValue() throws Exception {
final String TEST_NAME = "testControlReplaceMultiValue";
TestUtil.displayTestTile(this, TEST_NAME);
// GIVEN
PrismObject<UserType> userOld = evaluator.getUserOld();
List<String> employeeTypeOld = userOld.asObjectable().getEmployeeType();
employeeTypeOld.clear();
employeeTypeOld.add("001");
employeeTypeOld.add("002");
employeeTypeOld.add("003");
ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID,
UserType.F_ADDITIONAL_NAME, evaluator.getPrismContext(), "Jackie");
delta.addModificationReplaceProperty(UserType.F_EMPLOYEE_TYPE, "991", "992");
Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping(
MAPPING_DOMAIN_FILENAME,
TEST_NAME, "organization", delta, userOld);
OperationResult opResult = new OperationResult(TEST_NAME);
// WHEN
mapping.evaluate(null, opResult);
// THEN
PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple();
outputTriple.checkConsistence();
PrismAsserts.assertTripleNoZero(outputTriple);
PrismAsserts.assertTriplePlus(outputTriple,
PrismTestUtil.createPolyString("Pirate Jackie (991)"),
PrismTestUtil.createPolyString("Pirate Jackie (992)"));
PrismAsserts.assertTripleMinus(outputTriple,
PrismTestUtil.createPolyString("Pirate null (001)"),
PrismTestUtil.createPolyString("Pirate null (002)"),
PrismTestUtil.createPolyString("Pirate null (003)"));
}
@Test
public void testReplaceMixedMultiValue() throws Exception {
final String TEST_NAME = "testReplaceMixedMultiValue";
TestUtil.displayTestTile(this, TEST_NAME);
// GIVEN
PrismObject<UserType> userOld = evaluator.getUserOld();
List<String> employeeTypeOld = userOld.asObjectable().getEmployeeType();
employeeTypeOld.clear();
employeeTypeOld.add("001");
employeeTypeOld.add("A02");
employeeTypeOld.add("B03");
employeeTypeOld.add("004");
ObjectDelta<UserType> delta = ObjectDelta.createModificationReplaceProperty(UserType.class, evaluator.USER_OLD_OID,
UserType.F_ADDITIONAL_NAME, evaluator.getPrismContext(), "Jackie");
delta.addModificationReplaceProperty(UserType.F_EMPLOYEE_TYPE, "X91", "992", "Y93", "994");
Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping(
MAPPING_DOMAIN_FILENAME,
TEST_NAME, "organization", delta, userOld);
OperationResult opResult = new OperationResult(TEST_NAME);
// WHEN
TestUtil.displayWhen(TEST_NAME);
mapping.evaluate(null, opResult);
// THEN
TestUtil.displayThen(TEST_NAME);
PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple();
display("Output triple", outputTriple);
outputTriple.checkConsistence();
PrismAsserts.assertTripleNoZero(outputTriple);
PrismAsserts.assertTriplePlus(outputTriple,
PrismTestUtil.createPolyString("Pirate Jackie (992)"),
PrismTestUtil.createPolyString("Pirate Jackie (994)"));
PrismAsserts.assertTripleMinus(outputTriple,
PrismTestUtil.createPolyString("Pirate null (001)"),
PrismTestUtil.createPolyString("Pirate null (004)"));
}
@Test
public void testAddMixedMultiValue() throws Exception {
final String TEST_NAME = "testAddMixedMultiValue";
TestUtil.displayTestTile(this, TEST_NAME);
// GIVEN
PrismObject<UserType> userOld = evaluator.getUserOld();
userOld.asObjectable().setAdditionalName(PrismTestUtil.createPolyStringType("Jackie"));
List<String> employeeTypeOld = userOld.asObjectable().getEmployeeType();
employeeTypeOld.clear();
employeeTypeOld.add("001");
employeeTypeOld.add("A02");
employeeTypeOld.add("B03");
employeeTypeOld.add("004");
ObjectDelta<UserType> delta = ObjectDelta.createModificationAddProperty(UserType.class, evaluator.USER_OLD_OID,
UserType.F_EMPLOYEE_TYPE, evaluator.getPrismContext(), "X91", "992", "Y93", "994");
Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping(
MAPPING_DOMAIN_FILENAME,
TEST_NAME, "organization", delta, userOld);
OperationResult opResult = new OperationResult(TEST_NAME);
// WHEN
TestUtil.displayWhen(TEST_NAME);
mapping.evaluate(null, opResult);
// THEN
TestUtil.displayThen(TEST_NAME);
PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple();
display("Output triple", outputTriple);
outputTriple.checkConsistence();
PrismAsserts.assertTripleZero(outputTriple,
PrismTestUtil.createPolyString("Pirate Jackie (001)"),
PrismTestUtil.createPolyString("Pirate Jackie (004)"));
PrismAsserts.assertTriplePlus(outputTriple,
PrismTestUtil.createPolyString("Pirate Jackie (992)"),
PrismTestUtil.createPolyString("Pirate Jackie (994)"));
PrismAsserts.assertTripleNoMinus(outputTriple);
}
@Test
public void testDeleteMixedMultiValue() throws Exception {
final String TEST_NAME = "testDeleteMixedMultiValue";
TestUtil.displayTestTile(this, TEST_NAME);
// GIVEN
PrismObject<UserType> userOld = evaluator.getUserOld();
userOld.asObjectable().setAdditionalName(PrismTestUtil.createPolyStringType("Jackie"));
List<String> employeeTypeOld = userOld.asObjectable().getEmployeeType();
employeeTypeOld.clear();
employeeTypeOld.add("001");
employeeTypeOld.add("A02");
employeeTypeOld.add("B03");
employeeTypeOld.add("004");
employeeTypeOld.add("005");
employeeTypeOld.add("C06");
employeeTypeOld.add("007");
ObjectDelta<UserType> delta = ObjectDelta.createModificationDeleteProperty(UserType.class, evaluator.USER_OLD_OID,
UserType.F_EMPLOYEE_TYPE, evaluator.getPrismContext(), "005", "C06", "007");
Mapping<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> mapping = evaluator.createMapping(
MAPPING_DOMAIN_FILENAME,
TEST_NAME, "organization", delta, userOld);
OperationResult opResult = new OperationResult(TEST_NAME);
// WHEN
TestUtil.displayWhen(TEST_NAME);
mapping.evaluate(null, opResult);
// THEN
TestUtil.displayThen(TEST_NAME);
PrismValueDeltaSetTriple<PrismPropertyValue<PolyString>> outputTriple = mapping.getOutputTriple();
display("Output triple", outputTriple);
outputTriple.checkConsistence();
PrismAsserts.assertTripleZero(outputTriple,
PrismTestUtil.createPolyString("Pirate Jackie (001)"),
PrismTestUtil.createPolyString("Pirate Jackie (004)"));
PrismAsserts.assertTripleNoPlus(outputTriple);
PrismAsserts.assertTripleMinus(outputTriple,
PrismTestUtil.createPolyString("Pirate Jackie (005)"),
PrismTestUtil.createPolyString("Pirate Jackie (007)"));
}
}