GeneralRepositoryTest.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  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<TestDbContext>(context);
  93. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  94. {
  95. var repo = new TestRepo(uow.As<IDataDomain>());
  96. var dao = repo.New();
  97. dao.Name = DaoName1;
  98. dao.Value = DaoValue1;
  99. dao = repo.New();
  100. dao.Name = DaoName2;
  101. dao.Value = DaoValue2;
  102. uow.Commit();
  103. // read check inside UOW
  104. var list = repo.Query(Paging.NoPaging());
  105. Assert.IsNotNull(list);
  106. Assert.That(list.Count(), Is.EqualTo(2));
  107. }
  108. // read check outside UOW
  109. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  110. {
  111. var repo = new TestRepo(uow.As<IDataDomain>());
  112. var list = repo.Query(Paging.NoPaging());
  113. Assert.IsNotNull(list);
  114. Assert.That(list.Count(), Is.EqualTo(2));
  115. }
  116. }
  117. [Test]
  118. public void QueryPagingEntity()
  119. {
  120. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  121. {
  122. var repo = new TestRepo(uow.As<IDataDomain>());
  123. var dao = repo.New();
  124. dao.Name = DaoName1;
  125. dao.Value = DaoValue1;
  126. dao = repo.New();
  127. dao.Name = DaoName2;
  128. dao.Value = DaoValue2;
  129. uow.Commit();
  130. }
  131. // read check outside UOW
  132. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  133. {
  134. var repo = new TestRepo(uow.As<IDataDomain>());
  135. var list = repo.Query(new Paging(0,1))?.ToArray();
  136. Assert.IsNotNull(list);
  137. Assert.That(list.Count(), Is.EqualTo(1));
  138. Assert.That(list[0].Name, Is.EqualTo(DaoName1));
  139. list = repo.Query(new Paging(1,1))?.ToArray();
  140. Assert.IsNotNull(list);
  141. Assert.That(list[0].Name, Is.EqualTo(DaoName2));
  142. }
  143. }
  144. [Test]
  145. public void QueryPagingFail()
  146. {
  147. // read check outside UOW
  148. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  149. {
  150. var repo = new TestRepo(uow.As<IDataDomain>());
  151. Assert.That(Assert.Throws<ArgumentNullException>(() =>
  152. repo.Query(null))
  153. .ParamName,
  154. Is.EqualTo("paging"));
  155. }
  156. }
  157. [Test]
  158. public void RollbackEntity()
  159. {
  160. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  161. {
  162. var repo = new TestRepo(uow.As<IDataDomain>());
  163. var dao = repo.New();
  164. dao.Name = DaoName1;
  165. dao.Value = DaoValue1;
  166. uow.Commit();
  167. dao = repo.Get(1);
  168. Assert.IsNotNull(dao);
  169. Assert.That(dao.Name, Is.EqualTo(DaoName1));
  170. dao.Name = DaoName2;
  171. }
  172. // read check outside UOW
  173. using (var uow = new UnitOfWork<TestDbContext>(_dbcResolver))
  174. {
  175. var repo = new TestRepo(uow.As<IDataDomain>());
  176. var dao = repo.Get(1);
  177. Assert.IsNotNull(dao);
  178. Assert.That(dao.Name, Is.EqualTo(DaoName1));
  179. }
  180. }
  181. protected override TestRepo GetRepository()
  182. {
  183. throw new NotImplementedException();
  184. }
  185. }
  186. }