CRUD_Test.cs 4.7 KB

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