CRUDAsync_Test.cs 4.9 KB

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