/*
* Copyright 2009 Werner Guttmann
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.castor.jpa.scenario.single;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.castor.spring.orm.CastorObjectRetrievalFailureException;
import org.exolab.castor.jdo.Database;
import org.exolab.castor.jdo.JDOManager;
import org.exolab.castor.jdo.PersistenceException;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
/**
* This class is part of the functional test suite for Castor JDO
* and assists in testing JPA annotation support.
*
* @author Werner Guttmann
* @since 1.3.1
*/
@ContextConfiguration(locations = { "spring-config.xml" })
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class StaffCastorDaoTest extends
AbstractTransactionalJUnit4SpringContextTests {
private static Log LOG = LogFactory.getLog(StaffCastorDaoTest.class);
@Autowired
protected JDOManager jdoManager;
@Autowired
private StaffDao staffDao;
@Test
@Transactional
public void save() {
Staff staff = new Staff();
staff.setStaff_id(1234);
staff.setFirst_name("Bob");
staff.setLast_name("Builder");
staff.setEarning(123.45);
staff.setOn_vacation(false);
this.staffDao.save(staff);
Staff st = this.staffDao.getStaff(1234);
assertNotNull(st);
assertEquals("Bob", st.getFirst_name());
assertEquals(123.45, st.getEarning(), 0.1);
}
@Test
// @Transactional
@Rollback(false)
public void update() throws PersistenceException {
Database db = jdoManager.getDatabase();
assertNotNull(db);
Staff staff = new Staff();
staff.setStaff_id(1236);
staff.setFirst_name("Bab");
staff.setLast_name("Builder");
db.begin();
this.staffDao.save(staff);
db.commit();
db.begin();
Staff toUpdate = this.staffDao.getStaff(1236);
assertNotNull(toUpdate);
toUpdate.setFirst_name("Bill");
LOG.debug("try updating");
// this.staffDao.save(toUpdate);
db.commit();
db.begin();
Staff updated = this.staffDao.getStaff(1236);
assertNotNull(updated);
assertEquals("Bill", updated.getFirst_name());
this.staffDao.delete(updated);
db.commit();
db.close();
}
@Test
@Transactional
@Rollback(false)
public void saveWithDelete() throws PersistenceException {
Database db = jdoManager.getDatabase();
assertNotNull(db);
Staff staff = new Staff();
staff.setStaff_id(1235);
staff.setFirst_name("First");
staff.setLast_name("Last");
staff.setEarning(1023.12);
db.begin();
LOG.debug("save First, Last");
this.staffDao.save(staff);
db.commit();
Staff st = this.staffDao.getStaff(1235);
assertNotNull(st);
assertEquals("First", st.getFirst_name());
db.begin();
LOG.debug("delete First, Last");
this.staffDao.delete(st);
db.commit();
try {
db.begin();
this.staffDao.getStaff(1235);
fail();
} catch (CastorObjectRetrievalFailureException e) {
LOG.debug("First, Last not found in DB");
} finally {
db.commit();
}
}
}