package org.webpieces.plugins.hibernate;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.webpieces.ddl.api.JdbcApi;
import org.webpieces.ddl.api.JdbcConstants;
import org.webpieces.ddl.api.JdbcFactory;
import org.webpieces.httpcommon.Requests;
import org.webpieces.httpcommon.api.RequestId;
import org.webpieces.httpcommon.api.RequestListener;
import org.webpieces.httpparser.api.common.Header;
import org.webpieces.httpparser.api.dto.HttpRequest;
import org.webpieces.httpparser.api.dto.KnownHttpMethod;
import org.webpieces.httpparser.api.dto.KnownStatusCode;
import org.webpieces.plugins.hibernate.app.HibernateAppMeta;
import org.webpieces.plugins.hibernate.app.ServiceToFailMock;
import org.webpieces.plugins.hibernate.app.dbo.LevelEducation;
import org.webpieces.plugins.hibernate.app.dbo.Role;
import org.webpieces.plugins.hibernate.app.dbo.UserRoleDbo;
import org.webpieces.plugins.hibernate.app.dbo.UserTestDbo;
import org.webpieces.util.file.VirtualFileClasspath;
import org.webpieces.webserver.ResponseExtract;
import org.webpieces.webserver.TestConfig;
import org.webpieces.webserver.WebserverForTest;
import org.webpieces.webserver.test.FullResponse;
import org.webpieces.webserver.test.MockResponseSender;
import org.webpieces.webserver.test.PlatformOverridesForTest;
public class TestFlashAndSelect {
private MockResponseSender socket = new MockResponseSender();
private RequestListener server;
private ServiceToFailMock mock = new ServiceToFailMock();
private UserTestDbo user;
@Before
public void setUp() {
//clear in-memory database
JdbcApi jdbc = JdbcFactory.create(JdbcConstants.jdbcUrl, JdbcConstants.jdbcUser, JdbcConstants.jdbcPassword);
jdbc.dropAllTablesFromDatabase();
user = loadDataInDb();
VirtualFileClasspath metaFile = new VirtualFileClasspath("plugins/hibernateMeta.txt", WebserverForTest.class.getClassLoader());
TestConfig config = new TestConfig();
config.setPlatformOverrides(new PlatformOverridesForTest());
config.setMetaFile(metaFile);
config.setAppOverrides(new TestModule(mock));
WebserverForTest webserver = new WebserverForTest(config);
server = webserver.start();
}
@Test
public void testAssertBeanNoNullsOnLastNameAndEnum() {
String urlPath = "/user/edit/"+user.getId();
HttpRequest req = Requests.createRequest(KnownHttpMethod.GET, urlPath);
server.incomingRequest(req, new RequestId(0), true, socket);
FullResponse response = ResponseExtract.assertSingleResponse(socket);
response.assertStatusCode(KnownStatusCode.HTTP_200_OK);
//assert the nulls came through
response.assertContains("<input type=`text` name=`entity.lastName` value=`Hill` class=`input-xlarge`>".replace('`', '\"'));
response.assertContains("<option value=`` >Unselected</option>".replace('`', '\"'));
response.assertContains("<option value=`k` selected=`selected`>Kindergarten</script>".replace('`', '\"'));
}
@Test
public void testNullWillFlashProperly() {
HttpRequest req1 = Requests.createPostRequest("/user/post",
"entity.id", user.getId()+"",
"entity.firstName", "NextName", //invalid first name
"entity.email", "dean@zz.com",
"entity.lastName", "",
"entity.password", "",
"entity.levelOfEducation", ""
);
server.incomingRequest(req1, new RequestId(0), true, socket);
FullResponse response1 = ResponseExtract.assertSingleResponse(socket);
response1.assertStatusCode(KnownStatusCode.HTTP_303_SEEOTHER);
String urlPath = "/user/edit/"+user.getId();
Assert.assertEquals("http://myhost.com"+urlPath, response1.getRedirectUrl());
HttpRequest req = Requests.createRequest(KnownHttpMethod.GET, urlPath);
Header cookieHeader = response1.createCookieRequestHeader();
req.addHeader(cookieHeader);
server.incomingRequest(req, new RequestId(0), true, socket);
FullResponse response = ResponseExtract.assertSingleResponse(socket);
response.assertStatusCode(KnownStatusCode.HTTP_200_OK);
//assert the nulls came through
response.assertContains("<input type=`text` name=`entity.lastName` value=`` class=`input-xlarge`>".replace('`', '\"'));
response.assertContains("<option value=`` selected=`selected`>Unselected</option>".replace('`', '\"'));
response.assertContains("<option value=`k` >Kindergarten</script>".replace('`', '\"'));
}
@Test
public void testRenderGetMultiselect() {
String urlPath = "/multiselect/"+user.getId();
HttpRequest req = Requests.createRequest(KnownHttpMethod.GET, urlPath);
server.incomingRequest(req, new RequestId(0), true, socket);
FullResponse response = ResponseExtract.assertSingleResponse(socket);
response.assertStatusCode(KnownStatusCode.HTTP_200_OK);
//assert the nulls came through
response.assertContains("<option value=`b` selected=`selected`>Badass</script>".replace('`', '\"'));
response.assertContains("<option value=`j` >Jerk</script>".replace('`', '\"'));
response.assertContains("<option value=`d` selected=`selected`>Delinquint</script>".replace('`', '\"'));
}
@Test
public void testMultiSelect() {
HttpRequest req1 = Requests.createPostRequest("/multiselect",
"entity.id", user.getId()+"",
"entity.firstName", "NextName", //invalid first name
"entity.email", "dean@zz.com",
"entity.lastName", "",
"entity.password", "",
"entity.levelOfEducation", "",
"selectedRoles", "j",
"selectedRoles", "d"
);
server.incomingRequest(req1, new RequestId(0), true, socket);
FullResponse response1 = ResponseExtract.assertSingleResponse(socket);
response1.assertStatusCode(KnownStatusCode.HTTP_303_SEEOTHER);
String urlPath = "/multiselect/"+user.getId();
Assert.assertEquals("http://myhost.com"+urlPath, response1.getRedirectUrl());
HttpRequest req = Requests.createRequest(KnownHttpMethod.GET, urlPath);
Header cookieHeader = response1.createCookieRequestHeader();
req.addHeader(cookieHeader);
server.incomingRequest(req, new RequestId(0), true, socket);
FullResponse response = ResponseExtract.assertSingleResponse(socket);
response.assertStatusCode(KnownStatusCode.HTTP_200_OK);
response.assertContains("<option value=`b` >Badass</script>".replace('`', '\"'));
response.assertContains("<option value=`j` selected=`selected`>Jerk</script>".replace('`', '\"'));
response.assertContains("<option value=`d` selected=`selected`>Delinquint</script>".replace('`', '\"'));
}
@Test
public void testMultiSelectSingleSelection() {
HttpRequest req1 = Requests.createPostRequest("/multiselect",
"entity.id", user.getId()+"",
"entity.firstName", "NextName", //invalid first name
"entity.email", "dean@zz.com",
"entity.lastName", "",
"entity.password", "",
"entity.levelOfEducation", "",
"selectedRoles", "j"
);
server.incomingRequest(req1, new RequestId(0), true, socket);
FullResponse response1 = ResponseExtract.assertSingleResponse(socket);
response1.assertStatusCode(KnownStatusCode.HTTP_303_SEEOTHER);
String urlPath = "/multiselect/"+user.getId();
Assert.assertEquals("http://myhost.com"+urlPath, response1.getRedirectUrl());
HttpRequest req = Requests.createRequest(KnownHttpMethod.GET, urlPath);
Header cookieHeader = response1.createCookieRequestHeader();
req.addHeader(cookieHeader);
server.incomingRequest(req, new RequestId(0), true, socket);
FullResponse response = ResponseExtract.assertSingleResponse(socket);
response.assertStatusCode(KnownStatusCode.HTTP_200_OK);
response.assertContains("<option value=`b` >Badass</script>".replace('`', '\"'));
response.assertContains("<option value=`j` selected=`selected`>Jerk</script>".replace('`', '\"'));
response.assertContains("<option value=`d` >Delinquint</script>".replace('`', '\"'));
}
public static UserTestDbo loadDataInDb() {
String email = "dean2@sync.xsoftware.biz";
//populate database....
EntityManagerFactory factory = Persistence.createEntityManagerFactory(HibernateAppMeta.PERSISTENCE_TEST_UNIT);
EntityManager mgr = factory.createEntityManager();
EntityTransaction tx = mgr.getTransaction();
tx.begin();
UserTestDbo manager = new UserTestDbo();
manager.setEmail("asdf@asf.com");
manager.setName("somadsf");
UserTestDbo user = new UserTestDbo();
user.setEmail(email);
user.setName("SomeName");
user.setFirstName("Dean");
user.setLastName("Hill");
user.setLevelOfEducation(LevelEducation.KINDERGARTEN);
user.setManager(manager);
UserRoleDbo role1 = new UserRoleDbo(user, Role.DELINQUINT);
UserRoleDbo role2 = new UserRoleDbo(user, Role.BADASS);
mgr.persist(manager);
mgr.persist(user);
mgr.persist(role1);
mgr.persist(role2);
mgr.flush();
tx.commit();
return user;
}
}