UserTestAsync.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using Vit.Linq;
  3. namespace Vitorm.MsTest.CommonTest
  4. {
  5. public abstract partial class UserTest<User>
  6. {
  7. public async Task Test_GetAsync()
  8. {
  9. #region Get
  10. {
  11. var user = await Data.GetAsync<User>(1);
  12. Assert.AreEqual(1, user?.id);
  13. }
  14. #endregion
  15. }
  16. public async Task Test_QueryAsync()
  17. {
  18. #region Query
  19. {
  20. var userList = await Data.Query<User>().Where(u => u.id == 1).ToListAsync();
  21. Assert.AreEqual(1, userList.Count);
  22. Assert.AreEqual(1, userList.First().id);
  23. }
  24. #endregion
  25. }
  26. public async Task Test_QueryJoinAsync()
  27. {
  28. #region Query
  29. {
  30. var query =
  31. from user in Data.Query<User>()
  32. from father in Data.Query<User>().Where(father => user.fatherId == father.id)
  33. where user.id > 2
  34. select new { user, father };
  35. var userList = await query.ToListAsync();
  36. Assert.AreEqual(1, userList.Count);
  37. Assert.AreEqual(3, userList.First().user.id);
  38. Assert.AreEqual(5, userList.First().father.id);
  39. }
  40. #endregion
  41. }
  42. public async Task Test_ExecuteUpdateAsync()
  43. {
  44. #region ExecuteUpdate
  45. {
  46. var query = Data.Query<User>();
  47. var count = await query.ExecuteUpdateAsync(row => new User
  48. {
  49. name = "u_" + row.id + "_" + (row.fatherId.ToString() ?? "") + "_" + (row.motherId.ToString() ?? ""),
  50. birth = DateTime.Parse("2021-01-11 00:00:00")
  51. });
  52. Assert.AreEqual(6, count);
  53. WaitForUpdate();
  54. var userList = query.ToList();
  55. Assert.AreEqual("u_1_4_6", userList.First().name);
  56. Assert.AreEqual(DateTime.Parse("2021-01-11 00:00:00"), userList.First().birth);
  57. Assert.AreEqual("u_6__", userList.Last().name);
  58. }
  59. #endregion
  60. }
  61. public async Task Test_ExecuteDeleteAsync()
  62. {
  63. #region ExecuteDelete
  64. {
  65. var query = Data.Query<User>();
  66. var count = await query.Where(u => u.id == 6).ExecuteDeleteAsync();
  67. //Assert.AreEqual(1, count);
  68. WaitForUpdate();
  69. var userList = query.ToList();
  70. Assert.AreEqual(5, userList.Count());
  71. }
  72. #endregion
  73. }
  74. public async Task Test_CreateAsync()
  75. {
  76. #region Create : Add AddRange
  77. {
  78. var newUserList = NewUsers(7, 4, forAdd: true);
  79. // #1 Add
  80. await Data.AddAsync<User>(newUserList[0]);
  81. // #2 AddRange
  82. await Data.AddRangeAsync<User>(newUserList.Skip(1));
  83. WaitForUpdate();
  84. // assert
  85. {
  86. var userList = Data.Query<User>().Where(user => user.id >= 7).ToList();
  87. Assert.AreEqual(newUserList.Count, userList.Count());
  88. Assert.AreEqual(0, userList.Select(m => m.id).Except(newUserList.Select(m => m.id)).Count());
  89. Assert.AreEqual(0, userList.Select(m => m.name).Except(newUserList.Select(m => m.name)).Count());
  90. }
  91. }
  92. #endregion
  93. }
  94. public async Task Test_UpdateAsync()
  95. {
  96. #region Update: Update UpdateRange
  97. {
  98. var ids = Data.Query<User>().OrderBy(u => u.id).Select(u => u.id).ToArray()[^2..];
  99. var newUserList = ids.Select(id => NewUser(id)).Append(NewUser(ids.Last() + 1)).ToList();
  100. // Update
  101. {
  102. var rowCount = await Data.UpdateAsync(newUserList[0]);
  103. Assert.AreEqual(1, rowCount);
  104. }
  105. // UpdateRange
  106. {
  107. var rowCount = await Data.UpdateRangeAsync(newUserList.Skip(1));
  108. Assert.AreEqual(1, rowCount);
  109. }
  110. WaitForUpdate();
  111. // assert
  112. {
  113. var userList = Data.Query<User>().Where(m => ids.Contains(m.id)).ToList();
  114. Assert.AreEqual(2, userList.Count());
  115. Assert.AreEqual(0, userList.Select(m => m.id).Except(newUserList.Select(m => m.id)).Count());
  116. Assert.AreEqual(0, userList.Select(m => m.name).Except(newUserList.Select(m => m.name)).Count());
  117. }
  118. }
  119. #endregion
  120. }
  121. public async Task Test_DeleteAsync()
  122. {
  123. #region Delete : Delete DeleteRange DeleteByKey DeleteByKeys
  124. {
  125. // #1 Delete
  126. {
  127. var rowCount = await Data.DeleteAsync(NewUser(1));
  128. //Assert.AreEqual(1, rowCount);
  129. }
  130. // #2 DeleteRange
  131. {
  132. var rowCount = await Data.DeleteRangeAsync(NewUsers(2, 2));
  133. //Assert.AreEqual(2, rowCount);
  134. }
  135. // #3 DeleteByKey
  136. {
  137. using var dbContext = Data.DataProvider<User>()?.CreateDbContext();
  138. var entityDescriptor = dbContext.GetEntityDescriptor(typeof(User));
  139. var key = entityDescriptor.key;
  140. var user = NewUser(4);
  141. var keyValue = key.GetValue(user);
  142. var rowCount = await Data.DeleteByKeyAsync<User>(keyValue);
  143. //Assert.AreEqual(1, rowCount);
  144. }
  145. // assert
  146. {
  147. WaitForUpdate();
  148. var userList = Data.Query<User>().Where(u => u.id <= 4).ToList();
  149. Assert.AreEqual(0, userList.Count());
  150. }
  151. // #4 DeleteByKeys
  152. {
  153. using var dbContext = Data.DataProvider<User>()?.CreateDbContext();
  154. var entityDescriptor = dbContext.GetEntityDescriptor(typeof(User));
  155. var key = entityDescriptor.key;
  156. var users = Data.Query<User>().ToList();
  157. var keyValues = users.Select(user => key.GetValue(user));
  158. var rowCount = await Data.DeleteByKeysAsync<User, object>(keyValues);
  159. //Assert.AreEqual(users.Count, rowCount);
  160. }
  161. // assert
  162. {
  163. WaitForUpdate();
  164. var userList = Data.Query<User>().ToList();
  165. Assert.AreEqual(0, userList.Count());
  166. }
  167. }
  168. #endregion
  169. }
  170. public async Task Test_TruncateAsync()
  171. {
  172. await Data.TruncateAsync<User>();
  173. }
  174. }
  175. }