From 07934f0187544c8a76c67e637f84a2f472a06a58 Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Wed, 1 Oct 2014 14:48:47 -0700 Subject: [PATCH] A bare-bones transaction test. Seems to be working... --- .../com/samskivert/depot/DepotRepository.java | 8 ++++ .../java/com/samskivert/depot/CrudTest.java | 2 +- .../com/samskivert/depot/TransactionTest.java | 45 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/samskivert/depot/TransactionTest.java diff --git a/src/main/java/com/samskivert/depot/DepotRepository.java b/src/main/java/com/samskivert/depot/DepotRepository.java index 383e1ae..642ae9e 100644 --- a/src/main/java/com/samskivert/depot/DepotRepository.java +++ b/src/main/java/com/samskivert/depot/DepotRepository.java @@ -115,6 +115,14 @@ public abstract class DepotRepository CONTENTS } + /** + * Returns the persistence context used by this repository. + */ + public PersistenceContext ctx () + { + return _ctx; + } + /** * Loads the persistent object that matches the specified primary key. * diff --git a/src/test/java/com/samskivert/depot/CrudTest.java b/src/test/java/com/samskivert/depot/CrudTest.java index e8f3417..5293f48 100644 --- a/src/test/java/com/samskivert/depot/CrudTest.java +++ b/src/test/java/com/samskivert/depot/CrudTest.java @@ -12,7 +12,7 @@ import org.junit.Test; import static org.junit.Assert.*; /** - * Tests simple create/read/update/delete behaviors. + * Tests simple create/read/update/delete behaviors. */ public class CrudTest extends TestBase { diff --git a/src/test/java/com/samskivert/depot/TransactionTest.java b/src/test/java/com/samskivert/depot/TransactionTest.java new file mode 100644 index 0000000..6d3deed --- /dev/null +++ b/src/test/java/com/samskivert/depot/TransactionTest.java @@ -0,0 +1,45 @@ +// +// Depot library - a Java relational persistence library +// https://github.com/threerings/depot/blob/master/LICENSE + +package com.samskivert.depot; + +import org.junit.Test; +import static org.junit.Assert.*; + +public class TransactionTest extends TestBase +{ + @Test public void testSuccessfulCommit () { + Transaction tx = Transaction.start(_repo.ctx()); + TestRecord in = createTestRecord(1); + _repo.insert(in); + tx.commit(); + + TestRecord out = _repo.loadNoCache(in.recordId); + assertNotNull(out); // we got a result + assertTrue(in != out); // it didn't come from the cache + + // make sure all of the fields were marshalled and unmarshalled correctly + assertTestRecordEquals(in, out); + + // finally clean up after ourselves (because other tests share this database) + _repo.delete(TestRecord.getKey(in.recordId)); + assertNull(_repo.loadNoCache(in.recordId)); + } + + @Test public void testRollback () { + Transaction tx = Transaction.start(_repo.ctx()); + TestRecord in1 = createTestRecord(1); + _repo.insert(in1); + TestRecord in2 = createTestRecord(2); + _repo.insert(in2); + tx.rollback(); + + assertNull(_repo.loadNoCache(in1.recordId)); // we should get no result + assertNull(_repo.loadNoCache(in2.recordId)); // we should get no result + } + + // the HSQL in-memory database persists for the lifetime of the VM, which means we have to + // clean up after ourselves in every test; thus we go ahead and share a repository + protected TestRepository _repo = createTestRepository(); +}