Fix for LDAP-46: Changed order of ADD_ATTRIBUTE and REMOVE_ATTRIBUTE modification item in multi-value Attributes.
This commit is contained in:
@@ -289,10 +289,10 @@ public class DirContextAdapter implements DirContextOperations {
|
||||
Collection removedValues = CollectionUtils.subtract(oldValues,
|
||||
newValues);
|
||||
|
||||
collectModifications(DirContext.ADD_ATTRIBUTE, changedAttr,
|
||||
addedValues, myModifications);
|
||||
collectModifications(DirContext.REMOVE_ATTRIBUTE, changedAttr,
|
||||
removedValues, myModifications);
|
||||
collectModifications(DirContext.ADD_ATTRIBUTE, changedAttr,
|
||||
addedValues, myModifications);
|
||||
|
||||
if (myModifications.isEmpty()) {
|
||||
// This means that the attributes are not equal, but the
|
||||
|
||||
@@ -789,21 +789,21 @@ public class DirContextAdapterTest extends TestCase {
|
||||
ModificationItem[] modificationItems = tested.getModificationItems();
|
||||
assertEquals(2, modificationItems.length);
|
||||
|
||||
assertEquals(DirContext.ADD_ATTRIBUTE, modificationItems[0]
|
||||
.getModificationOp());
|
||||
Attribute modifiedAttribute = modificationItems[0].getAttribute();
|
||||
assertEquals("abc", modifiedAttribute.getID());
|
||||
assertEquals(2, modifiedAttribute.size());
|
||||
assertEquals("klytt", modifiedAttribute.get(0));
|
||||
assertEquals("kalle", modifiedAttribute.get(1));
|
||||
|
||||
modifiedAttribute = modificationItems[1].getAttribute();
|
||||
assertEquals(DirContext.REMOVE_ATTRIBUTE, modificationItems[1]
|
||||
assertEquals(DirContext.REMOVE_ATTRIBUTE, modificationItems[0]
|
||||
.getModificationOp());
|
||||
assertEquals("abc", modifiedAttribute.getID());
|
||||
assertEquals(2, modifiedAttribute.size());
|
||||
assertEquals("rty", modifiedAttribute.get(0));
|
||||
assertEquals("uio", modifiedAttribute.get(1));
|
||||
|
||||
assertEquals(DirContext.ADD_ATTRIBUTE, modificationItems[1]
|
||||
.getModificationOp());
|
||||
modifiedAttribute = modificationItems[1].getAttribute();
|
||||
assertEquals("abc", modifiedAttribute.getID());
|
||||
assertEquals(2, modifiedAttribute.size());
|
||||
assertEquals("klytt", modifiedAttribute.get(0));
|
||||
assertEquals("kalle", modifiedAttribute.get(1));
|
||||
}
|
||||
|
||||
public void testAddAttribute_Multivalue() throws Exception {
|
||||
@@ -962,4 +962,29 @@ public class DirContextAdapterTest extends TestCase {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void testModifyMultiValueAttributeModificationOrder()
|
||||
throws NamingException {
|
||||
BasicAttribute attribute = new BasicAttribute("abc");
|
||||
attribute.add("Some Person");
|
||||
attribute.add("Some Other Person");
|
||||
|
||||
tested.setAttribute(attribute);
|
||||
tested.setUpdateMode(true);
|
||||
|
||||
tested.setAttributeValues("abc", new String[] { "some person",
|
||||
"Some Other Person" });
|
||||
|
||||
// Perform test
|
||||
ModificationItem[] modificationItems = tested.getModificationItems();
|
||||
assertEquals(2, modificationItems.length);
|
||||
ModificationItem modificationItem = modificationItems[0];
|
||||
assertEquals(DirContext.REMOVE_ATTRIBUTE, modificationItem
|
||||
.getModificationOp());
|
||||
assertEquals("Some Person", modificationItem.getAttribute().get());
|
||||
modificationItem = modificationItems[1];
|
||||
assertEquals(DirContext.ADD_ATTRIBUTE, modificationItem
|
||||
.getModificationOp());
|
||||
assertEquals("some person", modificationItem.getAttribute().get());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user