UserTest.cs 9.7 KB

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