Created
January 26, 2013 09:20
-
-
Save mklew/4641265 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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