public void CannotSetValueToNull_WithinTransaction() { var value = new TransactionalGateway<SimpleObject>(new SimpleObject()); using (var ts = new TransactionScope()) { Assert.Throws<ArgumentNullException>(() => value.Value = null); } }
public void ChangesAreFlushedIntoOriginalObjectOnTransactionCompletion() { var so = new SimpleObject(); ITransactional<SimpleObject> gw = new TransactionalGateway<SimpleObject>(so); Guid newGuid = Guid.NewGuid(); using(var ts = new TransactionScope()) { gw.Value.TestGuid = newGuid; gw.Value.TestInt = 42; gw.Value.TestString = "Hello, World!"; Assert.AreEqual(Guid.Empty, so.TestGuid); Assert.AreEqual(0, so.TestInt); Assert.AreEqual(null, so.TestString); ts.Complete(); } Assert.AreEqual(newGuid, so.TestGuid); Assert.AreEqual(42, so.TestInt); Assert.AreEqual("Hello, World!", so.TestString); }
public void ChangesAreDiscardedOnTransactionRollback() { var so = new SimpleObject(); ITransactional<SimpleObject> gw = new TransactionalGateway<SimpleObject>(so); using (var ts = new TransactionScope()) { gw.Value.TestGuid = Guid.NewGuid(); gw.Value.TestInt = 42; gw.Value.TestString = "Hello, World!"; } Assert.AreEqual(Guid.Empty, so.TestGuid); Assert.AreEqual(0, so.TestInt); Assert.AreEqual(null, so.TestString); }
public void CannotSetValueToNull_OutsideTransaction() { var value = new TransactionalGateway<SimpleObject>(new SimpleObject()); Assert.Throws<ArgumentNullException>(() => value.Value = null); }
public void ChangesVisibleWithinTransaction() { var so = new SimpleObject(); ITransactional<SimpleObject> tso = new TransactionalGateway<SimpleObject>(so); Guid newGuid = Guid.NewGuid(); using (var ts = new TransactionScope()) { tso.Value.TestInt = 42; tso.Value.TestGuid = newGuid; tso.Value.TestString = "Hello, World!"; Assert.AreEqual(42, tso.Value.TestInt); Assert.AreEqual(newGuid, tso.Value.TestGuid); Assert.AreEqual("Hello, World!", tso.Value.TestString); ts.Complete(); } }
public void ChangesNotVisibleOutsideOfTransaction() { var so = new SimpleObject(); ITransactional<SimpleObject> gw = new TransactionalGateway<SimpleObject>(so); Guid newGuid = Guid.NewGuid(); using (var ts = new TransactionScope()) { gw.Value.TestInt = 42; gw.Value.TestGuid = newGuid; gw.Value.TestString = "Hello, World!"; using (var suppressScope = new TransactionScope(TransactionScopeOption.Suppress)) { Assert.AreNotEqual(42, gw.Value.TestInt); Assert.AreNotEqual(newGuid, gw.Value.TestGuid); Assert.AreNotEqual("Hello, World!", gw.Value.TestString); suppressScope.Complete(); } ts.Complete(); } }
public void CopiesInitalValueOnNewTransaction() { Guid newGuid = Guid.NewGuid(); var so = new SimpleObject { TestGuid = newGuid, TestInt = 42, TestString = "Hello, World!" }; ITransactional<SimpleObject> gw = new TransactionalGateway<SimpleObject>(so); using (var ts = new TransactionScope()) { Assert.IsFalse(ReferenceEquals(so, gw.Value)); Assert.AreEqual(so.TestInt, gw.Value.TestInt); Assert.AreEqual(so.TestGuid, gw.Value.TestGuid); Assert.AreEqual(so.TestString, gw.Value.TestString); ts.Complete(); } }
public void InitialValue() { var so = new SimpleObject(); ITransactional<SimpleObject> gw = new TransactionalGateway<SimpleObject>(so); Assert.IsNotNull(gw.Value); Assert.IsTrue(ReferenceEquals(so, gw.Value)); }
public void WithoutTransaction_SettingValueOnlyCopiesData() { var so = new SimpleObject(); ITransactional<SimpleObject> gw = new TransactionalGateway<SimpleObject>(so); Guid newGuid = Guid.NewGuid(); var currentValue = gw.Value; gw.Value = new SimpleObject { TestGuid = newGuid, TestInt = 42, TestString = "Hello, World!" }; Assert.IsTrue(ReferenceEquals(currentValue, gw.Value)); Assert.AreEqual(newGuid, currentValue.TestGuid); Assert.AreEqual(42, currentValue.TestInt); Assert.AreEqual("Hello, World!", currentValue.TestString); }