BaseDatabaseTests.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. using System;
  2. using System.Configuration;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Reflection;
  6. using PetaPoco.Tests.Integration.Models;
  7. using Shouldly;
  8. using Xunit;
  9. namespace PetaPoco.Tests.Integration.Databases
  10. {
  11. public abstract class BaseDatabaseTests : BaseDatabase
  12. {
  13. private readonly Note _note = new Note
  14. {
  15. Text = "A test note",
  16. CreatedOn = new DateTime(1955, 1, 11, 4, 2, 4, DateTimeKind.Utc)
  17. };
  18. protected BaseDatabaseTests(DBTestProvider provider)
  19. : base(provider)
  20. {
  21. }
  22. protected virtual void AfterDbCreate(Database db)
  23. {
  24. }
  25. [Fact]
  26. public void Construct_GivenConnection_ShouldBeValid()
  27. {
  28. var factory = DB.Provider.GetFactory();
  29. using (var connection = factory.CreateConnection())
  30. {
  31. connection.ConnectionString = DB.ConnectionString;
  32. connection.Open();
  33. using (var db = new Database(connection))
  34. {
  35. AfterDbCreate(db);
  36. var key = db.Insert(_note);
  37. var otherNote = db.SingleOrDefault<Note>(key);
  38. _note.ShouldBe(otherNote);
  39. }
  40. }
  41. }
  42. [Fact]
  43. public void Construct_GivenConnectionStringAndProviderName_ShouldBeValid()
  44. {
  45. var providerName = ProviderName;
  46. var connectionString = DB.ConnectionString;
  47. using (var db = new Database(connectionString, providerName))
  48. {
  49. AfterDbCreate(db);
  50. var key = db.Insert(_note);
  51. var otherNote = db.SingleOrDefault<Note>(key);
  52. _note.ShouldBe(otherNote);
  53. }
  54. }
  55. [Fact]
  56. public void Construct_GivenConnectionStringAndProviderFactory_ShouldBeValid()
  57. {
  58. var factory = DB.Provider.GetFactory();
  59. var connectionString = DB.ConnectionString;
  60. using (var db = new Database(connectionString, factory))
  61. {
  62. AfterDbCreate(db);
  63. var key = db.Insert(_note);
  64. var otherNote = db.SingleOrDefault<Note>(key);
  65. _note.ShouldBe(otherNote);
  66. }
  67. }
  68. #if !NETCOREAPP
  69. [Fact]
  70. public void Construct_GivenConnectionStringName_ShouldBeValid()
  71. {
  72. var connectionString = DB.ConnectionString;
  73. var entry = ConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>().FirstOrDefault(c => c.ConnectionString.Equals(connectionString));
  74. using (var db = new Database(entry.Name))
  75. {
  76. AfterDbCreate(db);
  77. var key = db.Insert(_note);
  78. var otherNote = db.SingleOrDefault<Note>(key);
  79. _note.ShouldBe(otherNote);
  80. }
  81. }
  82. #endif
  83. [Fact]
  84. public void Construct_GivenConnectionStringAndProvider_ShouldBeValid()
  85. {
  86. var connectionString = DB.ConnectionString;
  87. var provider = DB.Provider;
  88. using (var db = new Database(connectionString, provider))
  89. {
  90. AfterDbCreate(db);
  91. var key = db.Insert(_note);
  92. var otherNote = db.SingleOrDefault<Note>(key);
  93. _note.ShouldBe(otherNote);
  94. }
  95. }
  96. [Fact]
  97. public void IsolationLevel_WhenChangedDuringTransaction_ShouldThrow()
  98. {
  99. using (DB.GetTransaction())
  100. {
  101. Should.Throw<InvalidOperationException>(() => DB.IsolationLevel = IsolationLevel.Chaos);
  102. }
  103. }
  104. [Fact]
  105. public virtual void BeginTransaction_WhenIsolationLevelIsSet_ShouldBeOfIsolationLevel()
  106. {
  107. DB.IsolationLevel = IsolationLevel.Serializable;
  108. using (var t = DB.GetTransaction())
  109. {
  110. var transaction = (IDbTransaction) DB.GetType().GetField("_transaction", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(DB);
  111. transaction.IsolationLevel.ShouldBe(DB.IsolationLevel.Value);
  112. }
  113. }
  114. [Fact]
  115. public void OpenShredConnection_WhenCalled_ShouldBeValid()
  116. {
  117. DB.Connection.ShouldBeNull();
  118. DB.OpenSharedConnection();
  119. DB.Connection.State.ShouldBe(ConnectionState.Open);
  120. DB.CloseSharedConnection();
  121. }
  122. [Fact]
  123. public async void OpenSharedConnectionAsync_WhenCalled_ShouldBeValid()
  124. {
  125. DB.Connection.ShouldBeNull();
  126. await DB.OpenSharedConnectionAsync();
  127. DB.Connection.State.ShouldBe(ConnectionState.Open);
  128. DB.CloseSharedConnection();
  129. }
  130. }
  131. }