UserTest.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using Vit.Extensions.Vitorm_Extensions;
  3. namespace Vitorm.MsTest
  4. {
  5. public abstract class UserTest<User> where User : Vitorm.MsTest.UserBase, new()
  6. {
  7. public virtual void WaitForUpdate() { }
  8. public abstract User NewUser(int id, bool forAdd = false);
  9. public virtual List<User> NewUsers(int startId, int count = 1, bool forAdd = false)
  10. {
  11. return Enumerable.Range(startId, count).Select(id => NewUser(id, forAdd)).ToList();
  12. }
  13. public void Test_Get()
  14. {
  15. #region #1 Get
  16. {
  17. var user = Data.Get<User>(1);
  18. Assert.AreEqual(1, user?.id);
  19. }
  20. #endregion
  21. }
  22. public void Test_Query()
  23. {
  24. #region #2 Query
  25. {
  26. var userList = Data.Query<User>().Where(u => u.id == 1).ToList();
  27. Assert.AreEqual(1, userList.Count);
  28. Assert.AreEqual(1, userList.First().id);
  29. }
  30. #endregion
  31. }
  32. public void Test_QueryJoin()
  33. {
  34. #region #2 Query
  35. {
  36. var query =
  37. from user in Data.Query<User>()
  38. from father in Data.Query<User>().Where(father => user.fatherId == father.id)
  39. where user.id > 2
  40. select new { user, father };
  41. var userList = query.ToList();
  42. Assert.AreEqual(1, userList.Count);
  43. Assert.AreEqual(3, userList.First().user.id);
  44. Assert.AreEqual(5, userList.First().father.id);
  45. }
  46. #endregion
  47. }
  48. public void Test_ToExecuteString()
  49. {
  50. #region ToExecuteString
  51. {
  52. var query = Data.Query<User>().Where(u => u.id == 1);
  53. var sql = query.ToExecuteString();
  54. Assert.IsNotNull(sql);
  55. }
  56. #endregion
  57. }
  58. public void Test_ExecuteUpdate()
  59. {
  60. #region #3 ExecuteUpdate
  61. {
  62. var query = Data.Query<User>();
  63. var count = query.ExecuteUpdate(row => new User
  64. {
  65. name = "u_" + row.id + "_" + (row.fatherId.ToString() ?? "") + "_" + (row.motherId.ToString() ?? ""),
  66. birth = DateTime.Parse("2021-01-11 00:00:00")
  67. });
  68. Assert.AreEqual(6, count);
  69. WaitForUpdate();
  70. var userList = query.ToList();
  71. Assert.AreEqual("u_1_4_6", userList.First().name);
  72. Assert.AreEqual(DateTime.Parse("2021-01-11 00:00:00"), userList.First().birth);
  73. Assert.AreEqual("u_6__", userList.Last().name);
  74. }
  75. #endregion
  76. }
  77. public void Test_ExecuteDelete()
  78. {
  79. #region #4 ExecuteDelete
  80. {
  81. var query = Data.Query<User>();
  82. var count = query.Where(u => u.id == 6).ExecuteDelete();
  83. //Assert.AreEqual(1, count);
  84. WaitForUpdate();
  85. var userList = query.ToList();
  86. Assert.AreEqual(5, userList.Count());
  87. }
  88. #endregion
  89. }
  90. public void Test_Create()
  91. {
  92. #region #5 Create : Add AddRange
  93. {
  94. var newUserList = NewUsers(7, 4, forAdd: true);
  95. // #1 Add
  96. Data.Add<User>(newUserList[0]);
  97. // #2 AddRange
  98. Data.AddRange<User>(newUserList.Skip(1));
  99. WaitForUpdate();
  100. // assert
  101. {
  102. var userList = Data.Query<User>().Where(user => user.id >= 7).ToList();
  103. Assert.AreEqual(newUserList.Count, userList.Count());
  104. Assert.AreEqual(0, userList.Select(m => m.id).Except(newUserList.Select(m => m.id)).Count());
  105. Assert.AreEqual(0, userList.Select(m => m.name).Except(newUserList.Select(m => m.name)).Count());
  106. }
  107. }
  108. #endregion
  109. }
  110. public void Test_Update()
  111. {
  112. #region #6 Update: Update UpdateRange
  113. {
  114. var ids = Data.Query<User>().OrderBy(u => u.id).Select(u => u.id).ToArray()[^2..];
  115. var newUserList = ids.Select(id => NewUser(id)).Append(NewUser(ids.Last() + 1)).ToList();
  116. // Update
  117. {
  118. var rowCount = Data.Update(newUserList[0]);
  119. Assert.AreEqual(1, rowCount);
  120. }
  121. // UpdateRange
  122. {
  123. var rowCount = Data.UpdateRange(newUserList.Skip(1));
  124. Assert.AreEqual(1, rowCount);
  125. }
  126. WaitForUpdate();
  127. // assert
  128. {
  129. var userList = Data.Query<User>().Where(m => ids.Contains(m.id)).ToList();
  130. Assert.AreEqual(2, userList.Count());
  131. Assert.AreEqual(0, userList.Select(m => m.id).Except(newUserList.Select(m => m.id)).Count());
  132. Assert.AreEqual(0, userList.Select(m => m.name).Except(newUserList.Select(m => m.name)).Count());
  133. }
  134. }
  135. #endregion
  136. }
  137. public void Test_Delete()
  138. {
  139. #region #7 Delete : Delete DeleteRange DeleteByKey DeleteByKeys
  140. {
  141. // #1 Delete
  142. {
  143. var rowCount = Data.Delete(NewUser(1));
  144. //Assert.AreEqual(1, rowCount);
  145. }
  146. // #2 DeleteRange
  147. {
  148. var rowCount = Data.DeleteRange(NewUsers(2, 2));
  149. //Assert.AreEqual(2, rowCount);
  150. }
  151. // #3 DeleteByKey
  152. {
  153. using var dbContext = Data.DataProvider<User>()?.CreateDbContext();
  154. var entityDescriptor = dbContext.GetEntityDescriptor(typeof(User));
  155. var key = entityDescriptor.key;
  156. var user = NewUser(4);
  157. var keyValue = key.GetValue(user);
  158. var rowCount = Data.DeleteByKey<User>(keyValue);
  159. //Assert.AreEqual(1, rowCount);
  160. }
  161. // assert
  162. {
  163. WaitForUpdate();
  164. var userList = Data.Query<User>().Where(u => u.id <= 4).ToList();
  165. Assert.AreEqual(0, userList.Count());
  166. }
  167. // #4 DeleteByKeys
  168. {
  169. using var dbContext = Data.DataProvider<User>()?.CreateDbContext();
  170. var entityDescriptor = dbContext.GetEntityDescriptor(typeof(User));
  171. var key = entityDescriptor.key;
  172. var users = Data.Query<User>().ToList();
  173. var keyValues = users.Select(user => key.GetValue(user));
  174. var rowCount = Data.DeleteByKeys<User, object>(keyValues);
  175. //Assert.AreEqual(users.Count, rowCount);
  176. }
  177. // assert
  178. {
  179. WaitForUpdate();
  180. var userList = Data.Query<User>().ToList();
  181. Assert.AreEqual(0, userList.Count());
  182. }
  183. }
  184. #endregion
  185. }
  186. public void Test_DbContext()
  187. {
  188. #region #8 get DbContext and entityDescriptor
  189. {
  190. using var dbContext = Data.DataProvider<User>()?.CreateDbContext();
  191. var entityDescriptor = dbContext.GetEntityDescriptor(typeof(User));
  192. Assert.IsNotNull(entityDescriptor);
  193. }
  194. #endregion
  195. }
  196. }
  197. }