Skip to content

Commit

Permalink
Extending the wrapper test
Browse files Browse the repository at this point in the history
  • Loading branch information
semancik committed Jan 5, 2016
1 parent edd3b07 commit 32c2a6c
Show file tree
Hide file tree
Showing 4 changed files with 233 additions and 4 deletions.
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2010-2015 Evolveum
* Copyright (c) 2010-2016 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -92,7 +92,7 @@ ObjectWrapper getObject() {
return objectWrapper;
}

ContainerStatus getStatus() {
public ContainerStatus getStatus() {
return status;
}

Expand Down
Expand Up @@ -18,17 +18,35 @@
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;

import java.util.Arrays;
import java.util.List;

import javax.xml.namespace.QName;

import org.testng.AssertJUnit;
import org.testng.annotations.Test;

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.prism.PrismPropertyValue;
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.util.PrismTestUtil;
import com.evolveum.midpoint.test.IntegrationTestTools;
import com.evolveum.midpoint.test.util.TestUtil;
import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.web.component.prism.ContainerStatus;
import com.evolveum.midpoint.web.component.prism.ContainerWrapper;
import com.evolveum.midpoint.web.component.prism.ItemWrapper;
import com.evolveum.midpoint.web.component.prism.ObjectWrapper;
import com.evolveum.midpoint.web.component.prism.ObjectWrapperFactory;
import com.evolveum.midpoint.web.component.prism.ValueWrapper;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationStatusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ActivationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;

Expand Down Expand Up @@ -59,13 +77,86 @@ public void testCreateWrapperUser() throws Exception {
IntegrationTestTools.display("Wrapper after", userWrapper);

assertWrapper(userWrapper, "user display name", "user description", user, ContainerStatus.MODIFYING);
assertEquals("wrong number of containers in "+userWrapper, 10, userWrapper.getContainers().size());

ContainerWrapper mainContainerWrapper = userWrapper.findContainerWrapper(null);
assertWrapper(mainContainerWrapper, "user", (ItemPath)null, user, ContainerStatus.MODIFYING);
assertPropertyWrapper(mainContainerWrapper, UserType.F_NAME, PrismTestUtil.createPolyString("jack"));
assertPropertyWrapper(mainContainerWrapper, UserType.F_TIMEZONE, null);

ContainerWrapper<ActivationType> activationContainerWrapper = userWrapper.findContainerWrapper(new ItemPath(UserType.F_ACTIVATION));
assertWrapper(activationContainerWrapper, "Activation", UserType.F_ACTIVATION, user, ContainerStatus.MODIFYING);
assertPropertyWrapper(activationContainerWrapper, ActivationType.F_ADMINISTRATIVE_STATUS, ActivationStatusType.ENABLED);
assertPropertyWrapper(activationContainerWrapper, ActivationType.F_LOCKOUT_STATUS, null);
}

private <C extends Containerable,T> void assertPropertyWrapper(ContainerWrapper<C> containerWrapper, QName itemName, T... expectedValues) {
ItemWrapper itemWrapper = containerWrapper.findPropertyWrapper(itemName);
assertNotNull("No item wrapper "+itemName+" in "+containerWrapper, itemWrapper);
List<ValueWrapper> valueWrappers = itemWrapper.getValues();
assertPropertyWrapperValues("item wrapper "+itemName+" in "+containerWrapper, valueWrappers, expectedValues);
}

private <C extends Containerable,T> void assertPropertyWrapperValues(String desc, List<ValueWrapper> valueWrappers, T... expectedValues) {
if (expectedValues == null) {
expectedValues = (T[]) new Object[] { null };
}
assertEquals("Wrong number of values in "+desc+"; was: "+valueWrappers+", expected: "+Arrays.toString(expectedValues), expectedValues.length, valueWrappers.size());
if (expectedValues.length == 0) {
return;
}
for (ValueWrapper vw: valueWrappers) {
PrismValue actualPval = vw.getValue();
if (actualPval instanceof PrismPropertyValue<?>) {
T actualValue = ((PrismPropertyValue<T>)actualPval).getValue();
boolean found = false;
for (T expectedValue: expectedValues) {
if (MiscUtil.equals(expectedValue, actualValue)) {
found = true;
}
}
if (!found) {
AssertJUnit.fail("Unexpected value "+actualValue+" in value wrapper in "+desc+"; was: "+valueWrappers+", expected: "+Arrays.toString(expectedValues));
}
} else {
AssertJUnit.fail("expected PrismPropertyValue in value wrapper in "+desc+", but got "+actualPval.getClass());
}

}
}

private <C extends Containerable, O extends ObjectType> void assertWrapper(ContainerWrapper<C> containerWrapper, String displayName,
QName itemName, PrismObject<O> object, ContainerStatus status) {
assertWrapper(containerWrapper, displayName, itemName==null?null:new ItemPath(itemName), object, status);
}

private <C extends Containerable, O extends ObjectType> void assertWrapper(ContainerWrapper<C> containerWrapper, String displayName,
ItemPath expectedPath, PrismObject<O> object, ContainerStatus status) {
PrismContainer<C> container;
if (expectedPath == null) {
container = (PrismContainer<C>) object;
} else {
container = object.findContainer(expectedPath);
}
assertWrapper(containerWrapper, displayName, expectedPath, container, expectedPath==null, status);
}

private <C extends Containerable> void assertWrapper(ContainerWrapper<C> containerWrapper, String displayName, ItemPath expectedPath,
PrismContainer<C> container, boolean isMain, ContainerStatus status) {
assertNotNull("null wrapper", containerWrapper);
assertEquals("Wrong main flag in wrapper "+containerWrapper, expectedPath, containerWrapper.getPath());
assertEquals("Wrong main flag in wrapper "+containerWrapper, isMain, containerWrapper.isMain());
assertEquals("Wrong item in wrapper "+containerWrapper, container, containerWrapper.getItem());
assertEquals("Wrong displayName in wrapper "+containerWrapper, displayName, containerWrapper.getDisplayName());
assertEquals("Wrong status in wrapper "+containerWrapper, status, containerWrapper.getStatus());
}

private <O extends ObjectType> void assertWrapper(ObjectWrapper<O> objectWrapper, String displayName, String description, PrismObject<O> object,
ContainerStatus status) {
assertNotNull("null wrapper", objectWrapper);
assertEquals("Wrong object in wrapper "+objectWrapper, object, objectWrapper.getObject());
assertEquals("Wrong object in wrapper "+objectWrapper, object, objectWrapper.getObjectOld());
assertEquals("Wrong old object in wrapper "+objectWrapper, object, objectWrapper.getObjectOld());
assertFalse("object and old object not clonned in "+objectWrapper, objectWrapper.getObject() == objectWrapper.getObjectOld());
assertEquals("Wrong displayName in wrapper "+objectWrapper, displayName, objectWrapper.getDisplayName());
assertEquals("Wrong description in wrapper "+objectWrapper, description, objectWrapper.getDescription());
assertEquals("Wrong status in wrapper "+objectWrapper, status, objectWrapper.getStatus());
Expand Down
10 changes: 9 additions & 1 deletion gui/admin-gui/src/test/resources/common/user-jack.xml
Expand Up @@ -28,7 +28,9 @@
xmlns:m="http://midpoint.evolveum.com/xml/ns/public/model/model-context-3"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:enc="http://www.w3.org/2001/04/xmlenc#">
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:enc="http://www.w3.org/2001/04/xmlenc#"
xmlns:piracy='http://midpoint.evolveum.com/xml/ns/samples/piracy'>
<name>
<t:orig>jack</t:orig>
<t:norm>jack</t:norm>
Expand All @@ -44,6 +46,12 @@
<modifierRef oid="00000000-0000-0000-0000-000000000002"/>
<modifyChannel>http://midpoint.evolveum.com/xml/ns/public/provisioning/channels-3#import</modifyChannel>
</metadata>
<extension>
<piracy:ship xsi:type="xsd:string">Black Pearl</piracy:ship>
<piracy:weapon>pistol</piracy:weapon>
<piracy:weapon>mouth</piracy:weapon>
<piracy:badLuck>0</piracy:badLuck>
</extension>
<linkRef xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
oid="8d64f4f0-2b44-47aa-935a-63727e78c639"
type="c:ShadowType"/>
Expand Down
130 changes: 130 additions & 0 deletions gui/admin-gui/src/test/resources/schema/piracy.xsd
@@ -0,0 +1,130 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<!--
~ Copyright (c) 2010-2013 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.
-->
<xsd:schema elementFormDefault="qualified"
targetNamespace="http://midpoint.evolveum.com/xml/ns/samples/piracy"
xmlns:tns="http://midpoint.evolveum.com/xml/ns/samples/piracy"
xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3"
xmlns:a="http://prism.evolveum.com/xml/ns/public/annotation-3"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<!-- user extension -->

<xsd:complexType name="UserTypeExtensionType">
<xsd:annotation>
<xsd:appinfo>
<a:extension ref="c:UserType"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="ship" type="xsd:string">
<xsd:annotation>
<xsd:appinfo>
<a:indexed>true</a:indexed>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="tales" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo>
<a:indexed>false</a:indexed>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="weapon" type="xsd:string" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo>
<a:indexed>true</a:indexed>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="loot" type="xsd:int" minOccurs="0">
<xsd:annotation>
<xsd:appinfo>
<a:indexed>true</a:indexed>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="badLuck" type="xsd:long" minOccurs="0" maxOccurs="unbounded">
<!-- This has default indexed setting -->
</xsd:element>
<xsd:element name="funeralTimestamp" type="xsd:dateTime" minOccurs="0">
<xsd:annotation>
<xsd:appinfo>
<a:indexed>true</a:indexed>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="colors" type="xsd:string" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo>
<a:indexed>false</a:indexed>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="mark" type="tns:MarkType" minOccurs="0" maxOccurs="1">
</xsd:element>
</xsd:sequence>
</xsd:complexType>

<xsd:simpleType name="MarkType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="pegLeg">
<xsd:annotation>
<xsd:appinfo>
<a:label>Peg Leg</a:label>
</xsd:appinfo>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="noEye">
<xsd:annotation>
<xsd:appinfo>
<a:label>No Eye</a:label>
</xsd:appinfo>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="hook"/>
<xsd:enumeration value="tatoo"/>
<xsd:enumeration value="scar"/>
<xsd:enumeration value="bravery"/>
</xsd:restriction>
</xsd:simpleType>

<!-- assignment extension -->

<xsd:element name="sea" type="xsd:string"/>

<!-- role extension -->

<xsd:complexType name="RoleTypeExtensionType">
<xsd:annotation>
<xsd:appinfo>
<a:extension ref="c:RoleType"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="costCenter" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo>
<a:indexed>true</a:indexed>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>

</xsd:schema>

0 comments on commit 32c2a6c

Please sign in to comment.