CRUD_Test.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. using System.Data;
  2. using Microsoft.VisualStudio.TestTools.UnitTesting;
  3. namespace Vitorm.MsTest.CommonTest
  4. {
  5. [TestClass]
  6. public partial class CRUD_Test
  7. {
  8. static DbContext CreateDbContext() => DataSource.CreateDbContextForWriting();
  9. #region #0 Schema
  10. [TestMethod]
  11. public void Test_Schema()
  12. {
  13. using var dbContext = CreateDbContext();
  14. dbContext.TryDropTable<User>();
  15. dbContext.TryDropTable<User>();
  16. dbContext.TryCreateTable<User>();
  17. dbContext.TryCreateTable<User>();
  18. dbContext.Truncate<User>();
  19. }
  20. #endregion
  21. #region #1 Create
  22. [TestMethod]
  23. public void Test_Create()
  24. {
  25. using var dbContext = CreateDbContext();
  26. var newUserList = User.NewUsers(7, 4, forAdd: true);
  27. // #1 Add
  28. dbContext.Add(newUserList[0]);
  29. // #2 AddRange
  30. dbContext.AddRange(newUserList.Skip(1));
  31. DataSource.WaitForUpdate();
  32. // assert
  33. {
  34. var userList = dbContext.Query<User>().Where(user => user.id >= 7).ToList();
  35. Assert.AreEqual(newUserList.Count, userList.Count());
  36. Assert.AreEqual(0, userList.Select(m => m.id).Except(newUserList.Select(m => m.id)).Count());
  37. Assert.AreEqual(0, userList.Select(m => m.name).Except(newUserList.Select(m => m.name)).Count());
  38. }
  39. try
  40. {
  41. dbContext.Add(newUserList[0]);
  42. Assert.Fail("should not be able to add same key twice");
  43. }
  44. catch (Exception ex) when (ex is not AssertFailedException)
  45. {
  46. }
  47. }
  48. #endregion
  49. #region #2 Retrieve : Get Query
  50. [TestMethod]
  51. public void Test_Retrieve()
  52. {
  53. using var dbContext = CreateDbContext();
  54. // #1 Get
  55. {
  56. var user = dbContext.Get<User>(1);
  57. Assert.AreEqual(1, user.id);
  58. }
  59. // #2 Query
  60. {
  61. var userList = dbContext.Query<User>().ToList();
  62. Assert.AreEqual(6, userList.Count());
  63. }
  64. }
  65. #endregion
  66. #region #3 Update
  67. [TestMethod]
  68. public void Test_Update()
  69. {
  70. using var dbContext = CreateDbContext();
  71. // Update
  72. {
  73. var rowCount = dbContext.Update(User.NewUser(4));
  74. Assert.AreEqual(1, rowCount);
  75. }
  76. // UpdateRange
  77. {
  78. var rowCount = dbContext.UpdateRange(User.NewUsers(5, 3));
  79. Assert.AreEqual(2, rowCount);
  80. }
  81. DataSource.WaitForUpdate();
  82. // assert
  83. {
  84. var newUserList = User.NewUsers(4, 3, forAdd: false);
  85. var userList = dbContext.Query<User>().Where(m => m.id >= 4).ToList();
  86. Assert.AreEqual(newUserList.Count, userList.Count());
  87. Assert.AreEqual(0, userList.Select(m => m.id).Except(newUserList.Select(m => m.id)).Count());
  88. Assert.AreEqual(0, userList.Select(m => m.name).Except(newUserList.Select(m => m.name)).Count());
  89. }
  90. }
  91. #endregion
  92. #region #4 Delete
  93. [TestMethod]
  94. public void Test_Delete()
  95. {
  96. using var dbContext = CreateDbContext();
  97. // #1 Delete
  98. {
  99. var rowCount = dbContext.Delete(User.NewUser(1));
  100. Assert.AreEqual(1, rowCount);
  101. }
  102. // #2 DeleteRange
  103. {
  104. var rowCount = dbContext.DeleteRange(User.NewUsers(2, 2));
  105. Assert.AreEqual(2, rowCount);
  106. }
  107. // #3 DeleteByKey
  108. {
  109. var user = User.NewUser(4);
  110. var key = dbContext.GetEntityDescriptor(typeof(User)).key;
  111. var keyValue = key.GetValue(user);
  112. var rowCount = dbContext.DeleteByKey<User>(keyValue);
  113. Assert.AreEqual(1, rowCount);
  114. }
  115. // #4 DeleteByKeys
  116. {
  117. var users = User.NewUsers(5, 2);
  118. var key = dbContext.GetEntityDescriptor(typeof(User)).key;
  119. var keyValues = users.Select(user => key.GetValue(user));
  120. var rowCount = dbContext.DeleteByKeys<User, object>(keyValues);
  121. Assert.AreEqual(2, rowCount);
  122. }
  123. DataSource.WaitForUpdate();
  124. // assert
  125. {
  126. var userList = dbContext.Query<User>().ToList();
  127. Assert.AreEqual(0, userList.Count());
  128. }
  129. }
  130. #endregion
  131. }
  132. }