Explorar o código

Add CommonRepositoryTest, fix Tracked scheme

Dalibor Votruba %!s(int64=3) %!d(string=hai) anos
pai
achega
abac399ae9
Modificáronse 24 ficheiros con 245 adicións e 73 borrados
  1. 1 0
      Common/qdr.app.qlbrc.common/Entities/Base/ITracked.cs
  2. 4 3
      Common/qdr.app.qlbrc.common/Entities/Base/QlbrcEntityTrackedWithId.cs
  3. 14 0
      Common/qdr.app.qlbrc.common/Repositories/QlbrcRepository.cs
  4. 30 0
      Common/qdr.app.qlbrc.common/Repositories/QlbrcTrackedRepository.cs
  5. 14 0
      Common/qdr.fnd.core.test/BaseTest.cs
  6. 5 1
      Common/qdr.fnd.core.test/Repositories/Fakes/TestDbContext.cs
  7. 5 16
      Common/qdr.fnd.core.test/Repositories/GeneralRepositoryTest.cs
  8. 28 0
      Common/qdr.fnd.core.test/RepositoryDbContextTest.cs
  9. 7 3
      Common/qdr.fnd.core.test/ServiceDbContextTest.cs
  10. 0 6
      Common/qdr.fnd.core.test/ServiceTest.cs
  11. 1 0
      Common/qdr.fnd.core.test/qdr.fnd.core.test.csproj
  12. 1 1
      Modules/qdr.app.qlbrc.base/Dtos/ResultSettingsValuesListDto.cs
  13. 2 0
      Modules/qdr.app.qlbrc.base/QlbrcDbContext.cs
  14. 1 1
      Modules/qdr.app.qlbrc.base/Services/SettingsService.cs
  15. 6 2
      Tests/qdr.app.qlbrc.base.Tests/BaseInMemoryDbContext.cs
  16. 6 2
      Tests/qdr.app.qlbrc.base.Tests/Entities/SettingTest.cs
  17. 8 4
      Tests/qdr.app.qlbrc.base.Tests/Entities/TenantTest.cs
  18. 9 5
      Tests/qdr.app.qlbrc.base.Tests/Entities/UserTest.cs
  19. 9 29
      Tests/qdr.app.qlbrc.base.Tests/Services/SettingsServiceTest.cs
  20. 44 0
      Tests/qdr.app.qlbrc.common.Tests/Repositories/CommonRepositoryTest.cs
  21. 27 0
      Tests/qdr.app.qlbrc.common.Tests/Repositories/Fakes/TestDbContext.cs
  22. 8 0
      Tests/qdr.app.qlbrc.common.Tests/Repositories/Fakes/TestTenantTrackedDao.cs
  23. 13 0
      Tests/qdr.app.qlbrc.common.Tests/Repositories/Fakes/TestTenantTrackedRepo.cs
  24. 2 0
      Tests/qdr.app.qlbrc.common.Tests/qdr.app.qlbrc.common.Tests.csproj

+ 1 - 0
Common/qdr.app.qlbrc.common/Entities/Base/ITracked.cs

@@ -5,5 +5,6 @@
         public DateTime Created { get; }
         public DateTime? Modified { get;}
         public string? Modifier { get; }
+
     }
 }

+ 4 - 3
Common/qdr.app.qlbrc.common/Entities/Base/QlbrcEntityTrackedWithId.cs

@@ -7,9 +7,10 @@ namespace Quadarax.Application.QLiberace.Common.Entities.Base
     {
         [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
         [Required]
-        public DateTime Created { get; protected set; }
-        public DateTime? Modified { get; protected set;}
+        public DateTime Created { get; internal set; }
+        public DateTime? Modified { get; internal set;}
         [MaxLength(100)]
-        public string? Modifier { get; protected set;}
+        public string? Modifier { get; internal set;}
+
     }
 }

+ 14 - 0
Common/qdr.app.qlbrc.common/Repositories/QlbrcRepository.cs

