Files
spring-net/test/Spring/Spring.Data.Tests/Transaction/Support/DefaultTransactionStatusTests.cs
2018-09-22 14:57:29 +03:00

105 lines
4.6 KiB
C#

using FakeItEasy;
using NUnit.Framework;
namespace Spring.Transaction.Support
{
[TestFixture]
public class DefaultTransactionStatusTests
{
[Test]
public void DefaultConstructorTests()
{
ISmartTransactionObject txn = A.Fake<ISmartTransactionObject>();
DefaultTransactionStatus stat = new DefaultTransactionStatus(txn, true, false, false, true, new object());
Assert.IsNotNull(stat.Transaction);
Assert.IsTrue(!stat.ReadOnly);
Assert.IsTrue(!stat.NewSynchronization);
Assert.IsNotNull(stat.SuspendedResources);
Assert.IsTrue(stat.IsNewTransaction);
Assert.IsTrue(! stat.RollbackOnly);
stat.SetRollbackOnly();
Assert.IsTrue(stat.RollbackOnly);
}
[Test]
public void CreateSavepointException()
{
ISmartTransactionObject transaction = A.Fake<ISmartTransactionObject>();
DefaultTransactionStatus stat = new DefaultTransactionStatus(transaction, true, false, false, true, new object());
Assert.Throws<NestedTransactionNotSupportedException>(() => stat.CreateSavepoint("mySavePoint"));
}
[Test]
public void RollbackSavepointException()
{
ISmartTransactionObject transaction = A.Fake<ISmartTransactionObject>();
DefaultTransactionStatus stat = new DefaultTransactionStatus(transaction, true, false, false, true, new object());
Assert.Throws<NestedTransactionNotSupportedException>(() => stat.RollbackToSavepoint(null));
}
[Test]
public void ReleaseSavepointException()
{
ISmartTransactionObject transaction = A.Fake<ISmartTransactionObject>();
DefaultTransactionStatus stat = new DefaultTransactionStatus(transaction, true, false, false, true, new object());
Assert.Throws<NestedTransactionNotSupportedException>(() => stat.ReleaseSavepoint(null));
}
[Test]
public void CreateSaveAndHoldValidSavepoint()
{
ISavepointManager saveMgr = A.Fake<ISavepointManager>();
DefaultTransactionStatus status = new DefaultTransactionStatus(saveMgr, true, false, false, true, new object());
status.CreateAndHoldSavepoint("savepoint");
Assert.IsTrue(status.HasSavepoint);
Assert.AreEqual("savepoint", status.Savepoint);
}
[Test]
public void RollbackHeldSavepointException()
{
ISmartTransactionObject transaction = A.Fake<ISmartTransactionObject>();
DefaultTransactionStatus stat = new DefaultTransactionStatus(transaction, true, false, false, true, new object());
Assert.Throws<TransactionUsageException>(() => stat.RollbackToHeldSavepoint());
}
[Test]
public void RollbackHeldSavepointSuccess()
{
ISavepointManager saveMgr = A.Fake<ISavepointManager>();
string savepoint = "savepoint";
DefaultTransactionStatus status = new DefaultTransactionStatus(saveMgr, true, false, false, true, new object());
status.CreateAndHoldSavepoint(savepoint);
Assert.IsTrue(status.HasSavepoint);
Assert.AreEqual(savepoint, status.Savepoint);
status.RollbackToHeldSavepoint();
A.CallTo(() => saveMgr.RollbackToSavepoint(savepoint)).MustHaveHappened();
}
[Test]
public void ReleaseHeldSavepointException()
{
ISmartTransactionObject transaction = A.Fake<ISmartTransactionObject>();
DefaultTransactionStatus stat = new DefaultTransactionStatus(transaction, true, false, false, true, new object());
Assert.Throws<TransactionUsageException>(() => stat.ReleaseHeldSavepoint());
}
[Test]
public void ReleaseHeldSavepointSuccess()
{
ISavepointManager saveMgr = A.Fake<ISavepointManager>();
string savepoint = "savepoint";
DefaultTransactionStatus status = new DefaultTransactionStatus(saveMgr, true, false, false, true, new object());
status.CreateAndHoldSavepoint(savepoint);
Assert.IsTrue(status.HasSavepoint);
Assert.AreEqual(savepoint, status.Savepoint);
status.ReleaseHeldSavepoint();
A.CallTo(() => saveMgr.CreateSavepoint(savepoint)).MustHaveHappened();
A.CallTo(() => saveMgr.ReleaseSavepoint(savepoint)).MustHaveHappened();
}
}
}