GeneralRepositoryTest.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. using Microsoft.EntityFrameworkCore;
  2. using qdr.fnd.core.test.Repositories.Fakes;
  3. using Quadarax.Foundation.Core.Data;
  4. using Quadarax.Foundation.Core.Data.Domain;
  5. namespace qdr.fnd.core.test.Repositories
  6. {
  7. [TestFixture(Category = "Dao")]
  8. public class GeneralRepositoryTest : RepositoryDbContextTest<TestRepo, TestDbContext>
  9. {
  10. private const string DaoName1 = "Name1";
  11. private const string DaoName2 = "Name2";
  12. private const string DaoValue1 = "Value1";
  13. private const string DaoValue2 = "Value2";
  14. [Test]
  15. public void AddEntity()
  16. {
  17. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  18. {
  19. var repo = new TestRepo(uow.As<IDataDomain>());
  20. var dao = repo.New();
  21. dao.Name = DaoName1;
  22. dao.Value = DaoValue1;
  23. uow.Commit();
  24. // read check inside UOW
  25. dao = repo.Get(1);
  26. Assert.IsNotNull(dao, "Cannot obtain created dao inside UOW.");
  27. Assert.That(dao.Name, Is.EqualTo(DaoName1));
  28. Assert.That(dao.Value, Is.EqualTo(DaoValue1));
  29. }
  30. // read check outside UOW
  31. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  32. {
  33. var repo = new TestRepo(uow.As<IDataDomain>());
  34. var dao = repo.Get(1);
  35. Assert.IsNotNull(dao, "Cannot obtain created dao outside UOW.");
  36. Assert.That(dao.Name, Is.EqualTo(DaoName1));
  37. Assert.That(dao.Value, Is.EqualTo(DaoValue1));
  38. }
  39. }
  40. [Test]
  41. public void UpdateEntity()
  42. {
  43. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  44. {
  45. var repo = new TestRepo(uow.As<IDataDomain>());
  46. var dao = repo.New();
  47. dao.Name = DaoName1;
  48. dao.Value = DaoValue1;
  49. uow.Commit();
  50. dao.Value = DaoValue2;
  51. uow.Commit();
  52. }
  53. // read check outside UOW
  54. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  55. {
  56. var repo = new TestRepo(uow.As<IDataDomain>());
  57. var dao = repo.Get(1);
  58. Assert.IsNotNull(dao, "Cannot obtain created dao outside UOW.");
  59. Assert.That(dao.Name, Is.EqualTo(DaoName1));
  60. Assert.That(dao.Value, Is.EqualTo(DaoValue2));
  61. }
  62. }
  63. [Test]
  64. public void RemoveEntity()
  65. {
  66. var result = false;
  67. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  68. {
  69. var repo = new TestRepo(uow.As<IDataDomain>());
  70. var dao = repo.New();
  71. dao.Name = DaoName1;
  72. dao.Value = DaoValue1;
  73. uow.Commit();
  74. result = repo.Remove(1);
  75. uow.Commit();
  76. }
  77. // read check outside UOW
  78. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  79. {
  80. var repo = new TestRepo(uow.As<IDataDomain>());
  81. var dao = repo.Get(1);
  82. Assert.IsNull(dao, "Dao doesn't remove outside UOW.");
  83. result = repo.Remove(1);
  84. Assert.IsFalse(result);
  85. }
  86. }
  87. [Test]
  88. public void QueryEntity()
  89. {
  90. var context = new TestDbContext(new DbContextOptions<TestDbContext>());
  91. context.Database.EnsureCreated();
  92. var dbcResolver = new DomainContextResolver();
  93. dbcResolver.Register(context);
  94. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  95. {
  96. var repo = new TestRepo(uow.As<IDataDomain>());
  97. var dao = repo.New();
  98. dao.Name = DaoName1;
  99. dao.Value = DaoValue1;
  100. dao = repo.New();
  101. dao.Name = DaoName2;
  102. dao.Value = DaoValue2;
  103. uow.Commit();
  104. // read check inside UOW
  105. var list = repo.Query(Paging.NoPaging());
  106. Assert.IsNotNull(list);
  107. Assert.That(list.Count(), Is.EqualTo(2));
  108. }
  109. // read check outside UOW
  110. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  111. {
  112. var repo = new TestRepo(uow.As<IDataDomain>());
  113. var list = repo.Query(Paging.NoPaging());
  114. Assert.IsNotNull(list);
  115. Assert.That(list.Count(), Is.EqualTo(2));
  116. }
  117. }
  118. [Test]
  119. public void QueryPagingEntity()
  120. {
  121. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  122. {
  123. var repo = new TestRepo(uow.As<IDataDomain>());
  124. var dao = repo.New();
  125. dao.Name = DaoName1;
  126. dao.Value = DaoValue1;
  127. dao = repo.New();
  128. dao.Name = DaoName2;
  129. dao.Value = DaoValue2;
  130. uow.Commit();
  131. }
  132. // read check outside UOW
  133. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  134. {
  135. var repo = new TestRepo(uow.As<IDataDomain>());
  136. var list = repo.Query(new Paging(0,1))?.ToArray();
  137. Assert.IsNotNull(list);
  138. Assert.That(list.Count(), Is.EqualTo(1));
  139. Assert.That(list[0].Name, Is.EqualTo(DaoName1));
  140. list = repo.Query(new Paging(1,1))?.ToArray();
  141. Assert.IsNotNull(list);
  142. Assert.That(list[0].Name, Is.EqualTo(DaoName2));
  143. }
  144. }
  145. [Test]
  146. public void QueryPagingFail()
  147. {
  148. // read check outside UOW
  149. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  150. {
  151. var repo = new TestRepo(uow.As<IDataDomain>());
  152. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  153. repo.Query(null))
  154. .ParamName,
  155. Is.EqualTo("paging"));
  156. }
  157. }
  158. [Test]
  159. public void RollbackEntity()
  160. {
  161. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  162. {
  163. var repo = new TestRepo(uow.As<IDataDomain>());
  164. var dao = repo.New();
  165. dao.Name = DaoName1;
  166. dao.Value = DaoValue1;
  167. uow.Commit();
  168. dao = repo.Get(1);
  169. Assert.IsNotNull(dao);
  170. Assert.That(dao.Name, Is.EqualTo(DaoName1));
  171. dao.Name = DaoName2;
  172. }
  173. // read check outside UOW
  174. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  175. {
  176. var repo = new TestRepo(uow.As<IDataDomain>());
  177. var dao = repo.Get(1);
  178. Assert.IsNotNull(dao);
  179. Assert.That(dao.Name, Is.EqualTo(DaoName1));
  180. }
  181. }
  182. protected override TestRepo GetRepository()
  183. {
  184. throw new NotImplementedException();
  185. }
  186. }
  187. }