package org.picketlink.test.idm.identitymodel.complex;
import org.junit.Before;
import org.junit.Test;
import org.picketlink.idm.IdentityManager;
import org.picketlink.idm.PartitionManager;
import org.picketlink.test.idm.identitymodel.complex.model.Application;
import org.picketlink.test.idm.identitymodel.complex.model.Company;
import org.picketlink.test.idm.identitymodel.complex.model.EmployeeUser;
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 java.util.List;
import static org.junit.Assert.*;
/**
*
* @author pedroigor
*/
@Configuration(include = JPAStoreComplexSchemaConfigurationTester.class)
public class MultiPartitionTestCase extends AbstractPartitionManagerTestCase {
private ComplexSchemaHelper wayneHelper;
private ComplexSchemaHelper acmeHelper;
private ComplexSchemaHelper umbrellaHelper;
public MultiPartitionTestCase(final IdentityConfigurationTester visitor) {
super(visitor);
}
@Override
@Before
public void onBefore() {
super.onBefore();
PartitionManager partitionManager = getPartitionManager();
this.acmeHelper = new ComplexSchemaHelper("Acme", "acme.com", getVisitor(), partitionManager);
this.umbrellaHelper = new ComplexSchemaHelper("Umbrella", "umbrella.com", getVisitor(), partitionManager);
this.wayneHelper = new ComplexSchemaHelper("Wayne", "wayne.com", getVisitor(), partitionManager);
}
@Test
public void testUserPartitioning() {
EmployeeUser bugs = this.acmeHelper.createEmployeeUser("Bugs", "Bunny", "bugs",
this.acmeHelper.getLawOrgUnit());
EmployeeUser jill = this.umbrellaHelper.createEmployeeUser("Jill", "Hills", "jill",
this.umbrellaHelper.getSecurityOrgUnit());
EmployeeUser wayne = this.wayneHelper.createEmployeeUser("Bruce", "Wayne", "bruce",
this.wayneHelper.getExecutiveOrgUnit());
IdentityManager acmeIdentityManager = createIdentityManager(this.acmeHelper.getCompany());
List<EmployeeUser> result = acmeIdentityManager.createIdentityQuery(EmployeeUser.class).getResultList();
assertEquals(1, result.size());
assertEquals(bugs.getId(), result.get(0).getId());
IdentityManager umbrellaIdentityManager = createIdentityManager(this.umbrellaHelper.getCompany());
result = umbrellaIdentityManager.createIdentityQuery(EmployeeUser.class).getResultList();
assertEquals(1, result.size());
assertEquals(jill.getId(), result.get(0).getId());
IdentityManager wayneIdentityManager = createIdentityManager(this.wayneHelper.getCompany());
result = wayneIdentityManager.createIdentityQuery(EmployeeUser.class).getResultList();
assertEquals(1, result.size());
assertEquals(wayne.getId(), result.get(0).getId());
}
@Test
public void testApplicationAuthorization() {
EmployeeUser bugs = this.acmeHelper.createEmployeeUser("Bugs", "Bunny", "bugs",
this.acmeHelper.getLawOrgUnit());
EmployeeUser jill = this.umbrellaHelper.createEmployeeUser("Jill", "Hills", "jill",
this.umbrellaHelper.getSecurityOrgUnit());
EmployeeUser wayne = this.wayneHelper.createEmployeeUser("Bruce", "Wayne", "bruce",
this.wayneHelper.getExecutiveOrgUnit());
Application acmeApplication = this.acmeHelper.createApplication("Application A");
Application umbrellaApplication = this.umbrellaHelper.createApplication("Application A");
Application wayneApplication = this.wayneHelper.createApplication("Application A");
this.acmeHelper.authorizeApplication(bugs, acmeApplication);
this.umbrellaHelper.authorizeApplication(jill, umbrellaApplication);
this.wayneHelper.authorizeApplication(wayne, wayneApplication);
assertTrue(this.acmeHelper.isAuthorized(bugs, acmeApplication));
assertTrue(this.umbrellaHelper.isAuthorized(jill, umbrellaApplication));
assertTrue(this.wayneHelper.isAuthorized(wayne, wayneApplication));
assertFalse(this.acmeHelper.isAuthorized(bugs, umbrellaApplication));
assertFalse(this.acmeHelper.isAuthorized(jill, acmeApplication));
}
@Test
public void testApplicationAuthorizationBetweenDifferenceCompanies() {
EmployeeUser bugs = this.acmeHelper.createEmployeeUser("Bugs", "Bunny", "bugs",
this.acmeHelper.getLawOrgUnit());
EmployeeUser wayne = this.wayneHelper.createEmployeeUser("Bruce", "Wayne", "bruce",
this.wayneHelper.getExecutiveOrgUnit());
Application acmeApplication = this.acmeHelper.createApplication("Application A");
Application wayneApplication = this.wayneHelper.createApplication("Application A");
this.acmeHelper.authorizeApplication(wayne, acmeApplication);
this.wayneHelper.authorizeApplication(bugs, wayneApplication);
assertTrue(this.acmeHelper.isAuthorized(bugs, wayneApplication));
assertTrue(this.wayneHelper.isAuthorized(wayne, acmeApplication));
}
private IdentityManager createIdentityManager(Company company) {
return getPartitionManager().createIdentityManager(company);
}
}