QuellCode/CentronERP war nur als Gitlink (Submodul-Referenz auf 79c1142) getrackt, ohne .gitmodules und ohne erreichbares Remote. Der Untersuchungsgegenstand der Versuchsreihe war damit nicht reproduzierbar gesichert: Ein Klon haette ein leeres Verzeichnis erhalten, und die Belege der 3.287 Anforderungen waeren nicht ueberpruefbar gewesen. Umstellung: - Historie nach c:\DEV\CentronERP_git_snapshot_79c1142 ausgelagert (vollstaendig lesbar, enthaelt 79c1142 und Vorgaenger 89ccfd6) - Gitlink aus dem Index entfernt - Dateiinhalt aufgenommen: 24.557 Dateien, rund 333 MB Die verschachtelte .gitignore der Codebasis gilt weiter, Build-Artefakte bleiben ausgeschlossen. Details in Versuche/Versuch_01/_Codebasis-Nachweis.md
400 lines
14 KiB
C#
400 lines
14 KiB
C#
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<AppUserMaps>())
|
|
.Mappings(m => m.FluentMappings.Add<EmployeeCompactMaps>())
|
|
.Mappings(m => m.FluentMappings.Add<MandatorMaps>())
|
|
.Mappings(m => m.FluentMappings.Add<CountryMaps>())
|
|
.Mappings(m => m.FluentMappings.Add<FederalStateMaps>())
|
|
.Mappings(m => m.FluentMappings.Add<SupportLevelMaps>())
|
|
.Mappings(m => m.FluentMappings.Add<AppUserGroupMaps>())
|
|
.Mappings(m => m.FluentMappings.Add<AppRightMaps>())
|
|
.Mappings(m => m.FluentMappings.Add<ApplicationSettingMaps>());
|
|
ISessionFactory sessionFactory = fluentConfiguration.BuildSessionFactory();
|
|
ISession session = sessionFactory.OpenSession();
|
|
|
|
new SchemaExport(fluentConfiguration.BuildConfiguration()).Execute(true, true, false, session.Connection, Console.Out);
|
|
return session;
|
|
}
|
|
}
|
|
}
|