package org.picketlink.test.idm.identitymodel.complex;
import org.junit.Before;
import org.junit.Test;
import org.picketlink.idm.IdentityManager;
import org.picketlink.test.idm.identitymodel.complex.model.Company;
import org.picketlink.test.idm.identitymodel.complex.model.EmployeeUser;
import org.picketlink.test.idm.identitymodel.complex.model.entity.Email;
import org.picketlink.test.idm.identitymodel.complex.model.entity.Employee;
import org.picketlink.test.idm.AbstractPartitionManagerTestCase;
import org.picketlink.test.idm.Configuration;
import org.picketlink.test.idm.testers.IdentityConfigurationTester;
import org.picketlink.test.idm.testers.JPAStoreComplexSchemaConfigurationTester;
import javax.persistence.EntityManager;
import java.util.List;
import static org.junit.Assert.*;
/**
*
* @author Pedro Igor
*/
@Configuration(include = JPAStoreComplexSchemaConfigurationTester.class)
public class MappingTestCase extends AbstractPartitionManagerTestCase {
private JPAStoreComplexSchemaConfigurationTester configurationTester;
private Company company;
public MappingTestCase(final IdentityConfigurationTester visitor) {
super(visitor);
this.configurationTester = (JPAStoreComplexSchemaConfigurationTester) visitor;
}
@Before
public void onSetup() {
this.company = new Company();
company.setName("Acme");
company.setDomain("domain.com");
getPartitionManager().add(company);
}
@Test
public void testSingleAttributeValue() {
Employee employee = new Employee();
employee.setFirstName("John");
employee.setLastName("Paul");
employee.setInternalId("33221221");
getEntityManager().persist(employee);
EmployeeUser user = new EmployeeUser("john");
user.setPerson(employee);
getIdentityManager().add(user);
List<EmployeeUser> result = getIdentityManager().createIdentityQuery(EmployeeUser.class).getResultList();
assertEquals(1, result.size());
EmployeeUser storedUser = result.get(0);
assertNotNull(storedUser.getPerson());
assertEquals(user.getPerson().getClass(), storedUser.getPerson().getClass());
assertEquals(user.getPerson(), storedUser.getPerson());
}
@Test
public void testSingleNamedMappedAttribute() {
Employee employee = new Employee();
employee.setFirstName("John");
employee.setLastName("Paul");
employee.setInternalId("33221221");
getEntityManager().persist(employee);
EmployeeUser user = new EmployeeUser("john");
user.setPerson(employee);
Email email = new Email();
email.setAddress("user@domain.com");
email.setPrimaryEmail(true);
user.setEmail(email);
getIdentityManager().add(user);
this.getEntityManager().getTransaction().commit();
List<EmployeeUser> result = getIdentityManager().createIdentityQuery(EmployeeUser.class).getResultList();
assertEquals(1, result.size());
EmployeeUser storedUser = result.get(0);
assertNotNull(storedUser.getEmail());
assertEquals(user.getEmail(), storedUser.getEmail());
}
@Test
public void testListNamedMappedAttribute() throws InterruptedException {
Employee employee = new Employee();
employee.setFirstName("John");
employee.setLastName("Paul");
employee.setInternalId("33221221");
getEntityManager().persist(employee);
EmployeeUser user = new EmployeeUser("john");
user.setPerson(employee);
Email email = new Email();
email.setAddress("user@domain.com");
email.setPrimaryEmail(true);
user.setEmail(email);
getIdentityManager().add(user);
List<EmployeeUser> result = getIdentityManager().createIdentityQuery(EmployeeUser.class).getResultList();
assertEquals(1, result.size());
EmployeeUser storedUser = result.get(0);
assertNotNull(storedUser.getEmail());
assertEquals(user.getEmail(), storedUser.getEmail());
storedUser.getEmail().setAddress("changed@domain.com");
getIdentityManager().update(user);
result = getIdentityManager().createIdentityQuery(EmployeeUser.class).getResultList();
assertEquals(1, result.size());
storedUser = result.get(0);
assertEquals("changed@domain.com", storedUser.getEmail().getAddress());
}
private EntityManager getEntityManager() {
return this.configurationTester.getEntityManager();
}
@Override
public IdentityManager getIdentityManager() {
return getPartitionManager().createIdentityManager(this.company);
}
}