Skip to content

Instantly share code, notes, and snippets.

@mklew
Created January 26, 2013 09:20
Show Gist options
  • Save mklew/4641265 to your computer and use it in GitHub Desktop.
Save mklew/4641265 to your computer and use it in GitHub Desktop.
package net.mklew.hotelms.persistance;
import net.mklew.hotelms.domain.booking.reservation.rates.*;
import net.mklew.hotelms.domain.room.*;
import net.mklew.hotelms.persistance.hibernate.configuration.HibernateSessionFactory;
import net.mklew.hotelms.persistance.hibernate.configuration.NativelyConfiguredHibernateSessionFactory;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.jcontainer.dna.Logger;
import org.joda.money.Money;
import org.joda.time.DateTime;
import org.testng.annotations.*;
import java.util.List;
import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.Mockito.mock;
/**
* Database end test for Rates: SeasonRate and PackageRate
*
* @author Marek Lewandowski <[email protected]>
* @since 11/6/12
* Time: 11:29 PM
*/
public class RatesPersistanceTest
{
protected SessionFactory sessionFactory;
protected HibernateSessionFactory hibernateSessionFactory;
@BeforeMethod
public void setUpHibernate() throws Exception
{
Logger logger = mock(Logger.class);
NativelyConfiguredHibernateSessionFactory hibernateSessionFactory = new
NativelyConfiguredHibernateSessionFactory(logger);
this.sessionFactory = hibernateSessionFactory.getSessionFactory();
this.hibernateSessionFactory = hibernateSessionFactory;
}
@AfterMethod
public void putItDown() throws Exception
{
sessionFactory.close();
}
@Test
public void should_save_rates_and_retrieve_them_with_success()
{
// given
Money standardPrice = Money.parse("USD 85");
Money upchargeExtraPerson = Money.parse("USD 80");
Money upchargeExtraBed = Money.parse("USD 75");
RoomType roomType = getMeRoomType();
Room room = getMeRoom(roomType);
AvailabilityPeriod availabilityPeriod = new AvailabilityPeriod(DateTime.now(), DateTime.now().plusDays(5),
true);
Season season = new BasicSeason("season name", availabilityPeriod);
Rate seasonRate = new SeasonRate(standardPrice, upchargeExtraPerson, upchargeExtraBed, room, season);
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(roomType);
// session.save(room);
session.getTransaction().commit();
session.close();
session = sessionFactory.openSession();
session.beginTransaction();
// session.save(roomType);
session.save(room);
session.getTransaction().commit();
session.close();
session = sessionFactory.openSession();
session.beginTransaction();
session.save(season);
session.save(seasonRate);
session.getTransaction().commit();
session.close();
// when
session = sessionFactory.openSession();
session.beginTransaction();
final List<Rate> list = session.createQuery("from Rate").list();
// then
assertThat(list).contains(seasonRate);
session.getTransaction().commit();
session.close();
}
@Test( expectedExceptions = org.hibernate.exception.ConstraintViolationException.class)
public void season_rate_should_violate_db_constraints_when_saved_without_season()
{
// given
Money standardPrice = Money.parse("USD 85");
Money upchargeExtraPerson = Money.parse("USD 80");
Money upchargeExtraBed = Money.parse("USD 75");
RoomType roomType = getMeRoomType();
final RoomName roomName = new RoomName("103");
final Money roomStandardPrice = Money.parse("USD 100");
final Money roomUpchargeExtraPerson = Money.parse("USD 50");
final Money roomUpchargeExtraBed = Money.parse("USD 20");
final RackRate rackRate = new RackRate(roomStandardPrice, roomUpchargeExtraPerson, roomUpchargeExtraBed, null);
final int maxExtraBeds = 2;
final Occupancy occupancy = new Occupancy(4, 2);
Room room = new Room("C", roomName, roomType, HousekeepingStatus.CLEAN, RoomAvailability.AVAILABLE,
maxExtraBeds, occupancy, standardPrice, upchargeExtraPerson, upchargeExtraBed);
AvailabilityPeriod availabilityPeriod = new AvailabilityPeriod(DateTime.now(), DateTime.now().plusDays(5),
true);
Season season = new BasicSeason("season name", availabilityPeriod);
Rate seasonRate = new SeasonRate(standardPrice, upchargeExtraPerson, upchargeExtraBed, room, null);
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(room);
// when
session.save(seasonRate);
session.getTransaction().commit();
session.close();
// then exception should be thrown
}
// @Test
// public void package_rate_should_violate_db_constraints_when_saved_without_package()
// {
//
// }
private RoomType getMeRoomType()
{
final RoomType roomType = new RoomType("cheap" + DateTime.now().toString());
return roomType;
}
private Room getMeRoom(RoomType roomType)
{
final RoomName roomName = new RoomName("101001" + DateTime.now().toString());
final Money standardPrice = Money.parse("USD 100");
final Money upchargeExtraPerson = Money.parse("USD 50");
final Money upchargeExtraBed = Money.parse("USD 20");
final RackRate rackRate = new RackRate(standardPrice, upchargeExtraPerson, upchargeExtraBed, null);
final int maxExtraBeds = 2;
final Occupancy occupancy = new Occupancy(4, 2);
return new Room("C", roomName, roomType, HousekeepingStatus.CLEAN, RoomAvailability.AVAILABLE, maxExtraBeds,
occupancy, standardPrice, upchargeExtraPerson, upchargeExtraBed);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment