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
+
+
+
+