using Centron.BusinessLogic.EmployeeArea; using Centron.DAO; using Centron.DAO.Mappings; using Centron.DAO.Mappings.Administration; using Centron.DAO.Mappings.Administration.Company; using Centron.DAO.Mappings.Administration.Employees; using Centron.DAO.Mappings.CustomerArea.Support; using Centron.DAO.Mappings.States; using Centron.DAO.Mappings.TemporaryEntities; using Centron.DAO.TemporaryEntities; using Centron.Data.Entities.Administration; using Centron.Data.Entities.EmployeeArea; using Centron.Interfaces.Administration.Settings; using Centron.Tests.BL.SetupUtils; using FluentNHibernate.Cfg; using FluentNHibernate.Cfg.Db; using NHibernate; using NHibernate.Tool.hbm2ddl; namespace Centron.Tests.BL.EmployeeArea { public class AppUserBLTest { [Fact] public void GetActiveAppUsers_ReturnsOnlyActiveEmployees() { // Arrange var session = CreateSession(); // Create employees var activeEmployee = new EmployeeCompact { I3D = 1, IsActive = true }; var inactiveEmployee = new EmployeeCompact { I3D = 2, IsActive = false }; // Create AppUsers var activeAppUser = new AppUser { I3D = 1, Name = "activeUser", IsAccountDisabled = false, AccountDisabledFromDate = null, AccountDisabledToDate = null, Employee = activeEmployee }; var inactiveAppUser = new AppUser { I3D = 2, Name = "inactiveUser", IsAccountDisabled = false, AccountDisabledFromDate = null, AccountDisabledToDate = null, Employee = inactiveEmployee }; // Add both to session session.Save(activeEmployee); session.Save(inactiveEmployee); session.Save(activeAppUser); session.Save(inactiveAppUser); session.Flush(); var licenseManager = MockSetupUtils.PrepareLicenseManagerMock(); var daoSession = new DAOSession(session); var bl = new AppUserBL(daoSession, licenseManager); // Act var result = bl.GetActiveAppUsers(); // Assert Assert.Single(result); Assert.Equal("activeUser", result[0].Name); } [Fact] public void GetActiveAppUsers_ReturnsEmpty_WhenNoUsersExist() { // Arrange var session = CreateSession(); var licenseManager = MockSetupUtils.PrepareLicenseManagerMock(); var daoSession = new DAOSession(session); var bl = new AppUserBL(daoSession, licenseManager); // Act var result = bl.GetActiveAppUsers(); // Assert Assert.Empty(result); } [Fact] public void GetActiveAppUsers_ReturnsEmpty_WhenAllUsersInactive() { // Arrange var session = CreateSession(); var inactiveEmployee = new EmployeeCompact { I3D = 1, IsActive = false }; var appUser = new AppUser { I3D = 1, Name = "inactiveUser", IsAccountDisabled = false, Employee = inactiveEmployee }; session.Save(inactiveEmployee); session.Save(appUser); session.Flush(); var licenseManager = MockSetupUtils.PrepareLicenseManagerMock(); var daoSession = new DAOSession(session); var bl = new AppUserBL(daoSession, licenseManager); // Act var result = bl.GetActiveAppUsers(); // Assert Assert.Empty(result); } [Fact] public void GetActiveAppUsers_ReturnsEmpty_WhenAllAccountsDisabled() { // Arrange var session = CreateSession(); var employee = new EmployeeCompact { I3D = 1, IsActive = true }; var appUser = new AppUser { I3D = 1, Name = "disabledUser", IsAccountDisabled = true, Employee = employee }; session.Save(employee); session.Save(appUser); session.Flush(); var licenseManager = MockSetupUtils.PrepareLicenseManagerMock(); var daoSession = new DAOSession(session); var bl = new AppUserBL(daoSession, licenseManager); // Act var result = bl.GetActiveAppUsers(); // Assert Assert.Empty(result); } [Fact] public void GetActiveAppUsers_ReturnsEmpty_WhenAccountDisabledByDateRange() { // Arrange var session = CreateSession(); var employee = new EmployeeCompact { I3D = 1, IsActive = true }; var now = DateTime.UtcNow; var appUser = new AppUser { I3D = 1, Name = "dateDisabledUser", IsAccountDisabled = false, AccountDisabledFromDate = now.AddDays(-1), AccountDisabledToDate = now.AddDays(1), Employee = employee }; session.Save(employee); session.Save(appUser); session.Flush(); var licenseManager = MockSetupUtils.PrepareLicenseManagerMock(); var daoSession = new DAOSession(session); var bl = new AppUserBL(daoSession, licenseManager); // Act var result = bl.GetActiveAppUsers(); // Assert Assert.Empty(result); } [Fact] public void GetActiveAppUsers_ReturnsUser_WhenAccountDisabledDateRangeIsInPast() { // Arrange var session = CreateSession(); var employee = new EmployeeCompact { I3D = 1, IsActive = true }; var now = DateTime.UtcNow; var appUser = new AppUser { I3D = 1, Name = "pastDisabledUser", IsAccountDisabled = false, AccountDisabledFromDate = now.AddDays(-10), AccountDisabledToDate = now.AddDays(-5), Employee = employee }; session.Save(employee); session.Save(appUser); session.Flush(); var licenseManager = MockSetupUtils.PrepareLicenseManagerMock(); var daoSession = new DAOSession(session); var bl = new AppUserBL(daoSession, licenseManager); // Act var result = bl.GetActiveAppUsers(); // Assert Assert.Single(result); Assert.Equal("pastDisabledUser", result[0].Name); } [Fact] public void GetActiveAppUsers_ReturnsOnlyActiveAndEnabledUsers() { // Arrange var session = CreateSession(); var activeEmployee = new EmployeeCompact { I3D = 1, IsActive = true }; var inactiveEmployee = new EmployeeCompact { I3D = 2, IsActive = false }; var appUser1 = new AppUser { I3D = 1, Name = "activeUser", IsAccountDisabled = false, Employee = activeEmployee }; var appUser2 = new AppUser { I3D = 2, Name = "inactiveEmployeeUser", IsAccountDisabled = false, Employee = inactiveEmployee }; var appUser3 = new AppUser { I3D = 3, Name = "disabledAccountUser", IsAccountDisabled = true, Employee = activeEmployee }; session.Save(activeEmployee); session.Save(inactiveEmployee); session.Save(appUser1); session.Save(appUser2); session.Save(appUser3); session.Flush(); var licenseManager = MockSetupUtils.PrepareLicenseManagerMock(); var daoSession = new DAOSession(session); var bl = new AppUserBL(daoSession, licenseManager); // Act var result = bl.GetActiveAppUsers(); // Assert Assert.Single(result); Assert.Equal("activeUser", result[0].Name); } [Fact] public void GetActiveAppUsers_ReturnsMultipleActiveUsers() { // Arrange var session = CreateSession(); var emp1 = new EmployeeCompact { I3D = 1, IsActive = true }; var emp2 = new EmployeeCompact { I3D = 2, IsActive = true }; var appUser1 = new AppUser { I3D = 1, Name = "user1", IsAccountDisabled = false, Employee = emp1 }; var appUser2 = new AppUser { I3D = 2, Name = "user2", IsAccountDisabled = false, Employee = emp2 }; session.Save(emp1); session.Save(emp2); session.Save(appUser1); session.Save(appUser2); session.Flush(); var licenseManager = MockSetupUtils.PrepareLicenseManagerMock(); var daoSession = new DAOSession(session); var bl = new AppUserBL(daoSession, licenseManager); // Act var result = bl.GetActiveAppUsers(); // Assert Assert.Equal(2, result.Count); Assert.Contains(result, u => u.Name == "user1"); Assert.Contains(result, u => u.Name == "user2"); } [Fact] public void GetAppUserForWebaccounts_ReturnsAppUser_WhenCentronSystemUserIsConfigured() { // Arrange var session = CreateSession(); var employee = new EmployeeCompact { I3D = 1, IsActive = true }; var appUser = new AppUser { Name = "centronSystemUser", IsAccountDisabled = false, Employee = employee }; session.Save(employee); var appUserI3D = (int)session.Save(appUser); session.Flush(); var applicationSetting = new ApplicationSetting { I3D = (int)ApplicationSettingID.CentronSystemUser, ValueInt = appUserI3D, Description = "Centron System User" }; session.Save(applicationSetting); session.Flush(); var licenseManager = MockSetupUtils.PrepareLicenseManagerMock(); var daoSession = new DAOSession(session); var bl = new AppUserBL(daoSession, licenseManager); // Act var result = bl.GetAppUserForWebaccounts(); // Assert Assert.True(result.IsSuccess, $"Expected success but got: {result.Message}"); Assert.NotNull(result.Data); Assert.Equal("centronSystemUser", result.Data.Name); Assert.Equal(appUserI3D, result.Data.I3D); } [Fact] public void GetAppUserForWebaccounts_ReturnsError_WhenCentronSystemUserNotConfigured() { // Arrange var session = CreateSession(); var licenseManager = MockSetupUtils.PrepareLicenseManagerMock(); var daoSession = new DAOSession(session); var bl = new AppUserBL(daoSession, licenseManager); // Act var result = bl.GetAppUserForWebaccounts(); // Assert Assert.False(result.IsSuccess); Assert.Equal("Es ist kein CentronSystemUser hinterlegt.", result.Message); } [Fact] public void GetAppUserForWebaccounts_ReturnsError_WhenCentronSystemUserNotFound() { // Arrange var session = CreateSession(); var applicationSetting = new ApplicationSetting { I3D = (int)ApplicationSettingID.CentronSystemUser, ValueInt = 999, // Non-existent AppUser ID Description = "Centron System User" }; session.Save(applicationSetting); session.Flush(); var licenseManager = MockSetupUtils.PrepareLicenseManagerMock(); var daoSession = new DAOSession(session); var bl = new AppUserBL(daoSession, licenseManager); // Act var result = bl.GetAppUserForWebaccounts(); // Assert Assert.False(result.IsSuccess); Assert.Equal("CentronSystemUser nicht gefunden!", result.Message); } // Helper: create in-memory NHibernate session private ISession CreateSession() { var fluentConfiguration = Fluently.Configure() .Database(SQLiteConfiguration.Standard.InMemory) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()) .Mappings(m => m.FluentMappings.Add()); ISessionFactory sessionFactory = fluentConfiguration.BuildSessionFactory(); ISession session = sessionFactory.OpenSession(); new SchemaExport(fluentConfiguration.BuildConfiguration()).Execute(true, true, false, session.Connection, Console.Out); return session; } } }