@@ -0,0 +1,14 @@
+using Quadarax.Application.QLiberace.Common.Entities.Base;
+using Quadarax.Foundation.Core.Data.Domain;
+using Quadarax.Foundation.Core.Data.Interface.Domain;
+using Quadarax.Foundation.Core.Data.Repository;
+
+namespace Quadarax.Application.QLiberace.Common.Repositories
+{
+    public abstract class QlbrcRepository<TEntity> : EntityRepository<long, TEntity> where TEntity : QlbrcEntityWithId, new()
+    {
+        protected QlbrcRepository(IUnitOfWork<IDataDomain> unitOfWork) : base(unitOfWork)
+        {
+        }
+    }
+}

+ 30 - 0
Common/qdr.app.qlbrc.common/Repositories/QlbrcTrackedRepository.cs

@@ -0,0 +1,30 @@
+using Quadarax.Application.QLiberace.Common.Entities.Base;
+using Quadarax.Foundation.Core.Data.Domain;
+using Quadarax.Foundation.Core.Data.Interface.Domain;
+
+namespace Quadarax.Application.QLiberace.Common.Repositories
+{
+    public abstract class QlbrcTrackedRepository<TEntityTracked> : QlbrcRepository<TEntityTracked> where TEntityTracked : QlbrcEntityTrackedWithId, new()
+    {
+        private string _modifier;
+        protected QlbrcTrackedRepository(IUnitOfWork<IDataDomain> unitOfWork, string modifier) : base(unitOfWork)
+        {
+            _modifier = modifier;
+        }
+
+        public override TEntityTracked New()
+        {
+            var dao =  base.New();
+            dao.Created = DateTime.Now;
+            return dao;
+        }
+
+        public override TEntityTracked Set(TEntityTracked entity)
+        {
+            var dao = base.Set(entity);
+            dao.Modified = DateTime.Now;
+            dao.Modifier = _modifier;
+            return dao;
+        }
+    }
+}

+ 14 - 0
Common/qdr.fnd.core.test/BaseTest.cs

@@ -2,5 +2,19 @@
 {
     public abstract class BaseTest
     {
+        [SetUp]
+        public void Setup()
+        {
+            OnSetup();
+        }
+
+        [TearDown]
+        public void TearDown()
+        {
+            OnTearDown();
+        }
+
+        protected abstract void OnSetup();
+        protected abstract void OnTearDown();
     }
 }

+ 5 - 1
Common/qdr.fnd.core.test/Repositories/Fakes/TestDbContext.cs

@@ -8,6 +8,10 @@ namespace qdr.fnd.core.test.Repositories.Fakes
     {
         public DbSet<TestDao> Daos { get; set; } = null!;
 
+        public TestDbContext() : base(new DbContextOptions<TestDbContext>())
+        {
+        }
+
         public TestDbContext(DbContextOptions options) : base(options)
         {
         }
@@ -17,7 +21,7 @@ namespace qdr.fnd.core.test.Repositories.Fakes
             var dbName = "test" + DateTime.Now.ToFileTime().ToString();
             optionsBuilder.UseInMemoryDatabase(dbName)
                 .LogTo(message => Debug.WriteLine("EFSQL>>" + message));
-            Debug.WriteLine($"*** Context created [{dbName}]");
+            Debug.WriteLine($"*** {GetType().Name} - Context created [{dbName}]");
         }
     }
 }

+ 5 - 16
Common/qdr.fnd.core.test/Repositories/GeneralRepositoryTest.cs

