http://git-wip-us.apache.org/repos/asf/syncope/blob/d30c8526/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/AttrTest.java ---------------------------------------------------------------------- diff --git a/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/AttrTest.java b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/AttrTest.java new file mode 100644 index 0000000..39e4cd2 --- /dev/null +++ b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/AttrTest.java @@ -0,0 +1,235 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.persistence.jpa.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.UnsupportedEncodingException; +import java.util.Arrays; +import java.util.Random; +import javax.validation.ValidationException; +import org.apache.syncope.common.lib.SyncopeConstants; +import org.apache.syncope.common.lib.types.AttributableType; +import org.apache.syncope.common.lib.types.EntityViolationType; +import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException; +import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO; +import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO; +import org.apache.syncope.core.persistence.api.dao.UserDAO; +import org.apache.syncope.core.persistence.api.entity.user.UPlainAttr; +import org.apache.syncope.core.persistence.api.entity.user.UPlainAttrUniqueValue; +import org.apache.syncope.core.persistence.api.entity.user.UPlainSchema; +import org.apache.syncope.core.persistence.api.entity.user.User; +import org.apache.syncope.core.persistence.jpa.AbstractTest; +import org.apache.syncope.core.misc.security.Encryptor; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.codec.Base64; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class AttrTest extends AbstractTest { + + @Autowired + private UserDAO userDAO; + + @Autowired + private PlainAttrDAO plainAttrDAO; + + @Autowired + private PlainSchemaDAO userSchemaDAO; + + @Test + public void findById() { + UPlainAttr attribute = plainAttrDAO.find(100L, UPlainAttr.class); + assertNotNull("did not find expected attribute schema", attribute); + attribute = plainAttrDAO.find(104L, UPlainAttr.class); + assertNotNull("did not find expected attribute schema", attribute); + } + + @Test + public void read() { + UPlainAttr attribute = plainAttrDAO.find(100L, UPlainAttr.class); + assertNotNull(attribute); + assertTrue(attribute.getValues().isEmpty()); + assertNotNull(attribute.getUniqueValue()); + } + + @Test + public void save() throws ClassNotFoundException { + User user = userDAO.find(1L); + + UPlainSchema emailSchema = userSchemaDAO.find("email", UPlainSchema.class); + assertNotNull(emailSchema); + + UPlainAttr attribute = entityFactory.newEntity(UPlainAttr.class); + attribute.setSchema(emailSchema); + attribute.setOwner(user); + + Exception thrown = null; + try { + attribute.addValue("[email protected]", attrUtilFactory.getInstance(AttributableType.USER)); + attribute.addValue("[email protected]", attrUtilFactory.getInstance(AttributableType.USER)); + } catch (ValidationException e) { + thrown = e; + } + assertNull("no validation exception expected here ", thrown); + + try { + attribute.addValue("http://www.apache.org", attrUtilFactory.getInstance(AttributableType.USER)); + } catch (ValidationException e) { + thrown = e; + } + assertNotNull("validation exception expected here ", thrown); + } + + @Test + public void saveWithEnum() throws ClassNotFoundException { + User user = userDAO.find(1L); + + UPlainSchema gender = userSchemaDAO.find("gender", UPlainSchema.class); + assertNotNull(gender); + assertNotNull(gender.getType()); + assertNotNull(gender.getEnumerationValues()); + + UPlainAttr attribute = entityFactory.newEntity(UPlainAttr.class); + attribute.setSchema(gender); + attribute.setOwner(user); + user.addPlainAttr(attribute); + + Exception thrown = null; + + try { + attribute.addValue("A", attrUtilFactory.getInstance(AttributableType.USER)); + } catch (ValidationException e) { + thrown = e; + } + assertNotNull("validation exception expected here ", thrown); + + attribute.addValue("M", attrUtilFactory.getInstance(AttributableType.USER)); + + InvalidEntityException iee = null; + try { + userDAO.save(user); + } catch (InvalidEntityException e) { + iee = e; + } + assertNull(iee); + } + + @Test + public void validateAndSave() { + User user = userDAO.find(1L); + + final UPlainSchema emailSchema = userSchemaDAO.find("email", UPlainSchema.class); + assertNotNull(emailSchema); + + final UPlainSchema fullnameSchema = userSchemaDAO.find("fullname", UPlainSchema.class); + assertNotNull(fullnameSchema); + + UPlainAttr attribute = entityFactory.newEntity(UPlainAttr.class); + attribute.setSchema(emailSchema); + + UPlainAttrUniqueValue uauv = entityFactory.newEntity(UPlainAttrUniqueValue.class); + uauv.setAttr(attribute); + uauv.setSchema(fullnameSchema); + uauv.setStringValue("a value"); + + attribute.setUniqueValue(uauv); + + user.addPlainAttr(attribute); + + InvalidEntityException iee = null; + try { + userDAO.save(user); + fail(); + } catch (InvalidEntityException e) { + iee = e; + } + assertNotNull(iee); + // for attribute + assertTrue(iee.hasViolation(EntityViolationType.InvalidValueList)); + // for uauv + assertTrue(iee.hasViolation(EntityViolationType.InvalidUPlainSchema)); + } + + @Test + public void saveWithEncrypted() throws Exception { + User user = userDAO.find(1L); + + final UPlainSchema obscureSchema = userSchemaDAO.find("obscure", UPlainSchema.class); + assertNotNull(obscureSchema); + assertNotNull(obscureSchema.getSecretKey()); + assertNotNull(obscureSchema.getCipherAlgorithm()); + + UPlainAttr attribute = entityFactory.newEntity(UPlainAttr.class); + attribute.setSchema(obscureSchema); + attribute.addValue("testvalue", attrUtilFactory.getInstance(AttributableType.USER)); + attribute.setOwner(user); + user.addPlainAttr(attribute); + + userDAO.save(user); + + UPlainAttr obscure = user.getPlainAttr("obscure"); + assertNotNull(obscure); + assertEquals(1, obscure.getValues().size()); + assertEquals(Encryptor.getInstance(obscureSchema.getSecretKey()). + encode("testvalue", obscureSchema.getCipherAlgorithm()), obscure.getValues().get(0).getStringValue()); + } + + @Test + public void saveWithBinary() throws UnsupportedEncodingException { + User user = userDAO.find(1L); + + final UPlainSchema photoSchema = userSchemaDAO.find("photo", UPlainSchema.class); + assertNotNull(photoSchema); + assertNotNull(photoSchema.getMimeType()); + + final byte[] bytes = new byte[20]; + new Random().nextBytes(bytes); + final String photoB64Value = new String(Base64.encode(bytes), SyncopeConstants.DEFAULT_ENCODING); + + UPlainAttr attribute = entityFactory.newEntity(UPlainAttr.class); + attribute.setSchema(photoSchema); + attribute.addValue(photoB64Value, attrUtilFactory.getInstance(AttributableType.USER)); + attribute.setOwner(user); + user.addPlainAttr(attribute); + + userDAO.save(user); + + UPlainAttr obscure = user.getPlainAttr("photo"); + assertNotNull(obscure); + assertEquals(1, obscure.getValues().size()); + assertTrue(Arrays.equals(bytes, obscure.getValues().get(0).getBinaryValue())); + } + + @Test + public void delete() { + UPlainAttr attribute = plainAttrDAO.find(104L, UPlainAttr.class); + String attrSchemaName = attribute.getSchema().getKey(); + + plainAttrDAO.delete(attribute.getKey(), UPlainAttr.class); + + UPlainSchema schema = userSchemaDAO.find(attrSchemaName, UPlainSchema.class); + assertNotNull("user attribute schema deleted when deleting values", schema); + } +}
http://git-wip-us.apache.org/repos/asf/syncope/blob/d30c8526/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/AttributableSearchTest.java ---------------------------------------------------------------------- diff --git a/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/AttributableSearchTest.java b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/AttributableSearchTest.java new file mode 100644 index 0000000..052143f --- /dev/null +++ b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/AttributableSearchTest.java @@ -0,0 +1,494 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.persistence.jpa.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.apache.syncope.common.lib.types.SubjectType; +import org.apache.syncope.core.persistence.api.RoleEntitlementUtil; +import org.apache.syncope.core.persistence.api.dao.EntitlementDAO; +import org.apache.syncope.core.persistence.api.dao.RoleDAO; +import org.apache.syncope.core.persistence.api.dao.SubjectSearchDAO; +import org.apache.syncope.core.persistence.api.dao.UserDAO; +import org.apache.syncope.core.persistence.api.dao.search.AttributeCond; +import org.apache.syncope.core.persistence.api.dao.search.MembershipCond; +import org.apache.syncope.core.persistence.api.dao.search.OrderByClause; +import org.apache.syncope.core.persistence.api.dao.search.ResourceCond; +import org.apache.syncope.core.persistence.api.dao.search.SearchCond; +import org.apache.syncope.core.persistence.api.dao.search.SubjectCond; +import org.apache.syncope.core.persistence.api.entity.role.Role; +import org.apache.syncope.core.persistence.api.entity.user.User; +import org.apache.syncope.core.persistence.jpa.AbstractTest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class AttributableSearchTest extends AbstractTest { + + @Autowired + private UserDAO userDAO; + + @Autowired + private RoleDAO roleDAO; + + @Autowired + private SubjectSearchDAO searchDAO; + + @Autowired + private EntitlementDAO entitlementDAO; + + @Test + public void userMatch() { + User user = userDAO.find(1L); + assertNotNull(user); + + MembershipCond membershipCond = new MembershipCond(); + membershipCond.setRoleId(5L); + + assertFalse(searchDAO.matches(user, SearchCond.getLeafCond(membershipCond), SubjectType.USER)); + + membershipCond.setRoleId(1L); + + assertTrue(searchDAO.matches(user, SearchCond.getLeafCond(membershipCond), SubjectType.USER)); + } + + @Test + public void roleMatch() { + Role role = roleDAO.find(1L); + assertNotNull(role); + + AttributeCond attrCond = new AttributeCond(); + attrCond.setSchema("show"); + attrCond.setType(AttributeCond.Type.ISNOTNULL); + + assertTrue(searchDAO.matches(role, SearchCond.getLeafCond(attrCond), SubjectType.ROLE)); + } + + @Test + public void searchWithLikeCondition() { + AttributeCond fullnameLeafCond = new AttributeCond(AttributeCond.Type.LIKE); + fullnameLeafCond.setSchema("fullname"); + fullnameLeafCond.setExpression("%o%"); + + MembershipCond membershipCond = new MembershipCond(); + membershipCond.setRoleId(1L); + + AttributeCond loginDateCond = new AttributeCond(AttributeCond.Type.EQ); + loginDateCond.setSchema("loginDate"); + loginDateCond.setExpression("2009-05-26"); + + SearchCond subCond = SearchCond.getAndCond(SearchCond.getLeafCond(fullnameLeafCond), SearchCond.getLeafCond( + membershipCond)); + + assertTrue(subCond.isValid()); + + SearchCond cond = SearchCond.getAndCond(subCond, SearchCond.getLeafCond(loginDateCond)); + + assertTrue(cond.isValid()); + + List<User> users = + searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), cond, SubjectType.USER); + assertNotNull(users); + assertEquals(1, users.size()); + } + + @Test + public void searchWithNotCondition() { + AttributeCond fullnameLeafCond = new AttributeCond(AttributeCond.Type.EQ); + fullnameLeafCond.setSchema("fullname"); + fullnameLeafCond.setExpression("Giuseppe Verdi"); + + SearchCond cond = SearchCond.getNotLeafCond(fullnameLeafCond); + assertTrue(cond.isValid()); + + List<User> users = + searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), cond, SubjectType.USER); + assertNotNull(users); + assertEquals(4, users.size()); + + Set<Long> ids = new HashSet<>(users.size()); + for (User user : users) { + ids.add(user.getKey()); + } + assertTrue(ids.contains(1L)); + assertTrue(ids.contains(3L)); + } + + @Test + public void searchByBoolean() { + AttributeCond coolLeafCond = new AttributeCond(AttributeCond.Type.EQ); + coolLeafCond.setSchema("cool"); + coolLeafCond.setExpression("true"); + + SearchCond cond = SearchCond.getLeafCond(coolLeafCond); + assertTrue(cond.isValid()); + + List<User> users = + searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), cond, SubjectType.USER); + assertNotNull(users); + assertEquals(1, users.size()); + + assertEquals(Long.valueOf(4L), users.get(0).getKey()); + } + + @Test + public void searchByPageAndSize() { + AttributeCond fullnameLeafCond = new AttributeCond(AttributeCond.Type.LIKE); + fullnameLeafCond.setSchema("fullname"); + fullnameLeafCond.setExpression("%o%"); + + MembershipCond membershipCond = new MembershipCond(); + membershipCond.setRoleId(1L); + + AttributeCond loginDateCond = new AttributeCond(AttributeCond.Type.EQ); + loginDateCond.setSchema("loginDate"); + loginDateCond.setExpression("2009-05-26"); + + SearchCond subCond = SearchCond.getAndCond(SearchCond.getLeafCond(fullnameLeafCond), SearchCond.getLeafCond( + membershipCond)); + + assertTrue(subCond.isValid()); + + SearchCond cond = SearchCond.getAndCond(subCond, SearchCond.getLeafCond(loginDateCond)); + + assertTrue(cond.isValid()); + + List<User> users = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + cond, 1, 2, Collections.<OrderByClause>emptyList(), + SubjectType.USER); + assertNotNull(users); + assertEquals(1, users.size()); + + users = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + cond, 2, 2, Collections.<OrderByClause>emptyList(), + SubjectType.USER); + assertNotNull(users); + assertTrue(users.isEmpty()); + } + + @Test + public void searchByMembership() { + MembershipCond membershipCond = new MembershipCond(); + membershipCond.setRoleId(1L); + + List<User> users = searchDAO.search( + RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), SearchCond.getLeafCond(membershipCond), + SubjectType.USER); + assertNotNull(users); + assertEquals(2, users.size()); + + membershipCond = new MembershipCond(); + membershipCond.setRoleId(5L); + + users = searchDAO.search( + RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), SearchCond.getNotLeafCond(membershipCond), + SubjectType.USER); + assertNotNull(users); + assertEquals(5, users.size()); + } + + @Test + public void searchByIsNull() { + AttributeCond coolLeafCond = new AttributeCond(AttributeCond.Type.ISNULL); + coolLeafCond.setSchema("cool"); + + List<User> users = searchDAO.search( + RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), SearchCond.getLeafCond(coolLeafCond), + SubjectType.USER); + assertNotNull(users); + assertEquals(4, users.size()); + + coolLeafCond = new AttributeCond(AttributeCond.Type.ISNOTNULL); + coolLeafCond.setSchema("cool"); + + users = searchDAO.search( + RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), SearchCond.getLeafCond(coolLeafCond), + SubjectType.USER); + assertNotNull(users); + assertEquals(1, users.size()); + } + + @Test + public void searchByResource() { + ResourceCond ws2 = new ResourceCond(); + ws2.setResourceName("ws-target-resource-2"); + + ResourceCond ws1 = new ResourceCond(); + ws1.setResourceName("ws-target-resource-list-mappings-2"); + + SearchCond searchCondition = SearchCond.getAndCond(SearchCond.getNotLeafCond(ws2), SearchCond.getLeafCond(ws1)); + + assertTrue(searchCondition.isValid()); + + List<User> users = searchDAO.search( + RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), searchCondition, + SubjectType.USER); + + assertNotNull(users); + assertEquals(1, users.size()); + } + + @Test + public void searchByBooleanSubjectCond() { + SubjectCond booleanCond = new SubjectCond(SubjectCond.Type.EQ); + booleanCond.setSchema("inheritPlainAttrs"); + booleanCond.setExpression("true"); + + SearchCond searchCondition = SearchCond.getLeafCond(booleanCond); + + List<Role> matchingRoles = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + searchCondition, SubjectType.ROLE); + assertNotNull(matchingRoles); + assertFalse(matchingRoles.isEmpty()); + } + + @Test + public void searchByUsernameAndKey() { + SubjectCond usernameLeafCond = new SubjectCond(SubjectCond.Type.LIKE); + usernameLeafCond.setSchema("username"); + usernameLeafCond.setExpression("%ini"); + + SubjectCond idRightCond = new SubjectCond(SubjectCond.Type.LT); + idRightCond.setSchema("key"); + idRightCond.setExpression("2"); + + SearchCond searchCondition = SearchCond.getAndCond(SearchCond.getLeafCond(usernameLeafCond), + SearchCond.getLeafCond(idRightCond)); + + List<User> matchingUsers = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + searchCondition, SubjectType.USER); + + assertNotNull(matchingUsers); + assertEquals(1, matchingUsers.size()); + assertEquals("rossini", matchingUsers.iterator().next().getUsername()); + assertEquals(1L, matchingUsers.iterator().next().getKey().longValue()); + } + + @Test + public void searchByRolenameAndKey() { + SubjectCond rolenameLeafCond = new SubjectCond(SubjectCond.Type.EQ); + rolenameLeafCond.setSchema("name"); + rolenameLeafCond.setExpression("root"); + + SubjectCond idRightCond = new SubjectCond(SubjectCond.Type.LT); + idRightCond.setSchema("key"); + idRightCond.setExpression("2"); + + SearchCond searchCondition = SearchCond.getAndCond(SearchCond.getLeafCond(rolenameLeafCond), + SearchCond.getLeafCond(idRightCond)); + + assertTrue(searchCondition.isValid()); + + List<Role> matchingRoles = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + searchCondition, SubjectType.ROLE); + + assertNotNull(matchingRoles); + assertEquals(1, matchingRoles.size()); + assertEquals("root", matchingRoles.iterator().next().getName()); + assertEquals(1L, matchingRoles.iterator().next().getKey().longValue()); + } + + @Test + public void searchByUsernameAndFullname() { + SubjectCond usernameLeafCond = new SubjectCond(SubjectCond.Type.EQ); + usernameLeafCond.setSchema("username"); + usernameLeafCond.setExpression("rossini"); + + AttributeCond idRightCond = new AttributeCond(AttributeCond.Type.LIKE); + idRightCond.setSchema("fullname"); + idRightCond.setExpression("Giuseppe V%"); + + SearchCond searchCondition = SearchCond.getOrCond(SearchCond.getLeafCond(usernameLeafCond), + SearchCond.getLeafCond(idRightCond)); + + List<User> matchingUsers = + searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), searchCondition, + SubjectType.USER); + + assertNotNull(matchingUsers); + assertEquals(2, matchingUsers.size()); + } + + @Test + public void searchById() { + SubjectCond idLeafCond = new SubjectCond(SubjectCond.Type.LT); + idLeafCond.setSchema("id"); + idLeafCond.setExpression("2"); + + SearchCond searchCondition = SearchCond.getLeafCond(idLeafCond); + assertTrue(searchCondition.isValid()); + + List<User> users = + searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), searchCondition, + SubjectType.USER); + + assertNotNull(users); + assertEquals(1, users.size()); + assertEquals(1L, users.iterator().next().getKey().longValue()); + + idLeafCond = new SubjectCond(SubjectCond.Type.LT); + idLeafCond.setSchema("id"); + idLeafCond.setExpression("4"); + + searchCondition = SearchCond.getNotLeafCond(idLeafCond); + assertTrue(searchCondition.isValid()); + + users = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), searchCondition, + SubjectType.USER); + + assertNotNull(users); + assertEquals(2, users.size()); + boolean found = false; + for (User user : users) { + if (user.getKey() == 4) { + found = true; + } + } + assertTrue(found); + } + + @Test + public void userOrderBy() { + SubjectCond usernameLeafCond = new SubjectCond(SubjectCond.Type.EQ); + usernameLeafCond.setSchema("username"); + usernameLeafCond.setExpression("rossini"); + AttributeCond idRightCond = new AttributeCond(AttributeCond.Type.LIKE); + idRightCond.setSchema("fullname"); + idRightCond.setExpression("Giuseppe V%"); + SearchCond searchCondition = SearchCond.getOrCond( + SearchCond.getLeafCond(usernameLeafCond), SearchCond.getLeafCond(idRightCond)); + + List<OrderByClause> orderByClauses = new ArrayList<OrderByClause>(); + OrderByClause orderByClause = new OrderByClause(); + orderByClause.setField("username"); + orderByClause.setDirection(OrderByClause.Direction.DESC); + orderByClauses.add(orderByClause); + orderByClause = new OrderByClause(); + orderByClause.setField("fullname"); + orderByClause.setDirection(OrderByClause.Direction.ASC); + orderByClauses.add(orderByClause); + + List<User> users = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + searchCondition, Collections.singletonList(orderByClause), + SubjectType.USER); + assertEquals(searchDAO.count(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + searchCondition, SubjectType.USER), + users.size()); + } + + @Test + public void roleOrderBy() { + SubjectCond idLeafCond = new SubjectCond(SubjectCond.Type.LIKE); + idLeafCond.setSchema("name"); + idLeafCond.setExpression("%r"); + SearchCond searchCondition = SearchCond.getLeafCond(idLeafCond); + assertTrue(searchCondition.isValid()); + + OrderByClause orderByClause = new OrderByClause(); + orderByClause.setField("name"); + + List<Role> roles = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + searchCondition, Collections.singletonList(orderByClause), SubjectType.ROLE); + assertEquals(searchDAO.count(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + searchCondition, SubjectType.ROLE), + roles.size()); + } + + @Test + public void issue202() { + ResourceCond ws2 = new ResourceCond(); + ws2.setResourceName("ws-target-resource-2"); + + ResourceCond ws1 = new ResourceCond(); + ws1.setResourceName("ws-target-resource-list-mappings-1"); + + SearchCond searchCondition = + SearchCond.getAndCond(SearchCond.getNotLeafCond(ws2), SearchCond.getNotLeafCond(ws1)); + assertTrue(searchCondition.isValid()); + + List<User> users = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + searchCondition, SubjectType.USER); + assertNotNull(users); + assertEquals(2, users.size()); + boolean found = false; + for (User user : users) { + if (user.getKey() == 4) { + found = true; + } + } + assertTrue(found); + } + + @Test + public void issue242() { + SubjectCond cond = new SubjectCond(AttributeCond.Type.LIKE); + cond.setSchema("id"); + cond.setExpression("test%"); + + SearchCond searchCondition = SearchCond.getLeafCond(cond); + assertTrue(searchCondition.isValid()); + + List<User> users = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + searchCondition, SubjectType.USER); + assertNotNull(users); + assertTrue(users.isEmpty()); + } + + @Test + public void issueSYNCOPE46() { + SubjectCond cond = new SubjectCond(AttributeCond.Type.LIKE); + cond.setSchema("username"); + cond.setExpression("%ossin%"); + + SearchCond searchCondition = SearchCond.getLeafCond(cond); + assertTrue(searchCondition.isValid()); + + List<User> users = searchDAO.search(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), + searchCondition, SubjectType.USER); + assertNotNull(users); + assertEquals(1, users.size()); + } + + @Test + public void issueSYNCOPE433() { + AttributeCond isNullCond = new AttributeCond(AttributeCond.Type.ISNULL); + isNullCond.setSchema("loginDate"); + + SubjectCond likeCond = new SubjectCond(AttributeCond.Type.LIKE); + likeCond.setSchema("username"); + likeCond.setExpression("%ossin%"); + + SearchCond searchCond = SearchCond.getOrCond( + SearchCond.getLeafCond(isNullCond), SearchCond.getLeafCond(likeCond)); + + Integer count = searchDAO.count(RoleEntitlementUtil.getRoleKeys(entitlementDAO.findAll()), searchCond, + SubjectType.USER); + assertNotNull(count); + assertTrue(count > 0); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/d30c8526/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ConfTest.java ---------------------------------------------------------------------- diff --git a/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ConfTest.java b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ConfTest.java new file mode 100644 index 0000000..e5e1ecc --- /dev/null +++ b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ConfTest.java @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.persistence.jpa.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import org.apache.syncope.common.lib.types.AttrSchemaType; +import org.apache.syncope.common.lib.types.AttributableType; +import org.apache.syncope.common.lib.types.EntityViolationType; +import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException; +import org.apache.syncope.core.persistence.api.dao.ConfDAO; +import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO; +import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr; +import org.apache.syncope.core.persistence.api.entity.conf.CPlainSchema; +import org.apache.syncope.core.persistence.jpa.AbstractTest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class ConfTest extends AbstractTest { + + @Autowired + private ConfDAO confDAO; + + @Autowired + private PlainSchemaDAO plainSchemaDAO; + + @Test + public void read() { + CPlainAttr conf = confDAO.find("selfRegistration.allowed"); + assertNotNull(conf); + assertTrue(conf.getValues().get(0).getBooleanValue()); + + conf = confDAO.find("authentication.statuses"); + assertNotNull(conf); + assertEquals(2, conf.getValues().size()); + + conf = confDAO.find("non.existing"); + assertNull(conf); + } + + @Test + public void setAndDelete() { + // 1. create CSChema + CPlainSchema useless = entityFactory.newEntity(CPlainSchema.class); + useless.setKey("useless"); + useless.setType(AttrSchemaType.Date); + useless.setConversionPattern("yyyy-MM-dd"); + useless = plainSchemaDAO.save(useless); + + // 2. create conf + CPlainAttr newConf = entityFactory.newEntity(CPlainAttr.class); + newConf.setSchema(useless); + newConf.addValue("2014-06-20", attrUtilFactory.getInstance(AttributableType.CONFIGURATION)); + confDAO.save(newConf); + + CPlainAttr actual = confDAO.find("useless"); + assertEquals(actual.getValuesAsStrings(), newConf.getValuesAsStrings()); + + // 3. update conf + newConf.getValues().clear(); + newConf.addValue("2014-06-20", attrUtilFactory.getInstance(AttributableType.CONFIGURATION)); + confDAO.save(newConf); + + actual = confDAO.find("useless"); + assertEquals(actual.getValuesAsStrings(), newConf.getValuesAsStrings()); + + // 4. delete conf + confDAO.delete("useless"); + assertNull(confDAO.find("useless")); + } + + @Test + public void issueSYNCOPE418() { + try { + CPlainSchema failing = entityFactory.newEntity(CPlainSchema.class); + failing.setKey("http://schemas.examples.org/security/authorization/organizationUnit"); + failing.setType(AttrSchemaType.String); + plainSchemaDAO.save(failing); + + fail(); + } catch (InvalidEntityException e) { + assertTrue(e.hasViolation(EntityViolationType.InvalidName)); + } + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/d30c8526/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ConnInstanceTest.java ---------------------------------------------------------------------- diff --git a/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ConnInstanceTest.java b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ConnInstanceTest.java new file mode 100644 index 0000000..03b7c5d --- /dev/null +++ b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ConnInstanceTest.java @@ -0,0 +1,145 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.persistence.jpa.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.apache.syncope.common.lib.types.ConnConfPropSchema; +import org.apache.syncope.common.lib.types.ConnConfProperty; +import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO; +import org.apache.syncope.core.persistence.api.entity.ConnInstance; +import org.apache.syncope.core.persistence.jpa.AbstractTest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class ConnInstanceTest extends AbstractTest { + + @Autowired + private ConnInstanceDAO connInstanceDAO; + + @Test + public void findAll() { + List<ConnInstance> connectors = connInstanceDAO.findAll(); + assertNotNull(connectors); + assertFalse(connectors.isEmpty()); + } + + @Test + public void findById() { + ConnInstance connectorInstance = connInstanceDAO.find(100L); + + assertNotNull("findById did not work", connectorInstance); + + assertEquals("invalid connector name", + "net.tirasa.connid.bundles.soap.WebServiceConnector", connectorInstance.getConnectorName()); + + assertEquals("invalid bundle name", "net.tirasa.connid.bundles.soap", connectorInstance.getBundleName()); + } + + @Test + public void save() throws ClassNotFoundException { + ConnInstance connInstance = entityFactory.newEntity(ConnInstance.class); + + connInstance.setLocation(new File(System.getProperty("java.io.tmpdir")).toURI().toString()); + + // set connector version + connInstance.setVersion("1.0"); + + // set connector name + connInstance.setConnectorName("WebService"); + + // set bundle name + connInstance.setBundleName("org.apache.syncope.core.persistence.test.util"); + + connInstance.setDisplayName("New"); + + connInstance.setConnRequestTimeout(60); + + // set the connector configuration using PropertyTO + Set<ConnConfProperty> conf = new HashSet<ConnConfProperty>(); + + ConnConfPropSchema endpointSchema = new ConnConfPropSchema(); + endpointSchema.setName("endpoint"); + endpointSchema.setType(String.class.getName()); + endpointSchema.setRequired(true); + ConnConfProperty endpoint = new ConnConfProperty(); + endpoint.setSchema(endpointSchema); + endpoint.getValues().add("http://host.domain"); + + ConnConfPropSchema servicenameSchema = new ConnConfPropSchema(); + servicenameSchema.setName("servicename"); + servicenameSchema.setType(String.class.getName()); + servicenameSchema.setRequired(true); + ConnConfProperty servicename = new ConnConfProperty(); + servicename.setSchema(servicenameSchema); + endpoint.getValues().add("Provisioning"); + + conf.add(endpoint); + conf.add(servicename); + + // set connector configuration + connInstance.setConfiguration(conf); + assertFalse(connInstance.getConfiguration().isEmpty()); + + // perform save operation + ConnInstance actual = connInstanceDAO.save(connInstance); + + assertNotNull("save did not work", actual.getKey()); + + assertTrue("save did not work", actual.getKey() > 100L); + + assertEquals("save did not work for \"name\" attribute", "WebService", actual.getConnectorName()); + + assertEquals("save did not work for \"bundle name\" attribute", "org.apache.syncope.core.persistence.test.util", + actual.getBundleName()); + + assertEquals("save did not work for \"majorVersion\" attribute", "1.0", connInstance.getVersion()); + + assertEquals("New", actual.getDisplayName()); + + assertEquals(new Integer(60), actual.getConnRequestTimeout()); + + conf = connInstance.getConfiguration(); + assertFalse(conf.isEmpty()); + + assertNotNull("configuration retrieving failed", conf); + assertTrue(conf.size() == 2); + } + + @Test + public void delete() { + ConnInstance connectorInstance = connInstanceDAO.find(100L); + assertNotNull("find to delete did not work", connectorInstance); + + connInstanceDAO.delete(connectorInstance.getKey()); + + ConnInstance actual = connInstanceDAO.find(100L); + assertNull("delete did not work", actual); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/d30c8526/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/DerAttrTest.java ---------------------------------------------------------------------- diff --git a/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/DerAttrTest.java b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/DerAttrTest.java new file mode 100644 index 0000000..b1c6c91 --- /dev/null +++ b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/DerAttrTest.java @@ -0,0 +1,272 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.persistence.jpa.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.List; +import org.apache.syncope.core.persistence.api.dao.DerAttrDAO; +import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO; +import org.apache.syncope.core.persistence.api.dao.MembershipDAO; +import org.apache.syncope.core.persistence.api.dao.RoleDAO; +import org.apache.syncope.core.persistence.api.dao.UserDAO; +import org.apache.syncope.core.persistence.api.entity.membership.MDerAttr; +import org.apache.syncope.core.persistence.api.entity.membership.MDerAttrTemplate; +import org.apache.syncope.core.persistence.api.entity.membership.MDerSchema; +import org.apache.syncope.core.persistence.api.entity.membership.MPlainAttrValue; +import org.apache.syncope.core.persistence.api.entity.membership.Membership; +import org.apache.syncope.core.persistence.api.entity.role.RDerAttr; +import org.apache.syncope.core.persistence.api.entity.role.RDerAttrTemplate; +import org.apache.syncope.core.persistence.api.entity.role.RDerSchema; +import org.apache.syncope.core.persistence.api.entity.role.RPlainAttrValue; +import org.apache.syncope.core.persistence.api.entity.role.Role; +import org.apache.syncope.core.persistence.api.entity.user.UDerAttr; +import org.apache.syncope.core.persistence.api.entity.user.UDerSchema; +import org.apache.syncope.core.persistence.api.entity.user.UPlainAttrValue; +import org.apache.syncope.core.persistence.api.entity.user.User; +import org.apache.syncope.core.persistence.jpa.AbstractTest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class DerAttrTest extends AbstractTest { + + @Autowired + private DerAttrDAO derAttrDAO; + + @Autowired + private UserDAO userDAO; + + @Autowired + private MembershipDAO membershipDAO; + + @Autowired + private RoleDAO roleDAO; + + @Autowired + private DerSchemaDAO derSchemaDAO; + + @Test + public void findAll() { + List<UDerAttr> list = derAttrDAO.findAll(UDerAttr.class); + assertEquals("did not get expected number of derived attributes ", 2, list.size()); + } + + @Test + public void findById() { + UDerAttr attribute = derAttrDAO.find(100L, UDerAttr.class); + assertNotNull("did not find expected attribute schema", attribute); + } + + @Test + public void saveUDerAttribute() { + UDerSchema cnSchema = derSchemaDAO.find("cn", UDerSchema.class); + assertNotNull(cnSchema); + + User owner = userDAO.find(3L); + assertNotNull("did not get expected user", owner); + + UDerAttr derAttr = entityFactory.newEntity(UDerAttr.class); + derAttr.setOwner(owner); + derAttr.setSchema(cnSchema); + + derAttr = derAttrDAO.save(derAttr); + + UDerAttr actual = derAttrDAO.find(derAttr.getKey(), UDerAttr.class); + assertNotNull("expected save to work", actual); + assertEquals(derAttr, actual); + + UPlainAttrValue firstname = owner.getPlainAttr("firstname").getValues().iterator().next(); + UPlainAttrValue surname = owner.getPlainAttr("surname").getValues().iterator().next(); + + assertEquals(surname.getValue() + ", " + firstname.getValue(), derAttr.getValue(owner.getPlainAttrs())); + } + + @Test + public void saveMDerAttribute() { + Membership owner = membershipDAO.find(1L); + assertNotNull("did not get expected user", owner); + + MDerAttr derAttr = entityFactory.newEntity(MDerAttr.class); + derAttr.setOwner(owner); + derAttr.setTemplate(owner.getRole().getAttrTemplate(MDerAttrTemplate.class, "mderiveddata")); + + derAttr = derAttrDAO.save(derAttr); + assertNotNull(derAttr.getTemplate()); + + MDerAttr actual = derAttrDAO.find(derAttr.getKey(), MDerAttr.class); + assertNotNull("expected save to work", actual); + assertEquals(derAttr, actual); + + MPlainAttrValue sx = owner.getPlainAttr("mderived_sx").getValues().iterator().next(); + MPlainAttrValue dx = owner.getPlainAttr("mderived_dx").getValues().iterator().next(); + + assertEquals(sx.getValue() + "-" + dx.getValue(), derAttr.getValue(owner.getPlainAttrs())); + } + + @Test + public void saveRDerAttribute() { + Role owner = roleDAO.find(1L); + assertNotNull("did not get expected user", owner); + + RDerAttr derAttr = entityFactory.newEntity(RDerAttr.class); + derAttr.setOwner(owner); + derAttr.setTemplate(owner.getAttrTemplate(RDerAttrTemplate.class, "rderiveddata")); + + derAttr = derAttrDAO.save(derAttr); + assertNotNull(derAttr.getTemplate()); + + RDerAttr actual = derAttrDAO.find(derAttr.getKey(), RDerAttr.class); + assertNotNull("expected save to work", actual); + assertEquals(derAttr, actual); + + RPlainAttrValue sx = owner.getPlainAttr("rderived_sx").getValues().iterator().next(); + RPlainAttrValue dx = owner.getPlainAttr("rderived_dx").getValues().iterator().next(); + + assertEquals(sx.getValue() + "-" + dx.getValue(), derAttr.getValue(owner.getPlainAttrs())); + } + + @Test + public void delete() { + UDerAttr attribute = derAttrDAO.find(100L, UDerAttr.class); + String attributeSchemaName = attribute.getSchema().getKey(); + + derAttrDAO.delete(attribute.getKey(), UDerAttr.class); + + UDerAttr actual = derAttrDAO.find(100L, UDerAttr.class); + assertNull("delete did not work", actual); + + UDerSchema attributeSchema = derSchemaDAO.find(attributeSchemaName, UDerSchema.class); + assertNotNull("user derived attribute schema deleted " + "when deleting values", attributeSchema); + } + + @Test + public void issueSYNCOPE134User() { + UDerSchema sderived = entityFactory.newEntity(UDerSchema.class); + sderived.setKey("sderived"); + sderived.setExpression("status + ' - ' + username + ' - ' + creationDate + '[' + failedLogins + ']'"); + + sderived = derSchemaDAO.save(sderived); + derSchemaDAO.flush(); + + UDerSchema actual = derSchemaDAO.find("sderived", UDerSchema.class); + assertNotNull("expected save to work", actual); + assertEquals(sderived, actual); + + User owner = userDAO.find(3L); + assertNotNull("did not get expected user", owner); + + UDerAttr derAttr = entityFactory.newEntity(UDerAttr.class); + derAttr.setOwner(owner); + derAttr.setSchema(sderived); + + derAttr = derAttrDAO.save(derAttr); + derAttrDAO.flush(); + + derAttr = derAttrDAO.find(derAttr.getKey(), UDerAttr.class); + assertNotNull("expected save to work", derAttr); + + String value = derAttr.getValue(owner.getPlainAttrs()); + assertNotNull(value); + assertFalse(value.isEmpty()); + assertTrue(value.startsWith("active - vivaldi - 2010-10-20")); + assertTrue(value.endsWith("[0]")); + } + + @Test + public void issueSYNCOPE134Role() { + RDerSchema sderived = entityFactory.newEntity(RDerSchema.class); + sderived.setKey("sderived"); + sderived.setExpression("name"); + + sderived = derSchemaDAO.save(sderived); + derSchemaDAO.flush(); + + RDerSchema actual = derSchemaDAO.find("sderived", RDerSchema.class); + assertNotNull("expected save to work", actual); + assertEquals(sderived, actual); + + Role owner = roleDAO.find(7L); + assertNotNull("did not get expected role", owner); + + RDerAttrTemplate template = entityFactory.newEntity(RDerAttrTemplate.class); + template.setSchema(sderived); + owner.getAttrTemplates(RDerAttrTemplate.class).add(template); + + RDerAttr derAttr = entityFactory.newEntity(RDerAttr.class); + derAttr.setOwner(owner); + derAttr.setTemplate(owner.getAttrTemplate(RDerAttrTemplate.class, sderived.getKey())); + + derAttr = derAttrDAO.save(derAttr); + assertNotNull(derAttr.getTemplate()); + derAttrDAO.flush(); + + derAttr = derAttrDAO.find(derAttr.getKey(), RDerAttr.class); + assertNotNull("expected save to work", derAttr); + + String value = derAttr.getValue(owner.getPlainAttrs()); + assertNotNull(value); + assertFalse(value.isEmpty()); + assertTrue(value.startsWith("managingDirector")); + } + + @Test + public void issueSYNCOPE134Memb() { + MDerSchema mderived = entityFactory.newEntity(MDerSchema.class); + mderived.setKey("mderived"); + mderived.setExpression("key"); + + mderived = derSchemaDAO.save(mderived); + derSchemaDAO.flush(); + + MDerSchema actual = derSchemaDAO.find("mderived", MDerSchema.class); + assertNotNull("expected save to work", actual); + assertEquals(mderived, actual); + + Membership owner = membershipDAO.find(4L); + assertNotNull("did not get expected membership", owner); + + MDerAttrTemplate template = entityFactory.newEntity(MDerAttrTemplate.class); + template.setSchema(mderived); + owner.getRole().getAttrTemplates(MDerAttrTemplate.class).add(template); + + derSchemaDAO.flush(); + + MDerAttr derAttr = entityFactory.newEntity(MDerAttr.class); + derAttr.setOwner(owner); + derAttr.setTemplate(owner.getRole().getAttrTemplate(MDerAttrTemplate.class, mderived.getKey())); + + derAttr = derAttrDAO.save(derAttr); + assertNotNull(derAttr.getTemplate()); + derAttrDAO.flush(); + + derAttr = derAttrDAO.find(derAttr.getKey(), MDerAttr.class); + assertNotNull("expected save to work", derAttr); + + String value = derAttr.getValue(owner.getPlainAttrs()); + assertNotNull(value); + assertFalse(value.isEmpty()); + assertTrue(value.equalsIgnoreCase("4")); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/d30c8526/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/DerSchemaTest.java ---------------------------------------------------------------------- diff --git a/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/DerSchemaTest.java b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/DerSchemaTest.java new file mode 100644 index 0000000..5a65f13 --- /dev/null +++ b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/DerSchemaTest.java @@ -0,0 +1,103 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.persistence.jpa.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.List; +import org.apache.syncope.common.lib.types.AttributableType; +import org.apache.syncope.common.lib.types.EntityViolationType; +import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException; +import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO; +import org.apache.syncope.core.persistence.api.entity.DerSchema; +import org.apache.syncope.core.persistence.api.entity.role.RDerSchema; +import org.apache.syncope.core.persistence.api.entity.user.UDerSchema; +import org.apache.syncope.core.persistence.jpa.AbstractTest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class DerSchemaTest extends AbstractTest { + + @Autowired + private DerSchemaDAO derSchemaDAO; + + @Test + public void findAll() { + List<UDerSchema> list = derSchemaDAO.findAll(UDerSchema.class); + assertEquals(3, list.size()); + } + + @Test + public void findByName() { + UDerSchema attributeSchema = derSchemaDAO.find("cn", UDerSchema.class); + assertNotNull("did not find expected derived attribute schema", attributeSchema); + } + + @Test + public void save() { + UDerSchema derivedAttributeSchema = entityFactory.newEntity(UDerSchema.class); + derivedAttributeSchema.setKey("cn2"); + derivedAttributeSchema.setExpression("firstname surname"); + + derSchemaDAO.save(derivedAttributeSchema); + + UDerSchema actual = derSchemaDAO.find("cn2", UDerSchema.class); + assertNotNull("expected save to work", actual); + assertEquals(derivedAttributeSchema, actual); + } + + @Test + public void delete() { + UDerSchema cn = derSchemaDAO.find("cn", UDerSchema.class); + assertNotNull(cn); + + derSchemaDAO.delete(cn.getKey(), attrUtilFactory.getInstance(AttributableType.USER)); + + DerSchema actual = derSchemaDAO.find("cn", UDerSchema.class); + assertNull("delete did not work", actual); + + // ------------- // + RDerSchema rderiveddata = derSchemaDAO.find("rderiveddata", RDerSchema.class); + assertNotNull(rderiveddata); + + derSchemaDAO.delete(rderiveddata.getKey(), attrUtilFactory.getInstance(AttributableType.ROLE)); + + actual = derSchemaDAO.find("rderiveddata", RDerSchema.class); + assertNull("delete did not work", actual); + } + + @Test + public void issueSYNCOPE418() { + UDerSchema schema = entityFactory.newEntity(UDerSchema.class); + schema.setKey("http://schemas.examples.org/security/authorization/organizationUnit"); + + try { + derSchemaDAO.save(schema); + fail(); + } catch (InvalidEntityException e) { + assertTrue(e.hasViolation(EntityViolationType.InvalidName)); + } + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/d30c8526/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/EntitlementTest.java ---------------------------------------------------------------------- diff --git a/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/EntitlementTest.java b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/EntitlementTest.java new file mode 100644 index 0000000..dd59873 --- /dev/null +++ b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/EntitlementTest.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.persistence.jpa.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.List; +import org.apache.syncope.core.persistence.api.dao.EntitlementDAO; +import org.apache.syncope.core.persistence.api.entity.Entitlement; +import org.apache.syncope.core.persistence.jpa.AbstractTest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class EntitlementTest extends AbstractTest { + + @Autowired + private EntitlementDAO entitlementDAO; + + @Test + public void findAll() { + List<Entitlement> list = entitlementDAO.findAll(); + assertEquals("did not get expected number of entitlements ", 86, list.size()); + } + + @Test + public void findByName() { + Entitlement entitlement = entitlementDAO.find("base"); + assertNotNull("did not find expected entitlement", entitlement); + } + + @Test + public void save() { + Entitlement entitlement = entityFactory.newEntity(Entitlement.class); + entitlement.setKey("another"); + + entitlementDAO.save(entitlement); + + Entitlement actual = entitlementDAO.find("another"); + assertNotNull("expected save to work", actual); + assertEquals(entitlement, actual); + } + + @Test + public void delete() { + Entitlement entitlement = entitlementDAO.find("base"); + assertNotNull("did not find expected entitlement", entitlement); + + entitlementDAO.delete("base"); + + assertNull(entitlementDAO.find("base")); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/d30c8526/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/MembershipTest.java ---------------------------------------------------------------------- diff --git a/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/MembershipTest.java b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/MembershipTest.java new file mode 100644 index 0000000..c5693c8 --- /dev/null +++ b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/MembershipTest.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.persistence.jpa.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.List; +import org.apache.syncope.core.persistence.api.dao.MembershipDAO; +import org.apache.syncope.core.persistence.api.dao.RoleDAO; +import org.apache.syncope.core.persistence.api.dao.UserDAO; +import org.apache.syncope.core.persistence.api.entity.membership.Membership; +import org.apache.syncope.core.persistence.api.entity.role.Role; +import org.apache.syncope.core.persistence.api.entity.user.User; +import org.apache.syncope.core.persistence.jpa.AbstractTest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class MembershipTest extends AbstractTest { + + @Autowired + private MembershipDAO membershipDAO; + + @Autowired + private UserDAO userDAO; + + @Autowired + private RoleDAO roleDAO; + + @Test + public void findAll() { + List<Membership> list = membershipDAO.findAll(); + assertEquals(7, list.size()); + } + + @Test + public void find() { + Membership membership = membershipDAO.find(1L); + assertNotNull("did not find expected membership", membership); + } + + @Test + public void save() { + User user = userDAO.find(4L); + Role role = roleDAO.find(1L); + + Membership membership = entityFactory.newEntity(Membership.class); + membership.setUser(user); + membership.setRole(role); + + membership = membershipDAO.save(membership); + + Membership actual = membershipDAO.find(membership.getKey()); + assertNotNull("expected save to work", actual); + } + + @Test + public void delete() { + Membership membership = membershipDAO.find(4L); + membershipDAO.delete(membership.getKey()); + + Membership actual = membershipDAO.find(4L); + assertNull("delete did not work", actual); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/d30c8526/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/NotificationTest.java ---------------------------------------------------------------------- diff --git a/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/NotificationTest.java b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/NotificationTest.java new file mode 100644 index 0000000..8da3c21 --- /dev/null +++ b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/NotificationTest.java @@ -0,0 +1,132 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.persistence.jpa.entity; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.List; +import org.apache.syncope.common.lib.types.IntMappingType; +import org.apache.syncope.core.persistence.api.dao.NotificationDAO; +import org.apache.syncope.core.persistence.api.entity.Notification; +import org.apache.syncope.core.persistence.jpa.AbstractTest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class NotificationTest extends AbstractTest { + + @Autowired + private NotificationDAO notificationDAO; + + @Test + public void find() { + Notification notification = notificationDAO.find(10L); + assertNotNull(notification); + assertNotNull(notification.getEvents()); + assertFalse(notification.getEvents().isEmpty()); + assertNotNull(notification.getUserAbout()); + assertNotNull(notification.getRecipients()); + + } + + @Test + public void findAll() { + List<Notification> notifications = notificationDAO.findAll(); + assertNotNull(notifications); + assertFalse(notifications.isEmpty()); + } + + @Test + public void save() { + Notification notification = entityFactory.newEntity(Notification.class); + notification.addEvent("save"); + + notification.setUserAbout("fake search condition"); + + notification.setRecipients("fake search condition"); + + notification.setRecipientAttrName("email"); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); + + notification.setSender("[email protected]"); + notification.setSubject("Test notification"); + notification.setTemplate("test"); + + Notification actual = notificationDAO.save(notification); + assertNotNull(actual); + assertNotNull(actual.getKey()); + } + + @Test + public void delete() { + notificationDAO.delete(10L); + assertNull(notificationDAO.find(10L)); + } + + @Test + public void issueSYNCOPE445() { + Notification notification = entityFactory.newEntity(Notification.class); + notification.addEvent("save"); + + notification.setUserAbout("fake search condition"); + + notification.setRecipients("fake search condition"); + + notification.setRecipientAttrName("email"); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); + + notification.addStaticRecipient("[email protected]"); + + notification.setSender("[email protected]"); + notification.setSubject("Test notification"); + notification.setTemplate("test"); + + Notification actual = notificationDAO.save(notification); + assertNotNull(actual); + assertNotNull(actual.getKey()); + assertNotNull(actual.getStaticRecipients()); + assertFalse(actual.getStaticRecipients().isEmpty()); + } + + @Test + public void issueSYNCOPE446() { + Notification notification = entityFactory.newEntity(Notification.class); + notification.addEvent("[REST]:[RoleController]:[]:[create]:[SUCCESS]"); + + notification.setRoleAbout("fake search condition"); + + notification.setRecipientAttrName("email"); + notification.setRecipientAttrType(IntMappingType.UserPlainSchema); + + notification.addStaticRecipient("[email protected]"); + + notification.setSender("[email protected]"); + notification.setSubject("Test notification"); + notification.setTemplate("test"); + + Notification actual = notificationDAO.save(notification); + assertNotNull(actual); + assertNotNull(actual.getKey()); + assertNotNull(actual.getStaticRecipients()); + assertFalse(actual.getStaticRecipients().isEmpty()); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/d30c8526/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/PlainSchemaTest.java ---------------------------------------------------------------------- diff --git a/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/PlainSchemaTest.java b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/PlainSchemaTest.java new file mode 100644 index 0000000..ece0825 --- /dev/null +++ b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/PlainSchemaTest.java @@ -0,0 +1,160 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.persistence.jpa.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.List; +import org.apache.syncope.common.lib.SyncopeConstants; +import org.apache.syncope.common.lib.types.AttrSchemaType; +import org.apache.syncope.common.lib.types.AttributableType; +import org.apache.syncope.common.lib.types.EntityViolationType; +import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException; +import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO; +import org.apache.syncope.core.persistence.api.entity.role.RPlainAttr; +import org.apache.syncope.core.persistence.api.entity.role.RPlainSchema; +import org.apache.syncope.core.persistence.api.entity.user.UPlainSchema; +import org.apache.syncope.core.persistence.jpa.AbstractTest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class PlainSchemaTest extends AbstractTest { + + @Autowired + private PlainSchemaDAO plainSchemaDAO; + + @Test + public void findAll() { + List<UPlainSchema> userList = plainSchemaDAO.findAll(UPlainSchema.class); + assertEquals(15, userList.size()); + + List<RPlainSchema> roleList = plainSchemaDAO.findAll(RPlainSchema.class); + assertEquals(5, roleList.size()); + } + + @Test + public void findByName() { + UPlainSchema schema = plainSchemaDAO.find("fullname", UPlainSchema.class); + assertNotNull("did not find expected attribute schema", schema); + } + + @Test + public void findAttrs() { + List<RPlainSchema> schemas = plainSchemaDAO.findAll(RPlainSchema.class); + assertNotNull(schemas); + assertFalse(schemas.isEmpty()); + + for (RPlainSchema schema : schemas) { + List<RPlainAttr> attrs = plainSchemaDAO.findAttrs(schema, RPlainAttr.class); + assertNotNull(attrs); + assertFalse(attrs.isEmpty()); + } + } + + @Test + public void save() { + UPlainSchema schema = entityFactory.newEntity(UPlainSchema.class); + schema.setKey("secondaryEmail"); + schema.setType(AttrSchemaType.String); + schema.setValidatorClass("org.apache.syncope.core.validation.EmailAddressValidator"); + schema.setMandatoryCondition("false"); + schema.setMultivalue(true); + + plainSchemaDAO.save(schema); + + UPlainSchema actual = plainSchemaDAO.find("secondaryEmail", UPlainSchema.class); + assertNotNull("expected save to work", actual); + assertEquals(schema, actual); + } + + @Test(expected = InvalidEntityException.class) + public void saveNonValid() { + UPlainSchema schema = entityFactory.newEntity(UPlainSchema.class); + schema.setKey("secondaryEmail"); + schema.setType(AttrSchemaType.String); + schema.setValidatorClass("org.apache.syncope.core.validation.EmailAddressValidator"); + schema.setMandatoryCondition("false"); + schema.setMultivalue(true); + schema.setUniqueConstraint(true); + + plainSchemaDAO.save(schema); + } + + @Test + public void checkForEnumType() { + RPlainSchema schema = entityFactory.newEntity(RPlainSchema.class); + schema.setType(AttrSchemaType.Enum); + schema.setKey("color"); + + Exception ex = null; + try { + plainSchemaDAO.save(schema); + } catch (Exception e) { + ex = e; + } + assertNotNull(ex); + + schema.setEnumerationValues("red" + SyncopeConstants.ENUM_VALUES_SEPARATOR + "yellow"); + schema.setEnumerationKeys("1" + SyncopeConstants.ENUM_VALUES_SEPARATOR + "2"); + + plainSchemaDAO.save(schema); + + RPlainSchema actual = plainSchemaDAO.find(schema.getKey(), RPlainSchema.class); + assertNotNull(actual); + assertNotNull(actual.getEnumerationKeys()); + assertFalse(actual.getEnumerationKeys().isEmpty()); + } + + @Test(expected = InvalidEntityException.class) + public void saveInvalidSchema() { + UPlainSchema schema = entityFactory.newEntity(UPlainSchema.class); + schema.setKey("username"); + plainSchemaDAO.save(schema); + } + + @Test + public void delete() { + UPlainSchema fullnam = plainSchemaDAO.find("fullname", UPlainSchema.class); + + plainSchemaDAO.delete(fullnam.getKey(), attrUtilFactory.getInstance(AttributableType.USER)); + + UPlainSchema actual = plainSchemaDAO.find("fullname", UPlainSchema.class); + assertNull("delete did not work", actual); + } + + @Test + public void issueSYNCOPE418() { + UPlainSchema schema = entityFactory.newEntity(UPlainSchema.class); + schema.setKey("http://schemas.examples.org/security/authorization/organizationUnit"); + + try { + plainSchemaDAO.save(schema); + fail(); + } catch (InvalidEntityException e) { + assertTrue(e.hasViolation(EntityViolationType.InvalidName)); + } + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/d30c8526/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/PolicyTest.java ---------------------------------------------------------------------- diff --git a/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/PolicyTest.java b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/PolicyTest.java new file mode 100644 index 0000000..304fde0 --- /dev/null +++ b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/PolicyTest.java @@ -0,0 +1,152 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.persistence.jpa.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.List; +import org.apache.syncope.common.lib.types.PasswordPolicySpec; +import org.apache.syncope.common.lib.types.PolicyType; +import org.apache.syncope.common.lib.types.SyncPolicySpec; +import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntityException; +import org.apache.syncope.core.persistence.api.dao.PolicyDAO; +import org.apache.syncope.core.persistence.api.entity.PasswordPolicy; +import org.apache.syncope.core.persistence.api.entity.Policy; +import org.apache.syncope.core.persistence.api.entity.SyncPolicy; +import org.apache.syncope.core.persistence.jpa.AbstractTest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class PolicyTest extends AbstractTest { + + @Autowired + private PolicyDAO policyDAO; + + @Test + public void findAll() { + List<Policy> policies = policyDAO.findAll(); + assertNotNull(policies); + assertFalse(policies.isEmpty()); + } + + @Test + public void findById() { + Policy policy = policyDAO.find(1L); + assertNotNull("findById did not work", policy); + } + + @Test + public void findByType() { + List<? extends Policy> policies = policyDAO.find(PolicyType.SYNC); + assertNotNull("findById did not work", policies); + assertFalse(policies.isEmpty()); + } + + @Test + public void findGlobalPasswordPolicy() { + PasswordPolicy policy = policyDAO.getGlobalPasswordPolicy(); + assertNotNull("findById did not work", policy); + + assertEquals(PolicyType.GLOBAL_PASSWORD, policy.getType()); + + assertEquals("invalid policy values", 8, (policy.getSpecification(PasswordPolicySpec.class)).getMinLength()); + } + + @Test(expected = InvalidEntityException.class) + public void saveInvalidPolicy() { + PasswordPolicySpec passwordPolicy = new PasswordPolicySpec(); + passwordPolicy.setMaxLength(8); + passwordPolicy.setMinLength(6); + + SyncPolicy policy = entityFactory.newPolicy(SyncPolicy.class, false); + policy.setSpecification(passwordPolicy); + policy.setDescription("sync policy"); + + policyDAO.save(policy); + } + + @Test(expected = InvalidEntityException.class) + public void saveSecondPasswordPolicy() { + PasswordPolicySpec passwordPolicy = new PasswordPolicySpec(); + passwordPolicy.setMaxLength(8); + passwordPolicy.setMinLength(6); + + PasswordPolicy policy = entityFactory.newPolicy(PasswordPolicy.class, true); + policy.setSpecification(passwordPolicy); + policy.setDescription("global password policy"); + + policyDAO.save(policy); + } + + @Test + public void create() { + SyncPolicy policy = entityFactory.newPolicy(SyncPolicy.class, false); + + final String syncURuleName = "net.tirasa.sync.correlation.TirasaURule"; + final String syncRRuleName = "net.tirasa.sync.correlation.TirasaRRule"; + + SyncPolicySpec syncPolicySpec = new SyncPolicySpec(); + syncPolicySpec.setUserJavaRule(syncURuleName); + syncPolicySpec.setRoleJavaRule(syncRRuleName); + + policy.setSpecification(syncPolicySpec); + policy.setDescription("Sync policy"); + + policy = policyDAO.save(policy); + + assertNotNull(policy); + assertEquals(PolicyType.SYNC, policy.getType()); + assertEquals(syncURuleName, (policy.getSpecification(SyncPolicySpec.class)).getUserJavaRule()); + assertEquals(syncRRuleName, (policy.getSpecification(SyncPolicySpec.class)).getRoleJavaRule()); + } + + @Test + public void update() { + PasswordPolicySpec specification = new PasswordPolicySpec(); + specification.setMaxLength(8); + specification.setMinLength(6); + + Policy policy = policyDAO.getGlobalPasswordPolicy(); + assertNotNull(policy); + policy.setSpecification(specification); + + policy = policyDAO.save(policy); + + assertNotNull(policy); + assertEquals(PolicyType.GLOBAL_PASSWORD, policy.getType()); + assertEquals((policy.getSpecification(PasswordPolicySpec.class)).getMaxLength(), 8); + assertEquals((policy.getSpecification(PasswordPolicySpec.class)).getMinLength(), 6); + } + + @Test + public void delete() { + Policy policy = policyDAO.find(1L); + assertNotNull("find to delete did not work", policy); + + policyDAO.delete(policy); + + Policy actual = policyDAO.find(1L); + assertNull("delete did not work", actual); + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/d30c8526/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ReportTest.java ---------------------------------------------------------------------- diff --git a/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ReportTest.java b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ReportTest.java new file mode 100644 index 0000000..4521a48 --- /dev/null +++ b/syncope620/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/entity/ReportTest.java @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.syncope.core.persistence.jpa.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.List; +import org.apache.syncope.common.lib.report.UserReportletConf; +import org.apache.syncope.core.persistence.api.dao.ReportDAO; +import org.apache.syncope.core.persistence.api.entity.Report; +import org.apache.syncope.core.persistence.jpa.AbstractTest; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class ReportTest extends AbstractTest { + + @Autowired + private ReportDAO reportDAO; + + @Test + public void find() { + Report report = reportDAO.find(1L); + assertNotNull(report); + + report = reportDAO.find(10L); + assertNull(report); + } + + @Test + public void findAll() { + List<Report> reports = reportDAO.findAll(); + assertNotNull(reports); + assertEquals(1, reports.size()); + } + + @Test + public void save() { + int beforeCount = reportDAO.count(); + + Report report = entityFactory.newEntity(Report.class); + report.setName("new report"); + report.addReportletConf(new UserReportletConf("first")); + report.addReportletConf(new UserReportletConf("second")); + + report = reportDAO.save(report); + assertNotNull(report); + assertNotNull(report.getKey()); + + int afterCount = reportDAO.count(); + assertEquals(afterCount, beforeCount + 1); + } + + @Test + public void delete() { + Report report = reportDAO.find(1L); + assertNotNull(report); + + reportDAO.delete(1L); + + report = reportDAO.find(1L); + assertNull(report); + } +}
