UserTest.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. using Microsoft.VisualStudio.TestTools.UnitTesting;
  2. using Vit.Extensions.Vitorm_Extensions;
  3. using Vitorm.DataProvider;
  4. namespace Vitorm.MsTest
  5. {
  6. public abstract class UserTest<User> where User : Vitorm.MsTest.User, new()
  7. {
  8. public abstract User NewUser(int id);
  9. public virtual List<User> NewUsers(int startId, int count = 1)
  10. {
  11. return Enumerable.Range(startId, count).Select(NewUser).ToList();
  12. }
  13. public void Test()
  14. {
  15. #region #1 Get
  16. {
  17. var user = Data.Get<User>(1);
  18. Assert.AreEqual(1, user?.id);
  19. }
  20. #endregion
  21. #region #2 Query
  22. {
  23. var query =
  24. from user in Data.Query<User>()
  25. from father in Data.Query<User>().Where(father => user.fatherId == father.id)
  26. where user.id > 2
  27. select new { user, father };
  28. var sql = query.ToExecuteString();
  29. var userList = query.ToList();
  30. Assert.AreEqual(1, userList.Count);
  31. Assert.AreEqual(3, userList.First().user.id);
  32. Assert.AreEqual(5, userList.First().father.id);
  33. }
  34. #endregion
  35. #region #3 ExecuteUpdate
  36. {
  37. var query = Data.Query<User>();
  38. var count = query.ExecuteUpdate(row => new User
  39. {
  40. name = "u_" + row.id + "_" + (row.fatherId.ToString() ?? "") + "_" + (row.motherId.ToString() ?? ""),
  41. birth = DateTime.Parse("2021-01-11 00:00:00")
  42. });
  43. Assert.AreEqual(6, count);
  44. var userList = query.ToList();
  45. Assert.AreEqual("u_1_4_6", userList.First().name);
  46. Assert.AreEqual(DateTime.Parse("2021-01-11 00:00:00"), userList.First().birth);
  47. Assert.AreEqual("u_6__", userList.Last().name);
  48. }
  49. #endregion
  50. #region #4 ExecuteDelete
  51. {
  52. var query = Data.Query<User>();
  53. var count = query.Where(u => u.id == 6).ExecuteDelete();
  54. Assert.AreEqual(1, count);
  55. var userList = query.ToList();
  56. Assert.AreEqual(5, userList.Count());
  57. }
  58. #endregion
  59. #region #5 Create : Add AddRange
  60. {
  61. var newUserList = NewUsers(7, 4);
  62. // #1 Add
  63. Data.Add<User>(newUserList[0]);
  64. // #2 AddRange
  65. Data.AddRange<User>(newUserList.Skip(1));
  66. Thread.Sleep(1000);
  67. // assert
  68. {
  69. var userList = Data.Query<User>().Where(user => user.id >= 7).ToList();
  70. Assert.AreEqual(newUserList.Count, userList.Count());
  71. Assert.AreEqual(0, userList.Select(m => m.id).Except(newUserList.Select(m => m.id)).Count());
  72. Assert.AreEqual(0, userList.Select(m => m.name).Except(newUserList.Select(m => m.name)).Count());
  73. }
  74. try
  75. {
  76. Data.Add<User>(newUserList[0]);
  77. Assert.Fail("should not be able to add same key twice");
  78. }
  79. catch (Exception ex) when (ex is not AssertFailedException)
  80. {
  81. }
  82. }
  83. #endregion
  84. #region #6 Update: Update UpdateRange
  85. {
  86. var ids = Data.Query<User>().OrderBy(u => u.id).Select(u => u.id).ToArray()[^2..];
  87. var newUserList = ids.Select(NewUser).Append(NewUser(ids.Last()+1)).ToList();
  88. // Update
  89. {
  90. var rowCount = Data.Update(newUserList[0]);
  91. Assert.AreEqual(1, rowCount);
  92. }
  93. // UpdateRange
  94. {
  95. var rowCount = Data.UpdateRange(newUserList.Skip(1));
  96. Assert.AreEqual(1, rowCount);
  97. }
  98. Thread.Sleep(1000);
  99. // assert
  100. {
  101. var userList = Data.Query<User>().Where(m => ids.Contains(m.id)).ToList();
  102. Assert.AreEqual(2, userList.Count());
  103. Assert.AreEqual(0, userList.Select(m => m.id).Except(newUserList.Select(m => m.id)).Count());
  104. Assert.AreEqual(0, userList.Select(m => m.name).Except(newUserList.Select(m => m.name)).Count());
  105. }
  106. }
  107. #endregion
  108. #region #7 Delete : Delete DeleteRange DeleteByKey DeleteByKeys
  109. {
  110. // #1 Delete
  111. {
  112. var rowCount = Data.Delete(NewUser(1));
  113. Assert.AreEqual(1, rowCount);
  114. }
  115. // #2 DeleteRange
  116. {
  117. var rowCount = Data.DeleteRange(NewUsers(2, 2));
  118. Assert.AreEqual(2, rowCount);
  119. }
  120. // #3 DeleteByKey
  121. {
  122. using var dbContext = (Data.DataProvider<User>() as SqlDataProvider)?.CreateDbContext();
  123. var entityDescriptor = dbContext.GetEntityDescriptor(typeof(User));
  124. var key = entityDescriptor.key;
  125. var user = NewUser(4);
  126. var keyValue = key.GetValue(user);
  127. var rowCount = Data.DeleteByKey<User>(keyValue);
  128. Assert.AreEqual(1, rowCount);
  129. }
  130. // #4 DeleteByKeys
  131. {
  132. using var dbContext = (Data.DataProvider<User>() as SqlDataProvider)?.CreateDbContext();
  133. var entityDescriptor = dbContext.GetEntityDescriptor(typeof(User));
  134. var key = entityDescriptor.key;
  135. var users = Data.Query<User>().ToList();
  136. var keyValues = users.Select(user => key.GetValue(user));
  137. var rowCount = Data.DeleteByKeys<User, object>(keyValues);
  138. Assert.AreEqual(users.Count, rowCount);
  139. }
  140. Thread.Sleep(1000);
  141. // assert
  142. {
  143. var userList = Data.Query<User>().ToList();
  144. Assert.AreEqual(0, userList.Count());
  145. }
  146. }
  147. #endregion
  148. #region #8 get DbContext and entityDescriptor
  149. {
  150. using var dbContext = (Data.DataProvider<User>() as SqlDataProvider)?.CreateDbContext();
  151. var entityDescriptor = dbContext.GetEntityDescriptor(typeof(User));
  152. Assert.IsNotNull(entityDescriptor);
  153. }
  154. #endregion
  155. }
  156. }
  157. }