@@ -7,9 +7,8 @@ namespace qdr.fnd.core.test.Repositories
 {
 
     [TestFixture(Category = "Dao")]
-    internal class GeneralRepositoryTest : DbContextTest
+    public class GeneralRepositoryTest : RepositoryDbContextTest<TestRepo, TestDbContext>
     {
-        private DomainContextResolver<TestDbContext>? _dbcResolver;
 
 
         private const string DaoName1 = "Name1";
@@ -18,20 +17,6 @@ namespace qdr.fnd.core.test.Repositories
         private const string DaoValue2 = "Value2";
 
 
-        [SetUp]
-        public void Setup()
-        {
-            var context = new TestDbContext(new DbContextOptions<TestDbContext>());
-            context.Database.EnsureCreated();
-            _dbcResolver = new DomainContextResolver<TestDbContext>(context);
-        }
-        [TearDown]
-        public void TearDown()
-        {
-            _dbcResolver?.GetCurrent<TestDbContext>().Dispose();
-            _dbcResolver = null;
-        }
-        
         [Test]
         public void AddEntity()
         {
@@ -203,5 +188,9 @@ namespace qdr.fnd.core.test.Repositories
             }
         }
 
+        protected override TestRepo GetRepository()
+        {
+            throw new NotImplementedException();
+        }
     }
 }

+ 28 - 0
Common/qdr.fnd.core.test/RepositoryDbContextTest.cs

@@ -0,0 +1,28 @@
+using Quadarax.Foundation.Core.Data.Domain;
+using Quadarax.Foundation.Core.Data.Interface.Repository;
+
+namespace qdr.fnd.core.test
+{
+    public abstract class RepositoryDbContextTest<TRepository, TDbContext> : BaseTest where TDbContext : DataDomain, new()
+        where TRepository : IRepository
+    {
+        protected DomainContextResolver<TDbContext>? _dbcResolver;
+        protected UnitOfWork<TDbContext> Uow { get; private set; }
+
+        protected override void OnSetup()
+        {
+            var context = new TDbContext();
+            context.Database.EnsureCreated();
+            _dbcResolver = new DomainContextResolver<TDbContext>(context);
+            Uow = new UnitOfWork<TDbContext>(_dbcResolver);
+        }
+
+        protected override void OnTearDown()
+        {
+            _dbcResolver?.GetCurrent<TDbContext>().Dispose();
+            _dbcResolver = null;
+        }
+
+        protected abstract TRepository GetRepository();
+    }
+}

+ 7 - 3
Common/qdr.fnd.core.test/ServiceDbContextTest.cs

@@ -1,9 +1,13 @@
-using Microsoft.EntityFrameworkCore;
+using Quadarax.Foundation.Core.Business;
+using Quadarax.Foundation.Core.Data.Domain;
+using Quadarax.Foundation.Core.Data.Interface.Repository;
 
 namespace qdr.fnd.core.test
 {
-    public abstract class ServiceDbContextTest<TDbContext> : ServiceTest where TDbContext : DbContext
+    public abstract class ServiceDbContextTest<TService,TRepository, TDbContext> : RepositoryDbContextTest<TRepository, TDbContext> where TDbContext : DataDomain, new()
+    where TService : AbstractRepositoryService<TRepository>
+    where TRepository : IRepository
     {
-
+        protected abstract TService GetService();
     }
 }

+ 0 - 6
Common/qdr.fnd.core.test/ServiceTest.cs

@@ -1,6 +0,0 @@
-namespace qdr.fnd.core.test
-{
-    public abstract class ServiceTest : BaseTest
-    {
-    }
-}

+ 1 - 0
Common/qdr.fnd.core.test/qdr.fnd.core.test.csproj

@@ -18,6 +18,7 @@
   </ItemGroup>
 
   <ItemGroup>
+    <ProjectReference Include="..\qdr.fnd.core.business\qdr.fnd.core.business.csproj" />
     <ProjectReference Include="..\qdr.fnd.core.data\qdr.fnd.core.data.csproj" />
     <ProjectReference Include="..\qdr.fnd.core\qdr.fnd.core.csproj" />
   </ItemGroup>

+ 1 - 1
Modules/qdr.app.qlbrc.base/Dtos/ResultSettingsValuesListDto.cs

