/*
* Created on May 25, 2006
*/
package com.processpuzzle.artifact_management.control;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.junit.BeforeClass;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.w3c.dom.NodeList;
import com.mockrunner.mock.web.MockHttpServletResponse;
import com.mockrunner.servlet.BasicServletTestCaseAdapter;
import com.processpuzzle.application.configuration.domain.ApplicationContextFactory;
import com.processpuzzle.application.configuration.domain.ConfigurationSetUpException;
import com.processpuzzle.application.configuration.domain.ProcessPuzzleContext;
import com.processpuzzle.application.control.control.CommandControllerServlet;
import com.processpuzzle.application.domain.Application;
import com.processpuzzle.application.security.control.LoginCommand;
import com.processpuzzle.artifact.domain.DefaultArtifactRepository;
import com.processpuzzle.artifact.domain.Document;
import com.processpuzzle.artifact.domain.DocumentFactory;
import com.processpuzzle.artifact.domain.DocumentRepository;
import com.processpuzzle.artifact_management.control.ArtifactLocator;
import com.processpuzzle.artifact_management.control.ReserveArtifactCommand;
import com.processpuzzle.artifact_management.control.XmlActionResponse;
import com.processpuzzle.configuration.webtier.ConfigurationConstants;
import com.processpuzzle.persistence.domain.DefaultUnitOfWork;
/**
* @author zsolt.zsuffa
*/
public class ReserveArtifactCommandTest extends BasicServletTestCaseAdapter {
@Mock
private static Application mockApplicaton;
private static ProcessPuzzleContext config = null;
private static DefaultArtifactRepository repository;
private static DocumentFactory documentFactory;
private static DocumentRepository documentRepository;
private Document aDocument;
@BeforeClass public static void beforeAllTests() {
MockitoAnnotations.initMocks( ReserveArtifactCommandTest.class );
config = ApplicationContextFactory.create( mockApplicaton, ConfigurationConstants.CONFIGURATION_PROPERTY_FILE );
try{
config.setUp( Application.Action.start );
}catch( ConfigurationSetUpException e ){
// TODO Auto-generated catch block
e.printStackTrace();
}
repository = config.getRepository( DefaultArtifactRepository.class );
documentFactory = config.getEntityFactory( DocumentFactory.class );
documentRepository = config.getRepository( DocumentRepository.class );
}
public void setUp() throws Exception {
super.setUp();
DefaultUnitOfWork work = new DefaultUnitOfWork( true );
aDocument = documentFactory.createDocument( "aDocument" );
aDocument.setVersionControlled( true );
repository.add( work, aDocument );
createServlet( CommandControllerServlet.class );
loginUser();
executeCommand();
work.finish();
}
public void tearDown() throws Exception {
DefaultUnitOfWork work = new DefaultUnitOfWork( true );
repository.delete( work, aDocument );
aDocument = null;
work.finish();
super.tearDown();
}
private void executeCommand() {
addRequestParameter( "action", ReserveArtifactCommand.COMMAND_NAME );
addRequestParameter( ArtifactLocator.ARTIFACTNAME_IDENTIFIERNAME, aDocument.getName() );
addRequestParameter( ReserveArtifactCommand.COMMENT_NAME_PARAM, aDocument.getName() );
doPost();
}
private void loginUser() {
addRequestParameter( "action", "Login" );
addRequestParameter( LoginCommand.USER_PARAM_NAME, "1" );
addRequestParameter( LoginCommand.PASSWORD_PARAM_NAME, "1" );
doPost();
}
public final void testForXmlResponse() {
MockHttpServletResponse mockResponse = getWebMockObjectFactory().getMockResponse();
assertEquals( "The content type should be:", "text/xml", mockResponse.getContentType() );
org.w3c.dom.Document xmlResponse = getOutputAsW3CDocument();
org.w3c.dom.NodeList outcome = (NodeList) xmlResponse.getElementsByTagName( XmlActionResponse.OUTCOME_TAG_NAME );
assertNotNull( "The response xml has outcome tag.", outcome );
assertEquals( "The response xml has only one outcome tag.", 1, outcome.getLength() );
assertNotNull( "The response value can be null.", outcome.item( 0 ).getNodeValue() );
}
public final void testForResponseOutcomeStatus() {
org.w3c.dom.NodeList outcome = (NodeList) getOutputAsW3CDocument().getElementsByTagName( XmlActionResponse.OUTCOME_TAG_NAME );
assertEquals( "The reservation should be succesful", "true", outcome.item( 0 ).getNodeValue() );
}
public final void testForArtifactReservationStatus() {
DefaultUnitOfWork work = new DefaultUnitOfWork( true );
Document reservedDocument = documentRepository.findByName( work, aDocument.getName() );
assertTrue( "The document should be reserved.", reservedDocument.isReserved() );
work.finish();
}
}