package fr.mch.mdo.restaurant.dao.tables.hibernate;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import junit.framework.Test;
import junit.framework.TestSuite;
import fr.mch.mdo.restaurant.beans.IMdoBean;
import fr.mch.mdo.restaurant.dao.DaoServicesFactory;
import fr.mch.mdo.restaurant.dao.IDaoServices;
import fr.mch.mdo.restaurant.dao.beans.Credit;
import fr.mch.mdo.restaurant.dao.beans.Restaurant;
import fr.mch.mdo.restaurant.dao.hibernate.DefaultDaoServicesTestCase;
import fr.mch.mdo.restaurant.dao.tables.ICreditsDao;
import fr.mch.mdo.restaurant.exception.MdoException;
import fr.mch.mdo.test.MdoTestCase;
public class DefaultCreditsDaoTest extends DefaultDaoServicesTestCase
{
private int incrementReference = 0;
/**
* Create the test case
*
* @param testName
* name of the test case
*/
public DefaultCreditsDaoTest(String testName) {
super(testName);
}
/**
* @return the suite of tests being tested
*/
public static Test suite() {
return new TestSuite(DefaultCreditsDaoTest.class);
}
protected IDaoServices getInstance() {
return DefaultCreditsDao.getInstance();
}
protected IMdoBean createNewBean() {
// Use the existing data in database
Restaurant restaurant = null;
try {
restaurant = (Restaurant) DaoServicesFactory.getRestaurantsDao().findByPrimaryKey(1L);
} catch (MdoException e) {
fail("Could not found the restaurant.");
}
assertNotNull("The restaurant must not be null.", restaurant);
String reference = DefaultDaoServicesTestCase.CREDIT_FIRST_REFERENCE.concat(String.valueOf(++incrementReference));
BigDecimal amount = BigDecimal.ONE;
Date createdDate = new Date();
Date closingDate = null;
Boolean printed = Boolean.FALSE;
return createNewBean(restaurant, reference, amount, createdDate, closingDate, printed);
}
protected List<IMdoBean> createListBeans() {
List<IMdoBean> list = new ArrayList<IMdoBean>();
// Use the existing data in database
Restaurant restaurant = null;
try {
restaurant = (Restaurant) DaoServicesFactory.getRestaurantsDao().findByPrimaryKey(1L);
} catch (MdoException e) {
fail("Could not found the restaurant.");
}
assertNotNull("The restaurant must not be null.", restaurant);
String reference = DefaultDaoServicesTestCase.CREDIT_FIRST_REFERENCE.concat(String.valueOf(++incrementReference));
BigDecimal amount = BigDecimal.TEN;
Date createdDate = new Date();
Date closingDate = null;
Boolean printed = Boolean.FALSE;
list.add(createNewBean(restaurant, reference, amount, createdDate, closingDate, printed));
return list;
}
public void testGetInstance() {
assertTrue(this.getInstance() instanceof ICreditsDao);
assertTrue(this.getInstance() instanceof DefaultCreditsDao);
}
@Override
public void doFindByUniqueKey() {
// CREDIT_FIRST_REFERENCE code was created at HSQLDB startup
Long restaurantId = 1L;
String reference = DefaultDaoServicesTestCase.CREDIT_FIRST_REFERENCE;
try {
IMdoBean bean = this.getInstance().findByUniqueKey(new Object[] { restaurantId, reference });
assertNotNull("IMdoBean must not be null", bean);
assertTrue("IMdoBean must be instance of " + Credit.class, bean instanceof Credit);
Credit castedBean = (Credit) bean;
assertNotNull("Credit restaurant must not be null", castedBean.getRestaurant());
assertEquals("Credit restaurant Id must be equals to unique key", restaurantId, castedBean.getRestaurant().getId());
assertNotNull("Credit reference must not be null", castedBean.getReference());
assertEquals("Credit reference must be equals to unique key", reference, castedBean.getReference());
assertFalse("Credit must not be deleted", castedBean.isDeleted());
} catch (Exception e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
}
@Override
public void doUpdate() {
IMdoBean newBean = null;
// Use the existing data in database
Restaurant restaurant = null;
try {
restaurant = (Restaurant) DaoServicesFactory.getRestaurantsDao().findByPrimaryKey(1L);
} catch (MdoException e) {
fail("Could not found the restaurant.");
}
assertNotNull("The restaurant must not be null.", restaurant);
String reference = DefaultDaoServicesTestCase.CREDIT_FIRST_REFERENCE.concat(String.valueOf(++incrementReference));
BigDecimal amount = BigDecimal.ZERO;
Date createdDate = new Date();
Date closingDate = null;
Boolean printed = Boolean.FALSE;
newBean = createNewBean(restaurant, reference, amount, createdDate, closingDate, printed);
try {
// Create new bean to be updated
IMdoBean beanToBeUpdated = this.getInstance().insert(newBean);
assertTrue("IMdoBean must be instance of " + Credit.class, beanToBeUpdated instanceof Credit);
Credit castedBean = (Credit) beanToBeUpdated;
assertNotNull("Credit reference must not be null", castedBean.getReference());
assertEquals("Credit reference must be equals to the inserted value", reference, castedBean.getReference());
assertFalse("Credit must not be deleted", castedBean.isDeleted());
// Update the created bean
reference = DefaultDaoServicesTestCase.CREDIT_FIRST_REFERENCE.concat(String.valueOf(++incrementReference));
amount = BigDecimal.valueOf(5.123456789);
closingDate = new Date();
castedBean.setReference(reference);
castedBean.setAmount(amount);
castedBean.setClosingDate(closingDate);
castedBean.setDeleted(true);
this.getInstance().update(castedBean);
// Reload the modified bean
Credit updatedBean = new Credit();
updatedBean.setId(castedBean.getId());
this.getInstance().load(updatedBean);
assertNotNull("Credit reference must not be null", updatedBean.getReference());
assertEquals("Credit reference must be equals to the updated value", reference, updatedBean.getReference());
assertEquals("Credit amount must be equals to the updated value", super.decimalFormat.format(amount), super.decimalFormat.format(updatedBean.getAmount()));
assertEquals("Credit closing Date must be equals to the updated value", closingDate, updatedBean.getClosingDate());
assertTrue("Credit must be deleted", castedBean.isDeleted());
this.getInstance().delete(updatedBean);
} catch (Exception e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + ": " + e.getMessage());
}
}
@Override
public void doUpdateFieldsAndDeleteByKeysSpecific() {
IMdoBean newBean = null;
// Use the existing data in database
Restaurant restaurant = null;
try {
restaurant = (Restaurant) DaoServicesFactory.getRestaurantsDao().findByPrimaryKey(1L);
} catch (MdoException e) {
fail("Could not found the restaurant.");
}
assertNotNull("The restaurant must not be null.", restaurant);
String reference = DefaultDaoServicesTestCase.CREDIT_FIRST_REFERENCE.concat(String.valueOf(++incrementReference));
BigDecimal amount = BigDecimal.ZERO;
Date createdDate = new Date();
Date closingDate = null;
Boolean printed = Boolean.FALSE;
newBean = createNewBean(restaurant, reference, amount, createdDate, closingDate, printed);
try {
// Create new bean to be updated
IMdoBean beanToBeUpdated = this.getInstance().insert(newBean);
assertTrue("IMdoBean must be instance of " + Credit.class, beanToBeUpdated instanceof Credit);
Credit castedBean = (Credit) beanToBeUpdated;
assertNotNull("Credit reference must not be null", castedBean.getReference());
assertEquals("Credit reference must be equals to the inserted value", reference, castedBean.getReference());
assertFalse("Credit must not be deleted", castedBean.isDeleted());
// Update the created bean
Map<String, Object> fields = new HashMap<String, Object>();
Map<String, Object> keys = new HashMap<String, Object>();
castedBean.setAmount(BigDecimal.ONE);
castedBean.setClosingDate(new Date());
castedBean.setCreatedDate(new Date());
castedBean.setPrinted(Boolean.TRUE);
castedBean.setReference("reference");
fields.put("amount", castedBean.getAmount());
fields.put("closingDate", castedBean.getClosingDate());
fields.put("createdDate", castedBean.getCreatedDate());
fields.put("printed", castedBean.getPrinted());
fields.put("reference", castedBean.getReference());
keys.put("id", castedBean.getId());
this.getInstance().updateFieldsByKeys(fields, keys);
// Reload the modified bean
Credit updatedBean = (Credit) createNewBean();
updatedBean.setId(castedBean.getId());
this.getInstance().load(updatedBean);
assertEquals("Check updated fields ", castedBean.getAmount(), updatedBean.getAmount());
assertEquals("Check updated fields ", castedBean.getClosingDate(), updatedBean.getClosingDate());
assertEquals("Check updated fields ", castedBean.getCreatedDate(), updatedBean.getCreatedDate());
assertEquals("Check updated fields ", castedBean.getPrinted(), updatedBean.getPrinted());
assertEquals("Check updated fields ", castedBean.getReference(), updatedBean.getReference());
// Delete the bean by keys
// Take the fields as keys
super.doDeleteByKeysSpecific(updatedBean, fields);
} catch (Exception e) {
fail(MdoTestCase.DEFAULT_FAILED_MESSAGE + " " + e.getMessage());
}
}
private IMdoBean createNewBean(Restaurant restaurant, String reference, BigDecimal amount, Date createdDate, Date closingDate, Boolean printed) {
Credit newBean = new Credit();
newBean.setRestaurant(restaurant);
newBean.setReference(reference);
newBean.setAmount(amount);
newBean.setCreatedDate(createdDate);
newBean.setClosingDate(closingDate);
newBean.setPrinted(printed);
return newBean;
}
}