use of org.jpox.samples.models.currency.Currency in project tests by datanucleus.
the class RelationshipTest method test1toNBidir_1to1Unidir.
/**
* Test case for 1-N bidir relationships + 1-1 unidir relationships
*/
public void test1toNBidir_1to1Unidir() throws Exception {
// This test currently relies on identity fields
if (!storeMgr.supportsValueGenerationStrategy("identity")) {
// Lets just say it passed :-)
return;
}
try {
// prepare data
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
Object idEUR = null;
Object idUSD = null;
Object idCHF = null;
try {
tx.begin();
List cs = new ArrayList();
Currency chf = new Currency("CHF");
Currency eur = new Currency("EUR");
Currency usd = new Currency("USD");
cs.add(chf);
cs.add(eur);
cs.add(usd);
List c = new ArrayList();
c.add(new Rate(usd, eur, 0.9));
c.add(new Rate(usd, chf, 1.3));
usd.setRates(c);
c = new ArrayList();
c.add(new Rate(eur, chf, 1.5));
c.add(new Rate(eur, usd, 1.1));
eur.setRates(c);
c = new ArrayList();
c.add(new Rate(chf, eur, 0.7));
c.add(new Rate(chf, usd, 0.8));
chf.setRates(c);
pm.makePersistentAll(cs);
tx.commit();
idEUR = pm.getObjectId(eur);
idUSD = pm.getObjectId(usd);
idCHF = pm.getObjectId(chf);
} catch (Exception e) {
LOG.error("Exception in test", e);
fail("Exception thrown while creating 1-N bi-directional relationships + 1-1 unidirecional relationships data : " + e.getMessage());
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
pm = pmf.getPersistenceManager();
tx = pm.currentTransaction();
try {
tx.begin();
Currency chf = (Currency) pm.getObjectById(idCHF, true);
Currency eur = (Currency) pm.getObjectById(idEUR, true);
Currency usd = (Currency) pm.getObjectById(idUSD, true);
assertEquals("CHF", "CHF", chf.getCurrencyCode());
assertEquals("CHF", 2, chf.getRates().size());
assertEquals("CHF", "EUR", ((Rate) chf.getRates().get(0)).getTarget().getCurrencyCode());
assertEquals("CHF", 0.7, ((Rate) chf.getRates().get(0)).getRate(), 0);
assertEquals("CHF", "USD", ((Rate) chf.getRates().get(1)).getTarget().getCurrencyCode());
assertEquals("CHF", 0.8, ((Rate) chf.getRates().get(1)).getRate(), 0);
assertEquals("EUR", "EUR", eur.getCurrencyCode());
assertEquals("EUR", 2, eur.getRates().size());
assertEquals("EUR", "CHF", ((Rate) eur.getRates().get(0)).getTarget().getCurrencyCode());
assertEquals("EUR", 1.5, ((Rate) eur.getRates().get(0)).getRate(), 0);
assertEquals("EUR", "USD", ((Rate) eur.getRates().get(1)).getTarget().getCurrencyCode());
assertEquals("EUR", 1.1, ((Rate) eur.getRates().get(1)).getRate(), 0);
assertEquals("USD", "USD", usd.getCurrencyCode());
assertEquals("USD", 2, usd.getRates().size());
assertEquals("USD", "EUR", ((Rate) usd.getRates().get(0)).getTarget().getCurrencyCode());
assertEquals("USD", 0.9, ((Rate) usd.getRates().get(0)).getRate(), 0);
assertEquals("USD", "CHF", ((Rate) usd.getRates().get(1)).getTarget().getCurrencyCode());
assertEquals("USD", 1.3, ((Rate) usd.getRates().get(1)).getRate(), 0);
tx.commit();
} catch (Exception e) {
LOG.error("Exception in test", e);
fail("Exception thrown while creating 1-N bi-directional relationships + 1-1 unidirecional relationships data : " + e.getMessage());
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
} finally {
// Clean out any created data
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
Extent ex = pm.getExtent(Rate.class);
Iterator iter = ex.iterator();
while (iter.hasNext()) {
Rate rate = (Rate) iter.next();
if (rate.getSource() != null) {
Currency source = rate.getSource();
rate.setSource(null);
source.setRates(null);
}
if (rate.getTarget() != null) {
rate.setTarget(null);
}
}
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
clean(Rate.class);
clean(Currency.class);
}
}
Aggregations