@@ -2,7 +2,7 @@
 
 namespace Quadarax.Application.QLiberace.Base.Dtos
 {
-    internal class ResultSettingsValuesListDto : ResultDto
+    public class ResultSettingsValuesListDto : ResultDto
     {
         public IDictionary<string, object?> Values { get; set; }
 

+ 2 - 0
Modules/qdr.app.qlbrc.base/QlbrcDbContext.cs

@@ -2,6 +2,8 @@
 using Quadarax.Application.QLiberace.Base.Entities;
 using Quadarax.Application.QLiberace.Common.Attributes;
 using Quadarax.Application.QLiberace.Common.Configuration;
+using Quadarax.Application.QLiberace.Common.Dtos;
+using Quadarax.Application.QLiberace.Common.Entities.Base;
 using Quadarax.Foundation.Core.Data.Domain;
 using Quadarax.Foundation.Core.Reflection;
 

+ 1 - 1
Modules/qdr.app.qlbrc.base/Services/SettingsService.cs

@@ -14,7 +14,7 @@ using Quadarax.Foundation.Core.Reflection;
 
 namespace Quadarax.Application.QLiberace.Base.Services
 {
-    internal class SettingsService : AbstractRepositoryService<RepoSetting>
+    public class SettingsService : AbstractRepositoryService<RepoSetting>
     {
         #region *** Constructor ***
         public SettingsService(RepoSetting repository, IPrincipal currentPrincipal, ILoggerFactory logger) : base(repository, currentPrincipal, logger)

+ 6 - 2
Tests/qdr.app.qlbrc.base.Tests/BaseInMemoryDbContext.cs

@@ -3,12 +3,16 @@ using System.Diagnostics;
 
 namespace Quadarax.Application.QLiberace.Base.Tests
 {
-    internal class BaseInMemoryDbContext : QlbrcDbContext
+    public class BaseInMemoryDbContext : QlbrcDbContext
     {
         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
         {
-            optionsBuilder.UseInMemoryDatabase(GetConnectionString())
+            var dbName = "test" + DateTime.Now.ToFileTime().ToString();
+
+            optionsBuilder.UseInMemoryDatabase(dbName)
                 .LogTo(message => Debug.WriteLine("EFSQL>>" + message));
+
+            Debug.WriteLine($"*** {GetType().Name} - Context created [{dbName}]");
         }
     }
 }

+ 6 - 2
Tests/qdr.app.qlbrc.base.Tests/Entities/SettingTest.cs

@@ -7,8 +7,12 @@ namespace Quadarax.Application.QLiberace.Base.Tests.Entities
     [TestFixture(Category = "Dao")]
     public class SettingTest : BaseDaoTest<Setting>
     {
-        [SetUp]
-        public void Setup()
+       
+        protected override void OnSetup()
+        {
+        }
+
+        protected override void OnTearDown()
         {
         }
 

+ 8 - 4
Tests/qdr.app.qlbrc.base.Tests/Entities/TenantTest.cs

@@ -7,10 +7,6 @@ namespace Quadarax.Application.QLiberace.Base.Tests.Entities
     [TestFixture(Category = "Dao")]
     public class TenantTest : BaseDaoTest<Tenant>
     {
-        [SetUp]
-        public void Setup()
-        {
-        }
 
         [Test]
         public void HasClassPKOK()
@@ -37,5 +33,13 @@ namespace Quadarax.Application.QLiberace.Base.Tests.Entities
             CheckColumnMappings(nameof(Tenant.IsLocked), string.Empty,true, null,null);
             Assert.IsTrue(ReflectionUtils.HasPropertyGetter(typeof(Tenant), nameof(Tenant.LastAccess), false));
         }
+
+        protected override void OnSetup()
+        {
+        }
+
+        protected override void OnTearDown()
+        {
+        }
     }
 }

+ 9 - 5
Tests/qdr.app.qlbrc.base.Tests/Entities/UserTest.cs

@@ -6,11 +6,7 @@ namespace Quadarax.Application.QLiberace.Base.Tests.Entities
     [TestFixture(Category = "Dao")]
     public class UserTest : BaseDaoTest<User>
     {
-        [SetUp]
-        public void Setup()
-        {
-        }
-
+        
         [Test]
         public void HasClassPKOK()
         {
@@ -35,5 +31,13 @@ namespace Quadarax.Application.QLiberace.Base.Tests.Entities
             CheckColumnMappings(nameof(User.LoginName), string.Empty, true, 100, null);
             CheckColumnMappings(nameof(Tenant.IsLocked), string.Empty, true, null, false);
         }
+
+        protected override void OnSetup()
+        {
+        }
+
+        protected override void OnTearDown()
+        {
+        }
     }
 }

+ 9 - 29
Tests/qdr.app.qlbrc.base.Tests/Services/SettingsServiceTest.cs

@@ -1,43 +1,23 @@
-using Quadarax.Application.QLiberace.Base.Repositories;
-using Quadarax.Application.QLiberace.Common.Configuration;
+using qdr.fnd.core.test;
+using Quadarax.Application.QLiberace.Base.Repositories;
+using Quadarax.Application.QLiberace.Base.Services;
 using Quadarax.Foundation.Core.Data;
 using Quadarax.Foundation.Core.Data.Domain;
-using Quadarax.Foundation.Core.Data.Interface.Domain;
 
 namespace Quadarax.Application.QLiberace.Base.Tests.Services
 {
     [TestFixture(Category = "Srv")]
-    public class SettingsServiceTest
+    public class SettingsServiceTest : ServiceDbContextTest<SettingsService, RepoSetting,  BaseInMemoryDbContext>
     {
-        private const string CfgFileName = "qlbrc.test.json";
-
-        private IUnitOfWork<BaseInMemoryDbContext> _uow;
-
-        [SetUp]
-        public void Setup()
+        
+        protected override RepoSetting GetRepository()
         {
-            OlbrcConfiguration.ConfigurationFileName = CfgFileName;
-            var context = new BaseInMemoryDbContext();
-            context.Database.EnsureCreated();
-
-             var doc = (IDomainContextResolver<BaseInMemoryDbContext>)new DomainContextResolver<BaseInMemoryDbContext>(context);
-             _uow = new UnitOfWork<BaseInMemoryDbContext>(doc);
+            return new RepoSetting(Uow.As<IDataDomain>());
         }
 
-        [Test]
-        public void TestMe()
+        protected override SettingsService GetService()
         {
-            var repo = new RepoSetting(_uow.As<IDataDomain>());
-            var newItem = repo.New();
-            newItem.Code = "foo";
-            newItem.ValueTypeQualified = "System.String";
-            newItem.Description = "Test";
-            newItem.ModuleCode = "Base";
-            newItem.Value = "bar";
-            repo.Set(newItem);
-            _uow.Commit();
-            var fii = repo.Query(Paging.NoPaging(),false).ToArray();
+            return new SettingsService(GetRepository(), null, null);
         }
-
     }
 }

+ 44 - 0
Tests/qdr.app.qlbrc.common.Tests/Repositories/CommonRepositoryTest.cs

@@ -0,0 +1,44 @@
+using qdr.fnd.core.test;
+using Quadarax.Application.QLiberace.Base.Tests;
+using Quadarax.Application.QLiberace.Common.Tests.Repositories.Fakes;
+using Quadarax.Foundation.Core.Data.Domain;
+
+namespace Quadarax.Application.QLiberace.Common.Tests.Repositories
+{
+    [TestFixture(Category = "Dao")]
+    public class CommonRepositoryTest : RepositoryDbContextTest<TestTenantTrackedRepo, TestDbContext>
+    {
+        private const string Modifier = "testmod";
+
+        
+        protected override TestTenantTrackedRepo GetRepository()
+        {
+            return new TestTenantTrackedRepo(Uow.As<IDataDomain>(), Modifier);
+        }
+
+        [Test]
+        public void CreatedOK()
+        {
+            var repo = GetRepository();
+            var now = DateTime.Now;
+            var dao = repo.New();
+            Assert.IsNotNull(dao);
+            Assert.IsTrue(dao.Created > now);
+        }
+
+
+        [Test]
+        public void ModifiedOK()
+        {
+            var repo = GetRepository();
+            var now = DateTime.Now;
+            var dao = repo.New();
+            repo.Set(dao);
+            Assert.IsNotNull(dao);
+            Assert.IsNotNull(dao.Modified);
+            Assert.IsTrue(dao.Modified > now);
+            Assert.That(dao.Modifier, Is.EqualTo(Modifier));
+        }
+
+    }
+}

+ 27 - 0
Tests/qdr.app.qlbrc.common.Tests/Repositories/Fakes/TestDbContext.cs

@@ -0,0 +1,27 @@
+using System.Diagnostics;
+using Microsoft.EntityFrameworkCore;
+using Quadarax.Foundation.Core.Data.Domain;
+
+namespace Quadarax.Application.QLiberace.Common.Tests.Repositories.Fakes
+{
+    public class TestDbContext : DataDomain, IDataDomain
+    {
+        public DbSet<TestTenantTrackedDao> Tests { get; set; } = null!;
+
+        public TestDbContext() : base(new DbContextOptions<TestDbContext>())
+        {
+        }
+
+        public TestDbContext(DbContextOptions options) : base(options)
+        {
+        }
+
+        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+        {
+            var dbName = "test" + DateTime.Now.ToFileTime().ToString();
+            optionsBuilder.UseInMemoryDatabase(dbName)
+                .LogTo(message => Debug.WriteLine("EFSQL>>" + message));
+            Debug.WriteLine($"*** {GetType().Name} - Context created [{dbName}]");
+        }
+    }
+}

+ 8 - 0
Tests/qdr.app.qlbrc.common.Tests/Repositories/Fakes/TestTenantTrackedDao.cs

@@ -0,0 +1,8 @@
+using Quadarax.Application.QLiberace.Common.Entities.Base;
+
+namespace Quadarax.Application.QLiberace.Common.Tests.Repositories.Fakes
+{
+    public class TestTenantTrackedDao : QlbrcEntityTrackedWithId
+    {
+    }
+}

+ 13 - 0
Tests/qdr.app.qlbrc.common.Tests/Repositories/Fakes/TestTenantTrackedRepo.cs

@@ -0,0 +1,13 @@
+using Quadarax.Application.QLiberace.Common.Repositories;
+using Quadarax.Foundation.Core.Data.Domain;
+using Quadarax.Foundation.Core.Data.Interface.Domain;
+
+namespace Quadarax.Application.QLiberace.Common.Tests.Repositories.Fakes
+{
+    public  class TestTenantTrackedRepo : QlbrcTrackedRepository<TestTenantTrackedDao>
+    {
+        public TestTenantTrackedRepo(IUnitOfWork<IDataDomain> unitOfWork, string modifier) : base(unitOfWork, modifier)
+        {
+        }
+    }
+}

+ 2 - 0
Tests/qdr.app.qlbrc.common.Tests/qdr.app.qlbrc.common.Tests.csproj

@@ -21,6 +21,8 @@
 
   <ItemGroup>
     <ProjectReference Include="..\..\common\qdr.app.qlbrc.common\qdr.app.qlbrc.common.csproj" />
+    <ProjectReference Include="..\..\Common\qdr.fnd.core.test\qdr.fnd.core.test.csproj" />
+    <ProjectReference Include="..\qdr.app.qlbrc.base.Tests\qdr.app.qlbrc.base.Tests.csproj" />
   </ItemGroup>
 
   <ItemGroup>