Files
Masterarbeit/QuellCode/CentronERP/tests/backend/Centron.Tests.BL/EmployeeArea/AppUserBLTest.cs
T
Christoph Schwörer f045b99a25 Codebasis als Dateien ins Arbeitsrepo statt als Gitlink
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
2026-08-26 07:43:51 +02:00

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;
}
}
}