//$Id: StartupTest.java 8034 2008-04-28 09:40:29Z pete.muir@jboss.org $ package org.jboss.seam.example.spring.test; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.faces.model.DataModel; import javax.faces.model.ListDataModel; import org.jboss.seam.contexts.Contexts; import org.jboss.seam.core.Manager; import org.jboss.seam.example.spring.Booking; import org.jboss.seam.example.spring.HibernateTestService; import org.jboss.seam.example.spring.Hotel; import org.jboss.seam.example.spring.HotelBookingAction; import org.jboss.seam.example.spring.User; import org.jboss.seam.mock.SeamTest; import org.testng.annotations.Test; public class StartupTest extends SeamTest { @Test public void testRegister() throws Exception { new FacesRequest("/register.xhtml") { /** * @see org.jboss.seam.mock.AbstractSeamTest.Request#updateModelValues() */ @Override protected void updateModelValues() throws Exception { setValue("#{user.username}", "testUser"); setValue("#{user.name}", "Test User's Name"); setValue("#{user.password}", "password"); setValue("#{register.verify}", "password"); } /** * @see org.jboss.seam.mock.AbstractSeamTest.Request#invokeApplication() */ @Override protected void invokeApplication() throws Exception { invokeAction("#{register.register}"); } }.run(); } @Test(dependsOnMethods="testRegister") public void testBooking() throws Exception { new FacesRequest() { @Override protected void invokeApplication() throws Exception { Contexts.getSessionContext().set("user", new User("Gavin King", "foobar", "gavin")); setValue("#{identity.username}", "gavin"); setValue("#{identity.password}", "foobar"); invokeAction("#{identity.login}"); } }.run(); new FacesRequest("/main.xhtml") { @Override protected void invokeApplication() { assert invokeAction("#{hotelSearch.find}") == null; } @Override protected void renderResponse() { DataModel hotels = (DataModel) getValue("#{hotels}"); hotels.setRowIndex(0); assert ((Hotel) hotels.getRowData()).getName().equals(HibernateTestService.HIBERNATE_HOTEL_NAME); } }.run(); String id = new FacesRequest("/main.xhtml") { @Override protected void invokeApplication() throws Exception { HotelBookingAction hotelBooking = (HotelBookingAction) getInstance("hotelBooking"); DataModel hotels = (DataModel) Contexts.getSessionContext().get("hotels"); hotels.setRowIndex(0); hotelBooking.selectHotel((Hotel) hotels.getRowData()); } }.run(); id = new FacesRequest("/hotel.xhtml", id) { @Override protected void invokeApplication() { invokeAction("#{hotelBooking.bookHotel}"); } @Override protected void renderResponse() { assert getValue("#{booking.user}") != null; assert getValue("#{booking.hotel}") != null; assert getValue("#{booking.creditCard}") == null; assert getValue("#{booking.creditCardName}") == null; Booking booking = (Booking) Contexts.getConversationContext().get("booking"); assert booking.getHotel() == Contexts.getConversationContext().get("hotel"); assert booking.getUser() == Contexts.getSessionContext().get("user"); assert Manager.instance().isLongRunningConversation(); } }.run(); new FacesRequest("/book.xhtml", id) { @Override @SuppressWarnings("deprecation") protected void updateModelValues() throws Exception { setValue("#{booking.creditCard}", "1234567891021234"); setValue("#{booking.creditCardName}", "GAVIN KING"); setValue("#{booking.beds}", 2); Date now = new Date(); setValue("#{booking.checkinDate}", now); setValue("#{booking.checkoutDate}", now); } @Override protected void invokeApplication() { assert invokeAction("#{hotelBooking.setBookingDetails}") == null; } @Override protected void renderResponse() { Iterator messages = FacesContext.getCurrentInstance().getMessages(); assert messages.hasNext(); FacesMessage message = (FacesMessage) messages.next(); assert message.getSummary().equals("Check out date must be later than check in date"); assert !messages.hasNext(); assert Manager.instance().isLongRunningConversation(); } @Override protected void afterRequest() { assert isInvokeApplicationComplete(); } }.run(); new FacesRequest("/book.xhtml", id) { @Override @SuppressWarnings("deprecation") protected void updateModelValues() throws Exception { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, 2); setValue("#{booking.checkoutDate}", cal.getTime()); } @Override protected void invokeApplication() { invokeAction("#{hotelBooking.setBookingDetails}"); } @Override protected void renderResponse() { assert Manager.instance().isLongRunningConversation(); } @Override protected void afterRequest() { assert isInvokeApplicationComplete(); } }.run(); new FacesRequest("/confirm.xhtml", id) { @Override protected void invokeApplication() { invokeAction("#{hotelBooking.confirm}"); } @Override protected void afterRequest() { assert isInvokeApplicationComplete(); } }.run(); new NonFacesRequest("/main.xhtml") { @Override protected void renderResponse() { ListDataModel bookings = (ListDataModel) getInstance("bookings"); assert bookings.getRowCount() == 1; bookings.setRowIndex(0); Booking booking = (Booking) bookings.getRowData(); assert booking.getHotel().getName().equals(HibernateTestService.HIBERNATE_HOTEL_NAME); assert booking.getUser().getUsername().equals("gavin"); } }.run(); } }