BaseStoredProcTests.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using PetaPoco.Tests.Integration.Models;
  6. using Shouldly;
  7. using Xunit;
  8. namespace PetaPoco.Tests.Integration.Databases
  9. {
  10. public abstract class BaseStoredProcTests : BaseDatabase
  11. {
  12. protected abstract Type DataParameterType { get; }
  13. protected BaseStoredProcTests(DBTestProvider provider)
  14. : base(provider)
  15. {
  16. AddPeople(6);
  17. }
  18. protected void AddPeople(int peopleToAdd)
  19. {
  20. for (var i = 0; i < peopleToAdd; i++)
  21. {
  22. var p = new Person
  23. {
  24. Id = Guid.NewGuid(),
  25. Name = "Peta" + i,
  26. Age = 18 + i,
  27. Dob = new DateTime(1980 - (18 + i), 1, 1, 1, 1, 1, DateTimeKind.Utc),
  28. };
  29. DB.Insert(p);
  30. }
  31. }
  32. private IDataParameter GetDataParameter()
  33. {
  34. var param = Activator.CreateInstance(DataParameterType) as IDataParameter;
  35. param.ParameterName = "age";
  36. param.Value = 20;
  37. return param;
  38. }
  39. [Fact]
  40. public void QueryProc_NoParam_ShouldReturnAll()
  41. {
  42. var results = DB.QueryProc<Person>("SelectPeople").ToArray();
  43. results.Length.ShouldBe(6);
  44. }
  45. [Fact]
  46. public void QueryProc_WithParam_ShouldReturnSome()
  47. {
  48. var results = DB.QueryProc<Person>("SelectPeopleWithParam", new { age = 20 }).ToArray();
  49. results.Length.ShouldBe(3);
  50. }
  51. [Fact]
  52. public void QueryProc_WithDbParam_ShouldReturnSome()
  53. {
  54. var results = DB.QueryProc<Person>("SelectPeopleWithParam", GetDataParameter()).ToArray();
  55. results.Length.ShouldBe(3);
  56. }
  57. [Fact]
  58. public void FetchProc_NoParam_ShouldReturnAll()
  59. {
  60. var results = DB.FetchProc<Person>("SelectPeople");
  61. results.Count.ShouldBe(6);
  62. }
  63. [Fact]
  64. public void FetchProc_WithParam_ShouldReturnSome()
  65. {
  66. var results = DB.FetchProc<Person>("SelectPeopleWithParam", new { age = 20 });
  67. results.Count.ShouldBe(3);
  68. }
  69. [Fact]
  70. public void FetchProc_WithDbParam_ShouldReturnSome()
  71. {
  72. var results = DB.FetchProc<Person>("SelectPeopleWithParam", GetDataParameter());
  73. results.Count.ShouldBe(3);
  74. }
  75. [Fact]
  76. public void ScalarProc_NoParam_ShouldReturnAll()
  77. {
  78. var count = DB.ExecuteScalarProc<int>("CountPeople");
  79. count.ShouldBe(6);
  80. }
  81. [Fact]
  82. public void ScalarProc_WithParam_ShouldReturnSome()
  83. {
  84. var count = DB.ExecuteScalarProc<int>("CountPeopleWithParam", new { age = 20 });
  85. count.ShouldBe(3);
  86. }
  87. [Fact]
  88. public void ScalarProc_WithDbParam_ShouldReturnSome()
  89. {
  90. var count = DB.ExecuteScalarProc<int>("CountPeopleWithParam", GetDataParameter());
  91. count.ShouldBe(3);
  92. }
  93. [Fact]
  94. public void NonQueryProc_NoParam_ShouldUpdateAll()
  95. {
  96. DB.ExecuteNonQueryProc("UpdatePeople");
  97. DB.Query<Person>($"WHERE {DB.Provider.EscapeSqlIdentifier("FullName")}='Updated'").Count().ShouldBe(6);
  98. }
  99. [Fact]
  100. public void NonQueryProc_WithParam_ShouldUpdateSome()
  101. {
  102. DB.ExecuteNonQueryProc("UpdatePeopleWithParam", new { age = 20 });
  103. DB.Query<Person>($"WHERE {DB.Provider.EscapeSqlIdentifier("FullName")}='Updated'").Count().ShouldBe(3);
  104. }
  105. [Fact]
  106. public void NonQueryProc_WithDbParam_ShouldUpdateSome()
  107. {
  108. DB.ExecuteNonQueryProc("UpdatePeopleWithParam", GetDataParameter());
  109. DB.Query<Person>($"WHERE {DB.Provider.EscapeSqlIdentifier("FullName")}='Updated'").Count().ShouldBe(3);
  110. }
  111. [Fact]
  112. public async void QueryProcAsync_NoParam_ShouldReturnAll()
  113. {
  114. var results = new List<Person>();
  115. await DB.QueryProcAsync<Person>(p => results.Add(p), "SelectPeople");
  116. results.Count.ShouldBe(6);
  117. }
  118. [Fact]
  119. public async void QueryProcAsync_WithParam_ShouldReturnSome()
  120. {
  121. var results = new List<Person>();
  122. await DB.QueryProcAsync<Person>(p => results.Add(p), "SelectPeopleWithParam", new { age = 20 });
  123. results.Count.ShouldBe(3);
  124. }
  125. [Fact]
  126. public async void QueryProcAsync_WithDbParam_ShouldReturnSome()
  127. {
  128. var results = new List<Person>();
  129. await DB.QueryProcAsync<Person>(p => results.Add(p), "SelectPeopleWithParam", GetDataParameter());
  130. results.Count.ShouldBe(3);
  131. }
  132. [Fact]
  133. public async void QueryProcAsyncReader_NoParam_ShouldReturnAll()
  134. {
  135. var results = new List<Person>();
  136. using (var reader = await DB.QueryProcAsync<Person>("SelectPeople"))
  137. while (await reader.ReadAsync())
  138. results.Add(reader.Poco);
  139. results.Count.ShouldBe(6);
  140. }
  141. [Fact]
  142. public async void QueryProcAsyncReader_WithParam_ShouldReturnSome()
  143. {
  144. var results = new List<Person>();
  145. using (var reader = await DB.QueryProcAsync<Person>("SelectPeopleWithParam", new { age = 20 }))
  146. while (await reader.ReadAsync())
  147. results.Add(reader.Poco);
  148. results.Count.ShouldBe(3);
  149. }
  150. [Fact]
  151. public async void QueryProcAsyncReader_WithDbParam_ShouldReturnSome()
  152. {
  153. var results = new List<Person>();
  154. using (var reader = await DB.QueryProcAsync<Person>("SelectPeopleWithParam", GetDataParameter()))
  155. while (await reader.ReadAsync())
  156. results.Add(reader.Poco);
  157. results.Count.ShouldBe(3);
  158. }
  159. [Fact]
  160. public async void FetchProcAsync_NoParam_ShouldReturnAll()
  161. {
  162. var results = await DB.FetchProcAsync<Person>("SelectPeople");
  163. results.Count.ShouldBe(6);
  164. }
  165. [Fact]
  166. public async void FetchProcAsync_WithParam_ShouldReturnSome()
  167. {
  168. var results = await DB.FetchProcAsync<Person>("SelectPeopleWithParam", new { age = 20 });
  169. results.Count.ShouldBe(3);
  170. }
  171. [Fact]
  172. public async void FetchProcAsync_WithDbParam_ShouldReturnSome()
  173. {
  174. var results = await DB.FetchProcAsync<Person>("SelectPeopleWithParam", GetDataParameter());
  175. results.Count.ShouldBe(3);
  176. }
  177. [Fact]
  178. public async void ScalarProcAsync_NoParam_ShouldReturnAll()
  179. {
  180. var count = await DB.ExecuteScalarProcAsync<int>("CountPeople");
  181. count.ShouldBe(6);
  182. }
  183. [Fact]
  184. public async void ScalarProcAsync_WithParam_ShouldReturnSome()
  185. {
  186. var count = await DB.ExecuteScalarProcAsync<int>("CountPeopleWithParam", new { age = 20 });
  187. count.ShouldBe(3);
  188. }
  189. [Fact]
  190. public async void ScalarProcAsync_WithDbParam_ShouldReturnSome()
  191. {
  192. var count = await DB.ExecuteScalarProcAsync<int>("CountPeopleWithParam", GetDataParameter());
  193. count.ShouldBe(3);
  194. }
  195. [Fact]
  196. public async void NonQueryProcAsync_NoParam_ShouldUpdateAll()
  197. {
  198. await DB.ExecuteNonQueryProcAsync("UpdatePeople");
  199. DB.Query<Person>($"WHERE {DB.Provider.EscapeSqlIdentifier("FullName")}='Updated'").Count().ShouldBe(6);
  200. }
  201. [Fact]
  202. public async void NonQueryProcAsync_WithParam_ShouldUpdateSome()
  203. {
  204. await DB.ExecuteNonQueryProcAsync("UpdatePeopleWithParam", new { age = 20 });
  205. DB.Query<Person>($"WHERE {DB.Provider.EscapeSqlIdentifier("FullName")}='Updated'").Count().ShouldBe(3);
  206. }
  207. [Fact]
  208. public async void NonQueryProcAsync_WithDbParam_ShouldUpdateSome()
  209. {
  210. await DB.ExecuteNonQueryProcAsync("UpdatePeopleWithParam", GetDataParameter());
  211. DB.Query<Person>($"WHERE {DB.Provider.EscapeSqlIdentifier("FullName")}='Updated'").Count().ShouldBe(3);
  212. }
  213. }
  214. }