//$Id: BookingTest.java 5810 2007-07-16 06:46:47Z gavin $
package org.jboss.seam.example.booking.test;
import java.util.Calendar;
import java.util.Date;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.OverProtocol;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.seam.Component;
import org.jboss.seam.annotations.In;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.contexts.Lifecycle;
import org.jboss.seam.core.Manager;
import org.jboss.seam.example.booking.Booking;
import org.jboss.seam.example.booking.BookingListAction;
import org.jboss.seam.example.booking.Hotel;
import org.jboss.seam.example.booking.HotelBookingAction;
import org.jboss.seam.example.booking.HotelSearchingAction;
import org.jboss.seam.example.booking.RecentBookingsAction;
import org.jboss.seam.example.booking.User;
import org.jboss.seam.security.Identity;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
public class BookingTest
{
@Deployment(name="BookingTest")
@OverProtocol("Servlet 3.0")
public static Archive<?> createDeployment()
{
return Deployments.bookingDeployment();
}
@Before
public void before() {
Lifecycle.beginCall();
}
@After
public void after() {
Lifecycle.endCall();
}
@Test
public void testBookHotel() throws Exception
{
Manager manager = Manager.instance();
Identity identity = Identity.instance();
HotelSearchingAction hotelSearch = (HotelSearchingAction)Component.getInstance("hotelSearch");
HotelBookingAction hotelBooking = (HotelBookingAction)Component.getInstance("hotelBooking");
BookingListAction bookingList = (BookingListAction)Component.getInstance("bookingList");
manager.initializeTemporaryConversation();
Contexts.getSessionContext().set("user", new User("Gavin King", "foobar", "gavin"));
identity.setUsername("gavin");
identity.setPassword("foobar");
identity.login();
hotelSearch.setSearchString("Union Square");
hotelSearch.find();
DataModel hotels = (DataModel) Contexts.getSessionContext().get("hotels");
assertEquals(1, hotels.getRowCount());
assertEquals("NY", ((Hotel) hotels.getRowData() ).getCity());
assertEquals("Union Square", hotelSearch.getSearchString());
assertFalse(manager.isLongRunningConversation());
long hotelId = ((Hotel) hotels.getRowData() ).getId();
RecentBookingsAction recentBookings = (RecentBookingsAction)Component.getInstance("recentBookings");
assertNull(recentBookings.getMostRecentBookingDate(hotelId));
hotels = (DataModel) Contexts.getSessionContext().get("hotels");
assertEquals(1, hotels.getRowCount());
hotelBooking.selectHotel( (Hotel) hotels.getRowData() );
Hotel hotel = (Hotel) Contexts.getConversationContext().get("hotel");
assertEquals("NY", hotel.getCity());
assertEquals("10011", hotel.getZip());
assertTrue(manager.isLongRunningConversation());
hotelBooking.bookHotel();
Booking booking = (Booking) Contexts.getConversationContext().get("booking");
assertNotNull(booking.getUser());
assertNotNull(booking.getHotel());
assertNull(booking.getCreditCard());
assertNull(booking.getCreditCardName());
assertEquals(Contexts.getConversationContext().get("hotel"), booking.getHotel());
assertEquals(Contexts.getSessionContext().get("user"), booking.getUser());
assertTrue(Manager.instance().isLongRunningConversation());
booking.setCreditCard("1234567891021234");
booking.setCreditCardName("GAVIN KING");
booking.setBeds(2);
Date now = new Date();
booking.setCheckinDate(now);
booking.setCheckoutDate(now);
hotelBooking.setBookingDetails();
assertFalse(hotelBooking.isBookingValid());
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, 2);
booking.setCheckoutDate(cal.getTime());
hotelBooking.setBookingDetails();
assertTrue(hotelBooking.isBookingValid());
assertTrue(manager.isLongRunningConversation());
hotelBooking.confirm();
ListDataModel bookings = (ListDataModel) Component.getInstance("bookings");
assertEquals(1, bookings.getRowCount());
bookings.setRowIndex(0);
booking = (Booking) bookings.getRowData();
assertEquals("NY", booking.getHotel().getCity());
assertEquals("gavin", booking.getUser().getUsername());
assertFalse(manager.isLongRunningConversation());
recentBookings = (RecentBookingsAction)Component.getInstance("recentBookings");
assertNotNull(recentBookings.getMostRecentBookingDate(hotelId));
bookings = (ListDataModel) Contexts.getSessionContext().get("bookings");
bookings.setRowIndex(0);
bookingList.cancel();
bookings = (ListDataModel) Contexts.getSessionContext().get("bookings");
assertEquals(0, bookings.getRowCount());
assertFalse(manager.isLongRunningConversation());
}
}