CRUDAsync_Test.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  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. }
  20. #endregion
  21. #region #1 Create
  22. [TestMethod]
  23. public async Task Test_Create()
  24. {
  25. using var dbContext = CreateDbContext();
  26. var newUserList = User.NewUsers(7, 4, forAdd: true);
  27. // #1 Add
  28. await dbContext.AddAsync(newUserList[0]);
  29. // #2 AddRange
  30. await dbContext.AddRangeAsync(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. await dbContext.AddAsync(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 async Task Test_Retrieve()
  52. {
  53. using var dbContext = CreateDbContext();
  54. // #1 Get
  55. {
  56. var user = await dbContext.GetAsync<User>(1);
  57. Assert.AreEqual(1, user.id);
  58. }
  59. // #2 Query
  60. //{
  61. // var userList = await dbContext.Query<User>().ToListAsync();
  62. // Assert.AreEqual(6, userList.Count());
  63. //}
  64. }
  65. #endregion
  66. #region #3 Update
  67. [TestMethod]
  68. public async Task Test_Update()
  69. {
  70. using var dbContext = CreateDbContext();
  71. // Update
  72. {
  73. var rowCount = await dbContext.UpdateAsync(User.NewUser(4));
  74. Assert.AreEqual(1, rowCount);
  75. }
  76. // UpdateRange
  77. {
  78. var rowCount = await dbContext.UpdateRangeAsync(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 async Task Test_Delete()
  95. {
  96. using var dbContext = CreateDbContext();
  97. // #1 Delete
  98. {
  99. var rowCount = await dbContext.DeleteAsync(User.NewUser(1));
  100. Assert.AreEqual(1, rowCount);
  101. }
  102. // #2 DeleteRange
  103. {
  104. var rowCount = await dbContext.DeleteRangeAsync(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 = await dbContext.DeleteByKeyAsync<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 = await dbContext.DeleteByKeysAsync<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. }