/src/NHibernate.Test/Linq/QueryFlushModeTests.cs

https://github.com/RogerKratz/nhibernate-core
C# | 166 lines | 138 code | 25 blank | 3 comment | 7 complexity | 5d1c81262623cc4d6f4dab353b464b34 MD5 | raw file
  1. using System.Linq;
  2. using NHibernate.Cfg;
  3. using NHibernate.Linq;
  4. using NUnit.Framework;
  5. namespace NHibernate.Test.Linq
  6. {
  7. [TestFixture]
  8. public class QueryFlushModeTests : LinqTestCase
  9. {
  10. protected override void Configure(Configuration configuration)
  11. {
  12. configuration.SetProperty(Environment.GenerateStatistics, "true");
  13. base.Configure(configuration);
  14. }
  15. [Test]
  16. public void CanSetFlushModeOnQueries(
  17. [Values(FlushMode.Always, FlushMode.Auto, FlushMode.Commit, FlushMode.Manual)]
  18. FlushMode flushMode)
  19. {
  20. Sfi.Statistics.Clear();
  21. using (var t = session.BeginTransaction())
  22. {
  23. var customer = db.Customers.First();
  24. customer.CompanyName = "Blah";
  25. var unused =
  26. db.Customers
  27. .Where(c => c.CompanyName == "Bon app'")
  28. .WithOptions(o => o.SetFlushMode(flushMode))
  29. .ToList();
  30. var expectedFlushCount = 0;
  31. switch (flushMode)
  32. {
  33. case FlushMode.Always:
  34. case FlushMode.Auto:
  35. expectedFlushCount++;
  36. break;
  37. }
  38. Assert.That(Sfi.Statistics.FlushCount, Is.EqualTo(expectedFlushCount), "Unexpected flush count on same entity query");
  39. customer.CompanyName = "Other blah";
  40. var dummy =
  41. db.Orders
  42. .Where(o => o.OrderId > 10)
  43. .WithOptions(o => o.SetFlushMode(flushMode))
  44. .ToList();
  45. switch (flushMode)
  46. {
  47. case FlushMode.Always:
  48. expectedFlushCount++;
  49. break;
  50. }
  51. Assert.That(Sfi.Statistics.FlushCount, Is.EqualTo(expectedFlushCount), "Unexpected flush count on other entity query");
  52. // Tests here should not alter data, LinqTestCase derives from ReadonlyTestCase
  53. t.Rollback();
  54. }
  55. }
  56. [Test]
  57. public void CanSetCommentOnPagingQuery(
  58. [Values(FlushMode.Always, FlushMode.Auto, FlushMode.Commit, FlushMode.Manual)]
  59. FlushMode flushMode)
  60. {
  61. Sfi.Statistics.Clear();
  62. using (var t = session.BeginTransaction())
  63. {
  64. var customer = db.Customers.First();
  65. customer.CompanyName = "Blah";
  66. var unused =
  67. db.Customers
  68. .Skip(1).Take(1)
  69. .WithOptions(o => o.SetFlushMode(flushMode))
  70. .ToList();
  71. var expectedFlushCount = 0;
  72. switch (flushMode)
  73. {
  74. case FlushMode.Always:
  75. case FlushMode.Auto:
  76. expectedFlushCount++;
  77. break;
  78. }
  79. Assert.That(Sfi.Statistics.FlushCount, Is.EqualTo(expectedFlushCount), "Unexpected flush count on same entity query");
  80. customer.CompanyName = "Other blah";
  81. var dummy =
  82. db.Orders
  83. .Skip(1).Take(1)
  84. .WithOptions(o => o.SetFlushMode(flushMode))
  85. .ToList();
  86. switch (flushMode)
  87. {
  88. case FlushMode.Always:
  89. expectedFlushCount++;
  90. break;
  91. }
  92. Assert.That(Sfi.Statistics.FlushCount, Is.EqualTo(expectedFlushCount), "Unexpected flush count on other entity query");
  93. // Tests here should not alter data, LinqTestCase derives from ReadonlyTestCase
  94. t.Rollback();
  95. }
  96. }
  97. [Test]
  98. public void CanSetCommentBeforeSkipOnOrderedPageQuery(
  99. [Values(FlushMode.Always, FlushMode.Auto, FlushMode.Commit, FlushMode.Manual)]
  100. FlushMode flushMode)
  101. {
  102. Sfi.Statistics.Clear();
  103. using (var t = session.BeginTransaction())
  104. {
  105. var customer = db.Customers.First();
  106. customer.CompanyName = "Blah";
  107. var unused =
  108. db.Customers
  109. .OrderBy(c => c.CompanyName)
  110. .Skip(5).Take(5)
  111. .WithOptions(o => o.SetFlushMode(flushMode))
  112. .ToList();
  113. var expectedFlushCount = 0;
  114. switch (flushMode)
  115. {
  116. case FlushMode.Always:
  117. case FlushMode.Auto:
  118. expectedFlushCount++;
  119. break;
  120. }
  121. Assert.That(Sfi.Statistics.FlushCount, Is.EqualTo(expectedFlushCount), "Unexpected flush count on same entity query");
  122. customer.CompanyName = "Other blah";
  123. var dummy =
  124. db.Orders
  125. .OrderBy(o => o.OrderId)
  126. .Skip(5).Take(5)
  127. .WithOptions(o => o.SetFlushMode(flushMode))
  128. .ToList();
  129. switch (flushMode)
  130. {
  131. case FlushMode.Always:
  132. expectedFlushCount++;
  133. break;
  134. }
  135. Assert.That(Sfi.Statistics.FlushCount, Is.EqualTo(expectedFlushCount), "Unexpected flush count on other entity query");
  136. // Tests here should not alter data, LinqTestCase derives from ReadonlyTestCase
  137. t.Rollback();
  138. }
  139. }
  140. }
  141. }