CRUD_Test.cs 3.8 KB

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