You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2020/02/26 16:14:32 UTC
[syncope] 04/04: [SYNCOPE-1537] Linked account update using put
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
commit c56592e4c0d9787942475917fd3f544a8fe3a63d
Author: dima.ayash <di...@tirasa.net>
AuthorDate: Wed Feb 26 16:27:59 2020 +0100
[SYNCOPE-1537] Linked account update using put
---
.../apache/syncope/common/lib/AnyOperations.java | 1 -
.../org/apache/syncope/fit/AbstractITCase.java | 6 ++
.../syncope/fit/core/LinkedAccountITCase.java | 96 ++++++++++++++++++++++
3 files changed, 102 insertions(+), 1 deletion(-)
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
index 870027c..72e984c 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
@@ -359,7 +359,6 @@ public final class AnyOperations {
EntityTOUtils.buildLinkedAccountMap(original.getLinkedAccounts());
updatedAccounts.entrySet().stream().
- filter(entry -> (!originalAccounts.containsKey(entry.getKey()))).
forEachOrdered(entry -> {
result.getLinkedAccounts().add(new LinkedAccountPatch.Builder().
operation(PatchOperation.ADD_REPLACE).
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
index 35bfb76..1709427 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/AbstractITCase.java
@@ -469,6 +469,12 @@ public abstract class AbstractITCase {
});
}
+ protected ProvisioningResult<UserTO> updateUser(final UserTO userTO) {
+ return userService.update(userTO).
+ readEntity(new GenericType<ProvisioningResult<UserTO>>() {
+ });
+ }
+
protected ProvisioningResult<UserTO> deleteUser(final String key) {
return userService.delete(key).
readEntity(new GenericType<ProvisioningResult<UserTO>>() {
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java
index 829570f..42066e5 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java
@@ -152,6 +152,46 @@ public class LinkedAccountITCase extends AbstractITCase {
}
@Test
+ public void createWithLinkedAccountThenUpdateUsingPutThenRemove() throws NamingException {
+ // 1. create user with linked account
+ UserTO user = UserITCase.getSampleTO(
+ "linkedAccount" + RandomStringUtils.randomNumeric(5) + "@syncope.apache.org");
+ String connObjectKeyValue = "uid=" + user.getUsername() + ",ou=People,o=isp";
+ String privilege = applicationService.read("mightyApp").getPrivileges().get(0).getKey();
+
+ LinkedAccountTO account = new LinkedAccountTO.Builder(RESOURCE_NAME_LDAP, connObjectKeyValue).build();
+ account.setUsername("LinkedUsername");
+ account.getPlainAttrs().add(attrTO("surname", "LINKED_SURNAME"));
+ account.getPrivileges().add(privilege);
+ user.getLinkedAccounts().add(account);
+
+ user = createUser(user).getEntity();
+ assertNotNull(user.getKey());
+ assertEquals(1, user.getLinkedAccounts().size());
+ assertEquals(privilege, user.getLinkedAccounts().get(0).getPrivileges().iterator().next());
+ assertEquals("LinkedUsername", user.getLinkedAccounts().get(0).getUsername());
+ assertEquals("LINKED_SURNAME", account.getPlainAttr("surname").get().getValues().get(0));
+
+ // 2. update linked account
+ account.getPlainAttrs().clear();
+ account.setUsername("LinkedUsernameUpdated");
+ account.getPlainAttrs().add(attrTO("email", "UPDATED_EMAIL@syncope.apache.org"));
+ account.getPlainAttrs().add(attrTO("surname", "UPDATED_SURNAME"));
+ user.getLinkedAccounts().clear();
+ user.getLinkedAccounts().add(account);
+
+ user = updateUser(user).getEntity();
+ assertEquals(1, user.getLinkedAccounts().size());
+ assertEquals("LinkedUsernameUpdated", user.getLinkedAccounts().get(0).getUsername());
+ assertEquals("UPDATED_SURNAME", account.getPlainAttr("surname").get().getValues().get(0));
+
+ // 3. remove linked account from user
+ user.getLinkedAccounts().clear();
+ user = updateUser(user).getEntity();
+ assertTrue(user.getLinkedAccounts().isEmpty());
+ }
+
+ @Test
public void createWithoutLinkedAccountThenAdd() throws NamingException {
// 1. create user without linked account
UserTO user = UserITCase.getSampleTO(
@@ -198,6 +238,62 @@ public class LinkedAccountITCase extends AbstractITCase {
}
@Test
+ public void createWithoutLinkedAccountThenAddAndUpdatePassword() throws NamingException {
+ // 1. set the return value parameter to true
+ configurationService.set(new AttrTO.Builder().schema("return.password.value").value("true").build());
+
+ // 2. create user without linked account
+ UserTO user = UserITCase.getSampleTO(
+ "linkedAccount" + RandomStringUtils.randomNumeric(5) + "@syncope.apache.org");
+ String connObjectKeyValue = "uid=" + user.getUsername() + ",ou=People,o=isp";
+
+ user = createUser(user).getEntity();
+ assertNotNull(user.getKey());
+ assertTrue(user.getLinkedAccounts().isEmpty());
+
+ // 3. add linked account to user without password
+ UserPatch userPatch = new UserPatch();
+ userPatch.setKey(user.getKey());
+
+ LinkedAccountTO account = new LinkedAccountTO.Builder(RESOURCE_NAME_LDAP, connObjectKeyValue).build();
+ userPatch.getLinkedAccounts().add(new LinkedAccountPatch.Builder().linkedAccountTO(account).build());
+
+ user = updateUser(userPatch).getEntity();
+ assertEquals(1, user.getLinkedAccounts().size());
+ assertNull(user.getLinkedAccounts().get(0).getPassword());
+
+ // 4. update linked account with adding a password
+ account.setPassword("Password123");
+ userPatch = new UserPatch();
+ userPatch.setKey(user.getKey());
+ userPatch.getLinkedAccounts().add(new LinkedAccountPatch.Builder().linkedAccountTO(account).build());
+ user = updateUser(userPatch).getEntity();
+ assertNotNull(user.getLinkedAccounts().get(0).getPassword());
+
+ // 5. update linked account password
+ String beforeUpdatePassword = user.getLinkedAccounts().get(0).getPassword();
+ account.setPassword("Password123Updated");
+ userPatch = new UserPatch();
+ userPatch.setKey(user.getKey());
+
+ userPatch.getLinkedAccounts().add(new LinkedAccountPatch.Builder().linkedAccountTO(account).build());
+ user = updateUser(userPatch).getEntity();
+ assertNotNull(user.getLinkedAccounts().get(0).getPassword());
+ assertNotEquals(beforeUpdatePassword, user.getLinkedAccounts().get(0).getPassword());
+
+ // 6. set linked account password to null
+ account.setPassword(null);
+ userPatch = new UserPatch();
+ userPatch.setKey(user.getKey());
+
+ userPatch.getLinkedAccounts().add(new LinkedAccountPatch.Builder().linkedAccountTO(account).build());
+ user = updateUser(userPatch).getEntity();
+ assertNull(user.getLinkedAccounts().get(0).getPassword());
+
+ configurationService.set(new AttrTO.Builder().schema("return.password.value").value("false").build());
+ }
+
+ @Test
public void push() {
// 0a. read configured cipher algorithm in order to be able to restore it at the end of test
AttrTO pwdCipherAlgo = configurationService.get("password.cipher.algorithm");