diff --git a/source/java/org/alfresco/repo/node/integrity/AssocTargetMultiplicityIntegrityEvent.java b/source/java/org/alfresco/repo/node/integrity/AssocTargetMultiplicityIntegrityEvent.java index 4a577f7cd1..a7f9fd25af 100644 --- a/source/java/org/alfresco/repo/node/integrity/AssocTargetMultiplicityIntegrityEvent.java +++ b/source/java/org/alfresco/repo/node/integrity/AssocTargetMultiplicityIntegrityEvent.java @@ -125,8 +125,9 @@ public class AssocTargetMultiplicityIntegrityEvent extends AbstractIntegrityEven // get the source multiplicity boolean mandatory = assocDef.isTargetMandatory(); boolean allowMany = assocDef.isTargetMany(); + boolean enforced = assocDef.isTargetMandatoryEnforced(); // do we need to check - if (!mandatory && allowMany) + if (!(mandatory && enforced) && allowMany) { // it is not mandatory and it allows many on both sides of the assoc return; @@ -165,7 +166,7 @@ public class AssocTargetMultiplicityIntegrityEvent extends AbstractIntegrityEven actualSize = targetAssocRefs.size(); } - if ((mandatory && actualSize == 0) || (!allowMany && actualSize > 1)) + if (((mandatory && enforced) && actualSize == 0) || (!allowMany && actualSize > 1)) { if (actualSize == 0) { diff --git a/source/test-java/org/alfresco/repo/node/integrity/IntegrityTest.java b/source/test-java/org/alfresco/repo/node/integrity/IntegrityTest.java index 12806fece9..100de7ab3a 100644 --- a/source/test-java/org/alfresco/repo/node/integrity/IntegrityTest.java +++ b/source/test-java/org/alfresco/repo/node/integrity/IntegrityTest.java @@ -72,6 +72,7 @@ public class IntegrityTest extends TestCase public static final QName TEST_TYPE_WITH_ASSOCS = QName.createQName(NAMESPACE, "typeWithAssocs"); public static final QName TEST_TYPE_WITH_CHILD_ASSOCS = QName.createQName(NAMESPACE, "typeWithChildAssocs"); public static final QName TEST_TYPE_WITH_NON_ENFORCED_CHILD_ASSOCS = QName.createQName(NAMESPACE, "typeWithNonEnforcedChildAssocs"); + public static final QName TEST_TYPE_WITH_NON_ENFORCED_TARGET_ASSOCS = QName.createQName(NAMESPACE, "typeWithNonEnforcedTargetAssocs"); public static final QName TEST_ASSOC_NODE_ZEROMANY_ZEROMANY = QName.createQName(NAMESPACE, "assoc-0to* - 0to*"); public static final QName TEST_ASSOC_CHILD_ZEROMANY_ZEROMANY = QName.createQName(NAMESPACE, "child-0to* - 0to*"); @@ -80,6 +81,7 @@ public class IntegrityTest extends TestCase public static final QName TEST_ASSOC_CHILD_ONE_ONE = QName.createQName(NAMESPACE, "child-1to1 - 1to1"); public static final QName TEST_ASSOC_ASPECT_ONE_ONE = QName.createQName(NAMESPACE, "aspect-assoc-1to1 - 1to1"); public static final QName TEST_ASSOC_CHILD_NON_ENFORCED = QName.createQName(NAMESPACE, "child-non-enforced"); + public static final QName TEST_ASSOC_TARGET_NON_ENFORCED = QName.createQName(NAMESPACE, "target-non-enforced"); public static final QName TEST_ASPECT_WITH_PROPERTIES = QName.createQName(NAMESPACE, "aspectWithProperties"); public static final QName TEST_ASPECT_WITH_ASSOC = QName.createQName(NAMESPACE, "aspectWithAssoc"); @@ -483,4 +485,15 @@ public class IntegrityTest extends TestCase nodeService.removeAssociation(source1, target1, TEST_ASSOC_NODE_ONE_MANY); checkIntegrityNoFailure(); } + + /** + * Test for MNT-12367 + */ + public void testRelaxedMandatoryAssociation() throws Exception + { + assertEquals("Per-transaction override not correct", false, IntegrityChecker.isWarnInTransaction()); + // create node + NodeRef nodeRef = createNode("relaxedAssocNode", TEST_TYPE_WITH_NON_ENFORCED_TARGET_ASSOCS, null); + checkIntegrityNoFailure(); + } } diff --git a/source/test-resources/org/alfresco/repo/node/integrity/IntegrityTest_model.xml b/source/test-resources/org/alfresco/repo/node/integrity/IntegrityTest_model.xml index 508069ac7d..f15374347f 100644 --- a/source/test-resources/org/alfresco/repo/node/integrity/IntegrityTest_model.xml +++ b/source/test-resources/org/alfresco/repo/node/integrity/IntegrityTest_model.xml @@ -8,6 +8,7 @@ + @@ -154,6 +155,24 @@ + + + Type With Non Enforced Assocs + cm:content + + + + false + true + + + cm:content + true + false + + + +