package com.processpuzzle.sharedfixtures.domaintier;
import static org.mockito.Mockito.*;
import com.processpuzzle.application.security.domain.AnonymousUser;
import com.processpuzzle.application.security.domain.User;
import com.processpuzzle.application.configuration.domain.ProcessPuzzleContext;
import com.processpuzzle.application.domain.Application;
import com.processpuzzle.litest.fixture.GenericTestFixture;
import com.processpuzzle.litest.fixture.ImmutableSharedFixture;
import com.processpuzzle.user_session.domain.StaticUserSessionHolder;
import com.processpuzzle.user_session.domain.UserRequestContext;
import com.processpuzzle.user_session.domain.UserRequestManager;
import com.processpuzzle.user_session.domain.UserSession;
import com.processpuzzle.user_session.domain.UserSessionHolder;
public class ProcessPuzzleContextFixture extends GenericTestFixture<ProcessPuzzleContext> implements ImmutableSharedFixture<ProcessPuzzleContext>{
protected static ProcessPuzzleContextFixture soleInstance;
protected Class<? extends Application> applicationClass;
protected ProcessPuzzleContext applicationContext;
protected Application mockApplication;
protected String configurationDescriptorPath;
private boolean isConfigured = false;
private UserRequestManager requestManager;
private AnonymousUser anonymousUser;
private UserSession userSession;
private UserRequestContext requestContext;
protected ProcessPuzzleContextFixture( String configurationDescriptorPath ) {
this.configurationDescriptorPath = configurationDescriptorPath;
}
public static ProcessPuzzleContextFixture getInstance() {
return getInstance( DomainTierTestConfiguration.APPLICATION_CONFIGURATION_DESCRIPTOR_PATH );
}
public static ProcessPuzzleContextFixture getInstance( String configurationDescriptorPath ) {
if( soleInstance == null ) {
soleInstance = new ProcessPuzzleContextFixture( configurationDescriptorPath );
}
return soleInstance;
}
//Properties
public ProcessPuzzleContext getApplicationContext() { return applicationContext; }
public User getUser() { return anonymousUser; }
public UserRequestContext getUserRequestContex() { return requestContext; }
public UserRequestManager getUserRequestManger() { return requestManager; }
public UserSession getUserSession() { return userSession; }
//Protected, private helper methods
protected void createNewUserRequest() {
requestManager = UserRequestManager.getInstance();
UserSessionHolder sessionHolder = new StaticUserSessionHolder();
anonymousUser = mock( AnonymousUser.class );
userSession = requestManager.createSession( sessionHolder, anonymousUser, mockApplication );
requestContext = requestManager.createRequestContext( sessionHolder );
}
protected ProcessPuzzleContext instantiateSUT() {
return new ProcessPuzzleContext( mockApplication, configurationDescriptorPath );
}
@Override
protected void configureAfterSutInstantiation() {
// TODO Auto-generated method stub
}
@Override
protected void configureBeforeSutInstantiation() {
if( !isConfigured ) {
mockApplication = mock( Application.class );
applicationContext = instantiateSUT();
when( mockApplication.getContext() ).thenReturn( applicationContext );
applicationContext.setUp( Application.Action.install );
createNewUserRequest();
isConfigured = true;
}
}
@Override
protected void releaseResources() {
applicationContext.tearDown( Application.Action.uninstall );
applicationContext = null;
mockApplication = null;
isConfigured = false;
}
}