/* * JBoss, Home of Professional Open Source * * Copyright 2013 Red Hat, Inc. and/or its affiliates. * * Licensed 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.picketlink.test.idm.relationship; import org.junit.Test; import org.picketlink.idm.IdentityManager; import org.picketlink.idm.RelationshipManager; import org.picketlink.idm.model.AbstractAttributedType; import org.picketlink.idm.model.IdentityType; import org.picketlink.idm.model.Relationship; import org.picketlink.idm.model.annotation.AttributeProperty; import org.picketlink.idm.model.basic.Group; import org.picketlink.idm.model.basic.Role; import org.picketlink.idm.model.basic.User; import org.picketlink.idm.query.RelationshipQuery; import org.picketlink.idm.query.RelationshipQueryParameter; import org.picketlink.test.idm.AbstractPartitionManagerTestCase; import org.picketlink.test.idm.Configuration; import org.picketlink.test.idm.testers.FileStoreConfigurationTester; import org.picketlink.test.idm.testers.IdentityConfigurationTester; import org.picketlink.test.idm.testers.JPAStoreConfigurationTester; import org.picketlink.test.idm.testers.LDAPUserGroupJPARoleConfigurationTester; import org.picketlink.test.idm.testers.SingleConfigLDAPJPAStoreConfigurationTester; import java.util.List; import static org.junit.Assert.*; /** * <p> * Test case for custom {@link Relationship} types. * </p> * * @author <a href="mailto:psilva@redhat.com">Pedro Silva</a> * */ @Configuration(include= {JPAStoreConfigurationTester.class, FileStoreConfigurationTester.class, SingleConfigLDAPJPAStoreConfigurationTester.class, LDAPUserGroupJPARoleConfigurationTester.class}) public class CustomRelationshipTestCase extends AbstractPartitionManagerTestCase { public CustomRelationshipTestCase(IdentityConfigurationTester builder) { super(builder); } @Test public void testCreate() throws Exception { CustomRelationship relationship = new CustomRelationship(); IdentityManager identityManager = getIdentityManager(); User user = createUser("user"); relationship.setIdentityTypeA(user); Role role = createRole("role"); relationship.setIdentityTypeB(role); Group group = createGroup("group"); relationship.setIdentityTypeC(group); RelationshipManager relationshipManager = getPartitionManager().createRelationshipManager(); relationshipManager.add(relationship); RelationshipQuery<CustomRelationship> query = relationshipManager.createRelationshipQuery(CustomRelationship.class); query.setParameter(CustomRelationship.IDENTITY_TYPE_A, user); List<CustomRelationship> result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(relationship.getId(), result.get(0).getId()); query = relationshipManager.createRelationshipQuery(CustomRelationship.class); query.setParameter(CustomRelationship.IDENTITY_TYPE_B, role); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(relationship.getId(), result.get(0).getId()); query = relationshipManager.createRelationshipQuery(CustomRelationship.class); query.setParameter(CustomRelationship.IDENTITY_TYPE_C, group); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(relationship.getId(), result.get(0).getId()); query = relationshipManager.createRelationshipQuery(CustomRelationship.class); query.setParameter(CustomRelationship.IDENTITY_TYPE_A, user); query.setParameter(CustomRelationship.IDENTITY_TYPE_B, role); query.setParameter(CustomRelationship.IDENTITY_TYPE_C, group); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(relationship.getId(), result.get(0).getId()); } @Test public void testFormalAttributes() throws Exception { CustomRelationship relationship = new CustomRelationship(); User user = createUser("user"); relationship.setIdentityTypeA(user); Role role = createRole("role"); relationship.setIdentityTypeB(role); Group group = createGroup("group"); relationship.setIdentityTypeC(group); relationship.setAttributeA("Value for A"); relationship.setAttributeB(99l); relationship.setAttributeC(true); RelationshipManager relationshipManager = getPartitionManager().createRelationshipManager(); relationshipManager.add(relationship); RelationshipQuery<CustomRelationship> query = relationshipManager.createRelationshipQuery(CustomRelationship.class); query.setParameter(CustomRelationship.IDENTITY_TYPE_A, user); List<CustomRelationship> result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(relationship.getId(), result.get(0).getId()); assertEquals(relationship.getAttributeA(), result.get(0).getAttributeA()); assertEquals(relationship.getAttributeB(), result.get(0).getAttributeB()); assertEquals(relationship.isAttributeC(), result.get(0).isAttributeC()); relationship.setAttributeA("Changed Value A"); relationship.setAttributeB(76l); relationship.setAttributeC(false); relationshipManager.update(relationship); query = relationshipManager.createRelationshipQuery(CustomRelationship.class); query.setParameter(CustomRelationship.ID, relationship.getId()); result = query.getResultList(); assertFalse(result.isEmpty()); assertEquals(1, result.size()); assertEquals(relationship.getId(), result.get(0).getId()); assertEquals(relationship.getAttributeA(), result.get(0).getAttributeA()); assertEquals(relationship.getAttributeB(), result.get(0).getAttributeB()); assertEquals(relationship.isAttributeC(), result.get(0).isAttributeC()); } public static class CustomRelationship extends AbstractAttributedType implements Relationship { private static final long serialVersionUID = 1030652086550754965L; public static final RelationshipQueryParameter IDENTITY_TYPE_A = new RelationshipQueryParameter() { @Override public String getName() { return "identityTypeA"; } }; public static final RelationshipQueryParameter IDENTITY_TYPE_B = new RelationshipQueryParameter() { @Override public String getName() { return "identityTypeB"; } }; public static final RelationshipQueryParameter IDENTITY_TYPE_C = new RelationshipQueryParameter() { @Override public String getName() { return "identityTypeC"; } }; private IdentityType identityTypeA; private IdentityType identityTypeB; private IdentityType identityTypeC; @AttributeProperty private String attributeA; @AttributeProperty private Long attributeB; @AttributeProperty private boolean attributeC; public IdentityType getIdentityTypeA() { return this.identityTypeA; } public void setIdentityTypeA(IdentityType identityTypeA) { this.identityTypeA = identityTypeA; } public IdentityType getIdentityTypeB() { return this.identityTypeB; } public void setIdentityTypeB(IdentityType identityTypeB) { this.identityTypeB = identityTypeB; } public IdentityType getIdentityTypeC() { return this.identityTypeC; } public void setIdentityTypeC(IdentityType identityTypeC) { this.identityTypeC = identityTypeC; } public String getAttributeA() { return attributeA; } public void setAttributeA(final String attributeA) { this.attributeA = attributeA; } public Long getAttributeB() { return attributeB; } public void setAttributeB(final Long attributeB) { this.attributeB = attributeB; } public boolean isAttributeC() { return attributeC; } public void setAttributeC(final boolean attributeC) { this.attributeC = attributeC; } } }