package org.castor.jpa.scenario.mapped_superclass;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.castor.cpa.util.JDOClassDescriptorResolver;
import org.castor.cpa.util.JDOClassDescriptorResolverImpl;
import org.exolab.castor.jdo.Database;
import org.exolab.castor.jdo.JDOManager;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.xml.sax.InputSource;
public class MappedSuperclassITCase {
public final Log LOG = LogFactory.getLog(getClass());
protected JDOManager jdoManager;
private Database db;
private static final long ID = 1L;
private static final String NAME = "German Keyboard";
private static final int NUMBEROFKEYS = 104;
@Before
public void initDb() throws Exception {
JDOClassDescriptorResolver resolver = new JDOClassDescriptorResolverImpl();
resolver.addClass(org.castor.jpa.scenario.mapped_superclass.Hardware.class);
resolver.addClass(org.castor.jpa.scenario.mapped_superclass.Keyboard.class);
InputSource configuration =
new InputSource(getClass().getResource("derby-jdo-conf.xml").toExternalForm());
JDOManager.loadConfiguration(configuration, null, getClass().getClassLoader(), resolver);
jdoManager = JDOManager.createInstance("testSimple");
db = jdoManager.getDatabase();
assertNotNull(db);
}
@After
public void cleanDb() throws Exception {
if(db != null) {
if (db.isActive()) {
db.rollback();
}
db.close();
}
}
private void cleanDBIfNeeded() throws Exception {
db = jdoManager.getDatabase();
db.begin();
try {
db.remove(db.load(Keyboard.class, ID));
} catch (Exception e) {
}
db.commit();
}
private <T extends Keyboard> void createAndPersistProduct(Class<T> c)
throws Exception {
T hardware = c.newInstance();
hardware.setId(ID);
hardware.setName(NAME);
db.begin();
db.create(hardware);
db.commit();
}
@Test
public void create() throws Exception {
cleanDBIfNeeded();
createAndPersistProduct(Keyboard.class);
db.begin();
final Keyboard keyboard = db.load(Keyboard.class, ID);
db.commit();
assertNotNull(keyboard);
assertEquals(NAME, keyboard.getName());
assertEquals(ID, keyboard.getId());
}
@Test
public void update() throws Exception {
cleanDBIfNeeded();
createAndPersistProduct(Keyboard.class);
db.begin();
final Keyboard keyboard = db.load(Keyboard.class, ID);
assertEquals(0, keyboard.getNumberOfKeys());
keyboard.setNumberOfKeys(NUMBEROFKEYS);
db.commit();
assertNotNull(keyboard);
assertEquals(NUMBEROFKEYS, keyboard.getNumberOfKeys());
db.begin();
final Keyboard keyboardLoaded = db.load(Keyboard.class, ID);
db.commit();
assertNotNull(keyboardLoaded);
assertEquals(NUMBEROFKEYS, keyboardLoaded.getNumberOfKeys());
}
}