diff --git a/icf-connectors/dummy-connector/src/main/java/com/evolveum/icf/dummy/connector/DummyConnector.java b/icf-connectors/dummy-connector/src/main/java/com/evolveum/icf/dummy/connector/DummyConnector.java index bfebafdf9a5..3c187817fc1 100644 --- a/icf-connectors/dummy-connector/src/main/java/com/evolveum/icf/dummy/connector/DummyConnector.java +++ b/icf-connectors/dummy-connector/src/main/java/com/evolveum/icf/dummy/connector/DummyConnector.java @@ -338,7 +338,7 @@ public Uid update(ObjectClass objectClass, Uid uid, Set replaceAttrib account.setValidTo(getDate(attr)); } else if (attr.is(OperationalAttributes.LOCK_OUT_NAME)) { - account.setLockout(getBoolean(attr)); + account.setLockout(getBooleanNotNull(attr)); } else if (PredefinedAttributes.AUXILIARY_OBJECT_CLASS_NAME.equalsIgnoreCase(attr.getName())) { account.replaceAuxiliaryObjectClassNames(attr.getValue()); @@ -385,7 +385,7 @@ public Uid update(ObjectClass objectClass, Uid uid, Set replaceAttrib throw new IllegalArgumentException("Attempt to change password on group"); } else if (attr.is(OperationalAttributes.ENABLE_NAME)) { - group.setEnabled(getBoolean(attr)); + group.setEnabled(getBooleanNotNull(attr)); } else { String name = attr.getName(); @@ -1691,7 +1691,7 @@ private DummyAccount convertToAccount(Set createAttributes) throws Co } } else if (attr.is(OperationalAttributeInfos.LOCK_OUT.getName())) { - Boolean lockout = getBoolean(attr); + Boolean lockout = getBooleanNotNull(attr); newAccount.setLockout(lockout); } else { @@ -1733,7 +1733,7 @@ private DummyGroup convertToGroup(Set createAttributes) throws Connec throw new IllegalArgumentException("Password specified for a group"); } else if (attr.is(OperationalAttributeInfos.ENABLE.getName())) { - enabled = getBoolean(attr); + enabled = getBooleanNotNull(attr); newGroup.setEnabled(enabled); } else if (attr.is(OperationalAttributeInfos.ENABLE_DATE.getName())) { @@ -1829,7 +1829,18 @@ private DummyOrg convertToOrg(Set createAttributes) throws ConnectExc return newOrg; } - private boolean getBoolean(Attribute attr) { + private Boolean getBoolean(Attribute attr) { + if (attr.getValue() == null || attr.getValue().isEmpty()) { + return null; + } + Object object = attr.getValue().get(0); + if (!(object instanceof Boolean)) { + throw new IllegalArgumentException("Attribute "+attr.getName()+" was provided as "+object.getClass().getName()+" while expecting boolean"); + } + return ((Boolean)object).booleanValue(); + } + + private boolean getBooleanNotNull(Attribute attr) { if (attr.getValue() == null || attr.getValue().isEmpty()) { throw new IllegalArgumentException("Empty "+attr.getName()+" attribute was provided"); } diff --git a/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyObject.java b/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyObject.java index 81aa750c550..d29a58f21af 100644 --- a/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyObject.java +++ b/icf-connectors/dummy-resource/src/main/java/com/evolveum/icf/dummy/resource/DummyObject.java @@ -44,7 +44,7 @@ public abstract class DummyObject implements DebugDumpable { // private int internalId = -1; private String name; private Map> attributes = new HashMap>(); - private boolean enabled = true; + private Boolean enabled = true; private Date validFrom = null; private Date validTo = null; protected DummyResource resource; @@ -84,11 +84,11 @@ public void setName(String username) { this.name = username; } - public boolean isEnabled() { + public Boolean isEnabled() { return enabled; } - public void setEnabled(boolean enabled) throws ConnectException, FileNotFoundException, SchemaViolationException { + public void setEnabled(Boolean enabled) throws ConnectException, FileNotFoundException, SchemaViolationException { checkModifyBreak(); this.enabled = enabled; } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensUtil.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensUtil.java index c44d9264c29..56325feba72 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensUtil.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensUtil.java @@ -514,7 +514,7 @@ private static Collection createActivationTimestampDelta(ActivationStatusType status, XMLGregorianCalendar now, PrismContainerDefinition activationDefinition, OriginType origin) { QName timestampPropertyName; - if (status == ActivationStatusType.ENABLED) { + if (status == null || status == ActivationStatusType.ENABLED) { timestampPropertyName = ActivationType.F_ENABLE_TIMESTAMP; } else if (status == ActivationStatusType.DISABLED) { timestampPropertyName = ActivationType.F_DISABLE_TIMESTAMP; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/MappingEvaluator.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/MappingEvaluator.java index 0cd377b8a34..668f1f17d30 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/MappingEvaluator.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/MappingEvaluator.java @@ -183,6 +183,10 @@ public mappingOutputTriple = mapping.getOutputTriple(); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Output triple of mapping {}\n{}", mapping.getContextDescription(), + mappingOutputTriple==null?null:mappingOutputTriple.debugDump(1)); + } if (mappingOutputTriple != null) { MappingOutputStruct mappingOutputStruct = outputTripleMap.get(mappingOutputPath); @@ -279,6 +283,13 @@ public nonNegativeValues = outputTriple.getNonNegativeValues(); @@ -304,6 +315,12 @@ public userJack = getUser(USER_JACK_OID); + display("User after change execution", userJack); + assertUserJack(userJack, "Jack Sparrow"); + + assertAdministrativeStatus(userJack, null); + assertValidity(userJack, null); + assertEffectiveStatus(userJack, ActivationStatusType.ENABLED); + + TestUtil.assertModifyTimestamp(userJack, start, end); + } + + @Test + public void test055ModifyUserJackEnable() throws Exception { + final String TEST_NAME = "test055ModifyUserJackEnable"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN @@ -460,10 +495,10 @@ public void test114ModifyUserJackEnable() throws Exception { PrismObject userJack = getUser(USER_JACK_OID); display("User after change execution", userJack); - assertUserJack(userJack, "Jack Sparrow"); + assertUserJack(userJack, USER_JACK_FULL_NAME); assertAdministrativeStatusEnabled(userJack); - assertDummyEnabled("jack"); + assertDummyEnabled(ACCOUNT_JACK_DUMMY_USERNAME); assertEnableTimestampFocus(userJack, startTime, endTime); assertAccounts(USER_JACK_OID, 1); @@ -473,13 +508,53 @@ public void test114ModifyUserJackEnable() throws Exception { assertEnableTimestampShadow(account, startTime, endTime); } + /** + * Re-enabling the user should enable the account as well. Even if the user is already enabled. + */ + @Test + public void test115ModifyUserJackAdministrativeStatusNull() throws Exception { + final String TEST_NAME = "test115ModifyUserJackAdministrativeStatusNull"; + TestUtil.displayTestTile(this, TEST_NAME); + + // GIVEN + Task task = taskManager.createTaskInstance(TestActivation.class.getName() + "." + TEST_NAME); + OperationResult result = task.getResult(); + assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL); + XMLGregorianCalendar startTime = clock.currentTimeXMLGregorianCalendar(); + + // WHEN + modifyUserReplace(USER_JACK_OID, ACTIVATION_ADMINISTRATIVE_STATUS_PATH, task, result); + + // THEN + result.computeStatus(); + TestUtil.assertSuccess("executeChanges result", result); + XMLGregorianCalendar endTime = clock.currentTimeXMLGregorianCalendar(); + + PrismObject userJack = getUser(USER_JACK_OID); + display("User after change execution", userJack); + DummyAccount account = getDummyAccount(null, ACCOUNT_JACK_DUMMY_USERNAME); + display("Account after change", account); + + assertUserJack(userJack, USER_JACK_FULL_NAME); + + assertAdministrativeStatus(userJack, null); + // Dummy account should still be enabled. It does not support validity, therefore + // the account/administrativeStatus is mapped from user.effectiveStatus + assertDummyActivationEnabledState(ACCOUNT_JACK_DUMMY_USERNAME, true); + + assertAccounts(USER_JACK_OID, 1); + PrismObject shadow = getShadowModel(accountOid); + assertAccountShadowModel(shadow, accountOid, ACCOUNT_JACK_DUMMY_USERNAME, resourceDummyType); + assertAdministrativeStatus(shadow, ActivationStatusType.ENABLED); + } + /** * Modify both user and account activation. As password outbound mapping is weak the user should have its own state * and account should have its own state. */ @Test - public void test115ModifyJackActivationUserAndAccount() throws Exception { - final String TEST_NAME = "test115ModifyJackActivationUserAndAccount"; + public void test118ModifyJackActivationUserAndAccount() throws Exception { + final String TEST_NAME = "test118ModifyJackActivationUserAndAccount"; TestUtil.displayTestTile(this, TEST_NAME); // GIVEN @@ -1549,6 +1624,74 @@ public void test350AssignMancombBlueAccount() throws Exception { assertEquals("Wrong validTo in mancomb blue account", ACCOUNT_MANCOMB_VALID_TO_DATE, mancombBlueAccount.getValidTo()); } + @Test + public void test352AssignMancombBlackAccount() throws Exception { + final String TEST_NAME = "test352AssignMancombBlackAccount"; + TestUtil.displayTestTile(this, TEST_NAME); + + // GIVEN + Task task = taskManager.createTaskInstance(TestModelServiceContract.class.getName() + "." + TEST_NAME); + OperationResult result = task.getResult(); + + // WHEN + assignAccount(userMancombOid, RESOURCE_DUMMY_BLACK_OID, null, task, result); + + // THEN + result.computeStatus(); + TestUtil.assertSuccess(result); + + PrismObject userMancomb = getUser(userMancombOid); + display("User after change execution", userMancomb); + assertAccounts(userMancombOid, 3); + + DummyAccount mancombBlueAccount = getDummyAccount(RESOURCE_DUMMY_BLUE_NAME, ACCOUNT_MANCOMB_DUMMY_USERNAME); + assertNotNull("No mancomb blue account", mancombBlueAccount); + assertTrue("mancomb blue account not enabled", mancombBlueAccount.isEnabled()); + assertEquals("Wrong validFrom in mancomb blue account", ACCOUNT_MANCOMB_VALID_FROM_DATE, mancombBlueAccount.getValidFrom()); + assertEquals("Wrong validTo in mancomb blue account", ACCOUNT_MANCOMB_VALID_TO_DATE, mancombBlueAccount.getValidTo()); + + DummyAccount mancombBlackAccount = getDummyAccount(RESOURCE_DUMMY_BLACK_NAME, ACCOUNT_MANCOMB_DUMMY_USERNAME); + assertNotNull("No mancomb black account", mancombBlackAccount); + assertTrue("mancomb black account not enabled", mancombBlackAccount.isEnabled()); + assertEquals("Wrong validFrom in mancomb black account", ACCOUNT_MANCOMB_VALID_FROM_DATE, mancombBlackAccount.getValidFrom()); + assertEquals("Wrong validTo in mancomb black account", ACCOUNT_MANCOMB_VALID_TO_DATE, mancombBlackAccount.getValidTo()); + } + + @Test + public void test355MancombModifyAdministrativeStatusNull() throws Exception { + final String TEST_NAME = "test355MancombModifyAdministrativeStatusNull"; + TestUtil.displayTestTile(this, TEST_NAME); + + // GIVEN + Task task = taskManager.createTaskInstance(TestModelServiceContract.class.getName() + "." + TEST_NAME); + OperationResult result = task.getResult(); + + // WHEN + modifyUserReplace(userMancombOid, ACTIVATION_ADMINISTRATIVE_STATUS_PATH, task, result); + + // THEN + result.computeStatus(); + TestUtil.assertSuccess(result); + + PrismObject userMancomb = getUser(userMancombOid); + display("User after change execution", userMancomb); + assertAccounts(userMancombOid, 3); + + DummyAccount mancombBlueAccount = getDummyAccount(RESOURCE_DUMMY_BLUE_NAME, ACCOUNT_MANCOMB_DUMMY_USERNAME); + assertNotNull("No mancomb blue account", mancombBlueAccount); + // Blue resouce has only weak administrativeStatus mapping. The values is not reset to null. + // This does not work now: MID-3418 +// assertEquals("Wring mancomb blue account enabled flag", Boolean.TRUE, mancombBlueAccount.isEnabled()); + assertEquals("Wrong validFrom in mancomb blue account", ACCOUNT_MANCOMB_VALID_FROM_DATE, mancombBlueAccount.getValidFrom()); + assertEquals("Wrong validTo in mancomb blue account", ACCOUNT_MANCOMB_VALID_TO_DATE, mancombBlueAccount.getValidTo()); + + DummyAccount mancombBlackAccount = getDummyAccount(RESOURCE_DUMMY_BLACK_NAME, ACCOUNT_MANCOMB_DUMMY_USERNAME); + assertNotNull("No mancomb black account", mancombBlackAccount); + assertEquals("Wring mancomb black account enabled flag", null, mancombBlackAccount.isEnabled()); + assertEquals("Wrong validFrom in mancomb black account", ACCOUNT_MANCOMB_VALID_FROM_DATE, mancombBlackAccount.getValidFrom()); + assertEquals("Wrong validTo in mancomb black account", ACCOUNT_MANCOMB_VALID_TO_DATE, mancombBlackAccount.getValidTo()); + } + @Test public void test400AddHerman() throws Exception { final String TEST_NAME = "test400AddHerman"; @@ -1890,11 +2033,11 @@ public void test610EnableUser1() throws Exception { // TODO check real state of the account and shadow } - private void assertDummyActivationEnabledState(String userId, boolean expectedEnabled) throws SchemaViolationException { + private void assertDummyActivationEnabledState(String userId, Boolean expectedEnabled) throws SchemaViolationException { assertDummyActivationEnabledState(null, userId, expectedEnabled); } - private void assertDummyActivationEnabledState(String instance, String userId, boolean expectedEnabled) throws SchemaViolationException { + private void assertDummyActivationEnabledState(String instance, String userId, Boolean expectedEnabled) throws SchemaViolationException { DummyAccount account = getDummyAccount(instance, userId); assertNotNull("No dummy account "+userId, account); assertEquals("Wrong enabled flag in dummy '"+instance+"' account "+userId, expectedEnabled, account.isEnabled()); diff --git a/model/model-intest/src/test/resources/activation/resource-dummy-khaki.xml b/model/model-intest/src/test/resources/activation/resource-dummy-khaki.xml index 01a39466a92..a8bdbce514e 100644 --- a/model/model-intest/src/test/resources/activation/resource-dummy-khaki.xml +++ b/model/model-intest/src/test/resources/activation/resource-dummy-khaki.xml @@ -47,7 +47,7 @@ xmlns:icfc="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/connector-schema-3"> - khaki + khaki false false diff --git a/model/model-intest/src/test/resources/common/resource-dummy-black.xml b/model/model-intest/src/test/resources/common/resource-dummy-black.xml index acf30610647..47b062b88a3 100644 --- a/model/model-intest/src/test/resources/common/resource-dummy-black.xml +++ b/model/model-intest/src/test/resources/common/resource-dummy-black.xml @@ -47,7 +47,7 @@ black - black + true true @@ -151,7 +151,6 @@ - weak @@ -159,7 +158,6 @@ - weak @@ -167,7 +165,6 @@ - weak diff --git a/model/model-intest/src/test/resources/logback-test.xml b/model/model-intest/src/test/resources/logback-test.xml index 231adb4dba4..2f09a617f43 100644 --- a/model/model-intest/src/test/resources/logback-test.xml +++ b/model/model-intest/src/test/resources/logback-test.xml @@ -54,12 +54,13 @@ - + - + + @@ -74,7 +75,7 @@ - + diff --git a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java index 2889e631ec1..3c75beacb9a 100644 --- a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java +++ b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java @@ -2555,7 +2555,7 @@ protected void assertDefaultDummyAccount(String username, String fullname, boole assertDummyAccount(null, username, fullname, active); } - protected DummyAccount assertDummyAccount(String dummyInstanceName, String username, String fullname, boolean active) throws SchemaViolationException { + protected DummyAccount assertDummyAccount(String dummyInstanceName, String username, String fullname, Boolean active) throws SchemaViolationException { DummyAccount account = getDummyAccount(dummyInstanceName, username); assertNotNull("No dummy("+dummyInstanceName+") account for username "+username, account); assertEquals("Wrong fullname for dummy("+dummyInstanceName+") account "+username, fullname, account.getAttributeValue("fullname")); @@ -2578,7 +2578,7 @@ protected void assertNoDummyAccountById(String dummyInstanceName, String id) thr assertNull("Dummy(" + dummyInstanceName + ") account for id " + id + " exists while not expecting it", account); } - protected void assertDummyAccountActivation(String dummyInstanceName, String username, boolean active) throws SchemaViolationException { + protected void assertDummyAccountActivation(String dummyInstanceName, String username, Boolean active) throws SchemaViolationException { DummyAccount account = getDummyAccount(dummyInstanceName, username); assertNotNull("No dummy("+dummyInstanceName+") account for username "+username, account); assertEquals("Wrong activation for dummy(" + dummyInstanceName + ") account " + username, active, account.isEnabled()); @@ -2661,7 +2661,7 @@ protected void assertDummyGroup(String dummyInstanceName, String groupname, Stri assertEquals("Wrong fullname for dummy(" + dummyInstanceName + ") group " + groupname, description, group.getAttributeValue(DummyResourceContoller.DUMMY_GROUP_ATTRIBUTE_DESCRIPTION)); if (active != null) { - assertEquals("Wrong activation for dummy("+dummyInstanceName+") group "+groupname, (boolean)active, group.isEnabled()); + assertEquals("Wrong activation for dummy("+dummyInstanceName+") group "+groupname, active, group.isEnabled()); } } diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/ConnectorInstanceIcfImpl.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/ConnectorInstanceIcfImpl.java index 3f8bb297a1a..5f2edc36aa1 100644 --- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/ConnectorInstanceIcfImpl.java +++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/ConnectorInstanceIcfImpl.java @@ -1998,7 +1998,7 @@ private String dumpAttributes(Set attributes) { StringBuilder sb = new StringBuilder(); for (Attribute attr : attributes) { sb.append("\n"); - if (attr.getValue().isEmpty()) { + if (attr.getValue() == null || attr.getValue().isEmpty()) { sb.append(attr.getName()); sb.append(" (empty)"); } else { @@ -2697,9 +2697,11 @@ private void convertFromActivation(Set updateAttributes, for (PropertyDelta propDelta : activationDeltas) { if (propDelta.getElementName().equals(ActivationType.F_ADMINISTRATIVE_STATUS)) { ActivationStatusType status = getPropertyNewValue(propDelta, ActivationStatusType.class); - - // Not entirely correct, TODO: refactor later - updateAttributes.add(AttributeBuilder.build(OperationalAttributes.ENABLE_NAME, status == ActivationStatusType.ENABLED)); + if (status == null) { + updateAttributes.add(AttributeBuilder.build(OperationalAttributes.ENABLE_NAME)); + } else { + updateAttributes.add(AttributeBuilder.build(OperationalAttributes.ENABLE_NAME, status == ActivationStatusType.ENABLED)); + } } else if (propDelta.getElementName().equals(ActivationType.F_VALID_FROM)) { XMLGregorianCalendar xmlCal = getPropertyNewValue(propDelta, XMLGregorianCalendar.class);//propDelta.getPropertyNew().getValue(XMLGregorianCalendar.class).getValue(); updateAttributes.add(AttributeBuilder.build(OperationalAttributes.ENABLE_DATE_NAME, xmlCal != null ? XmlTypeConverter.toMillis(xmlCal) : null)); diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/IcfConvertor.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/IcfConvertor.java index 08f2fad5496..49644ac9834 100644 --- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/IcfConvertor.java +++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/IcfConvertor.java @@ -349,6 +349,9 @@ private T getSingleValue(Attribute icfAttr, Class type) throws SchemaExce throw new SchemaException("Expected single value for " + icfAttr.getName()); } Object val = convertValueFromIcf(values.get(0), null); + if (val == null) { + return null; + } if (type.isAssignableFrom(val.getClass())) { return (T) val; } else { @@ -357,7 +360,6 @@ private T getSingleValue(Attribute icfAttr, Class type) throws SchemaExce } } else { return null; -// throw new SchemaException("Empty value for " + icfAttr.getName()); } } diff --git a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/TestDummy.java b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/TestDummy.java index 6648d8b1ae9..915f657b072 100644 --- a/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/TestDummy.java +++ b/provisioning/provisioning-impl/src/test/java/com/evolveum/midpoint/provisioning/impl/dummy/TestDummy.java @@ -2209,10 +2209,12 @@ public void test152ActivationStatusUndefinedAccount() throws Exception { delta.checkConsistence(); // WHEN + TestUtil.displayWhen(TEST_NAME); provisioningService.modifyObject(ShadowType.class, delta.getOid(), delta.getModifications(), new OperationProvisioningScriptsType(), null, task, result); // THEN + TestUtil.displayThen(TEST_NAME); result.computeStatus(); display("modifyObject result", result); TestUtil.assertSuccess(result); @@ -2220,7 +2222,8 @@ public void test152ActivationStatusUndefinedAccount() throws Exception { delta.checkConsistence(); // check if activation was changed dummyAccount = getDummyAccountAssert(transformNameFromResource(ACCOUNT_WILL_USERNAME), willIcfUid); - assertFalse("Dummy account "+transformNameFromResource(ACCOUNT_WILL_USERNAME)+" is enabled, expected disabled", dummyAccount.isEnabled()); + assertEquals("Wrong dummy account "+transformNameFromResource(ACCOUNT_WILL_USERNAME)+" enabled flag", + null, dummyAccount.isEnabled()); syncServiceMock.assertNotifySuccessOnly(); @@ -2242,7 +2245,7 @@ public void test154EnableAccount() throws Exception { display("Retrieved account shadow", accountType); DummyAccount dummyAccount = getDummyAccountAssert(transformNameFromResource(ACCOUNT_WILL_USERNAME), willIcfUid); - assertFalse("Account is not disabled", dummyAccount.isEnabled()); + assertEquals("Wrong dummy account enabled flag", null, dummyAccount.isEnabled()); syncServiceMock.reset();