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
This commit is contained in:
Christoph Schwörer
2026-08-26 07:43:51 +02:00
parent 18edae75b6
commit f045b99a25
24664 changed files with 5846716 additions and 1 deletions
@@ -0,0 +1,688 @@
using Centron.BusinessLogic.Sales.Receipts.Internal;
using Centron.BusinessLogic.WebServices;
using Centron.DAO;
using Centron.DAO.Mappings;
using Centron.DAO.Mappings.Accounts;
using Centron.DAO.Mappings.Administration;
using Centron.DAO.Mappings.Administration.Company;
using Centron.DAO.Mappings.Administration.Employees;
using Centron.DAO.Mappings.Administration.Settings;
using Centron.DAO.Mappings.CustomerArea;
using Centron.DAO.Mappings.CustomerArea.Support;
using Centron.DAO.Mappings.Sales.Receipts;
using Centron.DAO.Mappings.States;
using Centron.DAO.Mappings.TemporaryEntities;
using Centron.Data.Entities.Accounts;
using Centron.Data.Entities.Administration.MasterData;
using Centron.Data.Entities.BusinessPartner;
using Centron.Data.Entities.CustomerArea;
using Centron.Data.Entities.Sales.Receipts;
using Centron.Data.Entities.Sales.Receipts.Invoices;
using Centron.Data.Entities.Sales.Receipts.Offers;
using Centron.Data.Entities.Sales.Receipts.SupplierInvoices;
using Centron.Tests.BL.DatabaseMappings;
using CentronSoftware.Centron.WebServices.Entities.Sales.Receipts.ReceiptReceiver;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using JetBrains.Annotations;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
namespace Centron.Tests.BL.Sales.Receipts.Internal;
[TestSubject(typeof(ReceiptAddressAndContactPersonHelperBL))]
public class ReceiptAddressAndContactPersonHelperBLTest
{
[Fact]
public void ReceiptCanBeConvertedToStructuredReceiptReceiver()
{
var session = CreateSession();
var country = new Country()
{
Name = "Deutschland"
};
session.Save(country, 1);
var address = new Address()
{
Street = "Main Street 123a",
Zip = "12345",
City = "Munich",
Country = country,
PrintType = true,
PrintContactPerson = true,
PrintDepartmentContact = 1,
PrintDepartment = true,
HasPostOfficeBox = false,
PostOfficeBox = "",
Department = "Department",
Language = country,
Currency = country,
VariableAddress = 0
};
session.Save(address, 2);
var department = new ContactDepartment()
{
Department = "Contact Department"
};
session.Save(department, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = department,
Address = address
};
session.Save(contact, 4);
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Department",
ContactName = "John Doe",
ContactDepartment = "Contact Department",
Street = "Main Street",
HouseNumber = "123a",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = ""
};
var receipt = "Tree\nDepartment \nJohn Doe\nContact Department\nMain Street 123a\n12345 Munich\n";
var result = receiptAddressAndContactPersonHelperBl.ConvertReceiverToReceiptReceiver(receipt, 2, 4, false);
Assert.Equivalent(expectedReceiptReceiver, result);
}
[Fact]
public void ReceiptReceiverCanBeUpdated()
{
var session = CreateSession();
var country = new Country()
{
Name = "Deutschland"
};
session.Save(country, 1);
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
var address = new Address()
{
Street = "Main Street 123a",
Zip = "12345",
City = "Munich",
Country = country,
PrintType = true,
PrintContactPerson = true,
PrintDepartmentContact = 1,
PrintDepartment = true,
HasPostOfficeBox = false,
PostOfficeBox = "",
Department = "Department",
Language = country,
Currency = country,
VariableAddress = 0,
CustomerI3D = 5
};
session.Save(address, 2);
var department = new ContactDepartment()
{
Department = "Contact Department"
};
session.Save(department, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = department,
Address = address
};
session.Save(contact, 4);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Department",
ContactName = "John Doe",
ContactDepartment = "Contact Department",
Street = "Main Street",
HouseNumber = "123a",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = "",
CustomerNumber = 5,
AccountI3D = null,
SupplierNumber = null,
FederalState = string.Empty
};
var receipt = new ReceiptOffer() { CustomerI3D = 5 };
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receipt, 5, 2, 4);
Assert.Equivalent(expectedReceiptReceiver, receipt.ReceiptReceiver);
var receiptReceiverDto = receiptAddressAndContactPersonHelperBl.CreateReceiverObject(false, true, 5, "Tree", 2, 4);
var expectedDto = ObjectMapper.Map<ReceiptReceiver, ReceiptReceiverDTO>(expectedReceiptReceiver);
expectedDto.ReceiverText = receiptAddressAndContactPersonHelperBl.CreateReceiverTextFromDTO(expectedDto);
Assert.Equivalent(expectedDto, receiptReceiverDto);
}
[Fact]
public void ReceiptReceiverCanHandleUniCode()
{
var session = CreateSession();
var country = new Country()
{
Name = "China"
};
session.Save(country, 1);
var address = new Address()
{
Street = "香港葵涌大連排金龙工业中心二期12楼L室",
Zip = "12345",
City = "HongKong",
Country = country,
PrintType = true,
PrintContactPerson = true,
PrintDepartment = true,
PrintDepartmentContact = 1,
HasPostOfficeBox = false,
PostOfficeBox = "",
Department = "Foreign",
Language = country,
Currency = country,
VariableAddress = 0
};
session.Save(address, 2);
var department = new ContactDepartment()
{
Department = "Foreign Contact Department"
};
session.Save(department, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = department,
Address = address
};
session.Save(contact, 4);
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Foreign",
ContactName = "John Doe",
ContactDepartment = "Foreign Contact Department",
Street = "香港葵涌大連排金龙工业中心二期",
HouseNumber = "12楼L室",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "HongKong",
Country = "China",
CountryI3D = 1,
AdditionalAddressSupplement = "",
CustomerNumber = 5,
AccountI3D = null,
SupplierNumber = null,
FederalState = string.Empty
};
var receipt = new ReceiptOffer() { CustomerI3D = 5 };
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receipt, 5, 2, 4);
Assert.Equivalent(expectedReceiptReceiver, receipt.ReceiptReceiver);
}
[Fact]
public void UpdatingReceiptReceiverCanHandleAlternativeAddresses()
{
var session = CreateSession();
var expectedReceiptReceiverDelivery = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Department Delivery",
ContactName = "John Doe",
ContactDepartment = "Contact Department",
Street = "Main Street",
HouseNumber = "123a",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = "",
FederalState = string.Empty
};
var expectedReceiptReceiverInvoice = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Department Invoice",
ContactName = "John Doe",
ContactDepartment = "Contact Department",
Street = "Main Street",
HouseNumber = "123a",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = "",
FederalState = string.Empty
};
var country = new Country()
{
Name = "Deutschland"
};
session.Save(country, 1);
var address = new Address()
{
Street = "Main Street 123a",
Zip = "12345",
City = "Munich",
Country = country,
PrintType = true,
PrintContactPerson = true,
PrintDepartmentContact = 1,
PrintDepartment = true,
HasPostOfficeBox = false,
PostOfficeBox = "",
Department = "Department",
Language = country,
Currency = country,
VariableAddress = 0
};
session.Save(address, 2);
var department = new ContactDepartment()
{
Department = "Contact Department"
};
session.Save(department, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = department,
Address = address
};
session.Save(contact, 4);
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
var accountCustomer = new AccountCustomer
{
Number = 5,
ReceiptReceiverDelivery = expectedReceiptReceiverDelivery,
ReceiptReceiverInvoice = expectedReceiptReceiverInvoice
};
session.Save(accountCustomer, 7);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Department",
ContactName = "John Doe",
ContactDepartment = "Contact Department",
Street = "Main Street",
HouseNumber = "123a",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = "",
CustomerNumber = 5,
AccountI3D = null,
SupplierNumber = null,
FederalState = string.Empty
};
var receipt = new ReceiptInvoice()
{
CustomerI3D = 5,
AddressI3D = 2,
ContactPersonI3D = 4,
InvoiceAddressAddressI3D = 1,
InvoiceAddressContactPersonI3D = 1,
DeliveryAddressAddressI3D = 1,
DeliveryAddressContactPersonI3D = 1,
Receiver = "receiver",
InvoiceAddress = "",
DeliveryAddress = "",
ReceiptReceiverInvoice = expectedReceiptReceiverInvoice,
ReceiptReceiverDelivery = expectedReceiptReceiverDelivery
};
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receipt);
Assert.Equivalent(expectedReceiptReceiver, receipt.ReceiptReceiver);
var receiptWithInvoiceAddressUsed = new ReceiptInvoice()
{
CustomerI3D = 5,
AddressI3D = 1,
ContactPersonI3D = 1,
InvoiceAddressAddressI3D = 2,
InvoiceAddressContactPersonI3D = 4,
DeliveryAddressAddressI3D = 1,
DeliveryAddressContactPersonI3D = 1,
Receiver = "receiver",
InvoiceAddress = "receiver",
DeliveryAddress = "",
ReceiptReceiverInvoice = expectedReceiptReceiverInvoice,
ReceiptReceiverDelivery = expectedReceiptReceiverDelivery
};
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receiptWithInvoiceAddressUsed);
Assert.Equivalent(expectedReceiptReceiverInvoice, receiptWithInvoiceAddressUsed.ReceiptReceiver);
var receiptWithDeliveryAddressUsed = new ReceiptInvoice()
{
CustomerI3D = 5,
AddressI3D = 1,
ContactPersonI3D = 1,
InvoiceAddressAddressI3D = 1,
InvoiceAddressContactPersonI3D = 1,
DeliveryAddressAddressI3D = 2,
DeliveryAddressContactPersonI3D = 4,
Receiver = "receiver",
InvoiceAddress = "",
DeliveryAddress = "receiver",
ReceiptReceiverInvoice = expectedReceiptReceiverInvoice,
ReceiptReceiverDelivery = expectedReceiptReceiverDelivery
};
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receiptWithDeliveryAddressUsed);
Assert.Equivalent(expectedReceiptReceiverDelivery, receiptWithDeliveryAddressUsed.ReceiptReceiver);
}
[Fact]
public void HouseNumberCanBeBeforeStreet()
{
var session = CreateSession();
var country = new Country()
{
Name = "Deutschland"
};
session.Save(country, 1);
var address = new Address()
{
Street = "123b Main Street",
Zip = "12345",
City = "Munich",
Country = country,
PrintType = true,
PrintContactPerson = true,
PrintDepartmentContact = 1,
PrintDepartment = true,
HasPostOfficeBox = true,
PostOfficeBox = "Box",
Department = "Department",
Language = country,
Currency = country,
VariableAddress = 0
};
session.Save(address, 2);
var departement = new ContactDepartment()
{
Department = "Contact Department"
};
session.Save(departement, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = departement,
Address = address
};
session.Save(contact, 4);
var supplier = new Supplier()
{
Name = "Tree"
};
session.Save(supplier, 5);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "Department",
ContactName = "John Doe",
ContactDepartment = "Contact Department",
Street = "Main Street",
HouseNumber = "123b",
HasPostOfficeBox = true,
PostOfficeBox = "Box",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = "",
CustomerNumber = null,
AccountI3D = null,
SupplierNumber = 5,
FederalState = string.Empty
};
var receipt = new ReceiptSupplierInvoice() { SupplierI3D = 5 };
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receipt, 5, 2, 4);
Assert.Equivalent(expectedReceiptReceiver, receipt.ReceiptReceiver);
}
[Fact]
public void ContactPersonDepartmentAndCompanyNameCanBeSuppressed()
{
var session = CreateSession();
var country = new Country()
{
Name = "Deutschland"
};
session.Save(country, 1);
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
var address = new Address()
{
Street = "Main Street 123a",
Zip = "12345",
City = "Munich",
Country = country,
PrintType = false,
PrintContactPerson = false,
PrintDepartment = false,
HasPostOfficeBox = false,
PostOfficeBox = "",
Department = "Department",
Language = country,
Currency = country,
VariableAddress = 0,
CustomerI3D = 5
};
session.Save(address, 2);
var departement = new ContactDepartment()
{
Department = "Contact Department"
};
session.Save(departement, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = departement,
Address = address
};
session.Save(contact, 4);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "",
Department = "",
ContactName = "",
ContactDepartment = "",
Street = "Main Street",
HouseNumber = "123a",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "12345",
City = "Munich",
Country = "Deutschland",
CountryI3D = 1,
AdditionalAddressSupplement = "",
CustomerNumber = 5,
AccountI3D = null,
SupplierNumber = null,
FederalState = string.Empty
};
var receipt = new ReceiptInvoice() { CustomerI3D = 5 };
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receipt, 5, 2, 4);
Assert.Equivalent(expectedReceiptReceiver, receipt.ReceiptReceiver);
var receiptReceiverDto = receiptAddressAndContactPersonHelperBl.CreateReceiverObject(false, true, 5, "", 2, 4);
var expectedDto = ObjectMapper.Map<ReceiptReceiver, ReceiptReceiverDTO>(expectedReceiptReceiver);
expectedDto.ReceiverText = receiptAddressAndContactPersonHelperBl.CreateReceiverTextFromDTO(expectedDto);
Assert.Equivalent(expectedDto, receiptReceiverDto);
}
[Fact]
public void ReceiptReceiverCanHandleMissingValues()
{
var session = CreateSession();
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
session.Flush();
var daoSession = new DAOSession(session);
var receiptAddressAndContactPersonHelperBl = new ReceiptAddressAndContactPersonHelperBL(daoSession);
var expectedReceiptReceiver = new ReceiptReceiver()
{
CompanyName = "Tree",
Department = "",
ContactName = "",
ContactDepartment = "",
Street = "",
HouseNumber = "",
HasPostOfficeBox = false,
PostOfficeBox = "",
Zip = "",
City = "",
Country = "",
AdditionalAddressSupplement = "",
CustomerNumber = 5,
AccountI3D = null,
SupplierNumber = null,
FederalState = string.Empty
};
var receipt = new ReceiptOffer() { CustomerI3D = 5 };
receiptAddressAndContactPersonHelperBl.UpdateReceiptReceiver(receipt, 5, 2, 4);
Assert.Equivalent(expectedReceiptReceiver, receipt.ReceiptReceiver);
// Test with a different customer number (5 instead of 10000 to match the actual customer)
var receiptReceiverDto = receiptAddressAndContactPersonHelperBl.CreateReceiverObject(false, true, 5, "Tree", 2, 4);
var expectedDto = ObjectMapper.Map<ReceiptReceiver, ReceiptReceiverDTO>(expectedReceiptReceiver);
expectedDto.ReceiverText = receiptAddressAndContactPersonHelperBl.CreateReceiverTextFromDTO(expectedDto);
Assert.Equivalent(expectedDto, receiptReceiverDto);
}
public ISession CreateSession()
{
var fluentConfiguration = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory)
.Mappings(m => m.FluentMappings.Add<AddressMaps>())
.Mappings(m => m.FluentMappings.Add<CountryMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptReceiverMaps>())
.Mappings(m => m.FluentMappings.Add<ContactPersonMaps>())
.Mappings(m => m.FluentMappings.Add<EmployeeCompactMaps>())
.Mappings(m => m.FluentMappings.Add<AppUserMaps>())
.Mappings(m => m.FluentMappings.Add<SupportLevelMaps>())
.Mappings(m => m.FluentMappings.Add<CustomerDepartmentMaps>())
.Mappings(m => m.FluentMappings.Add<CustomerSalutationMaps>())
.Mappings(m => m.FluentMappings.Add<MandatorMaps>())
.Mappings(m => m.FluentMappings.Add<FederalStateMaps>())
.Mappings(m => m.FluentMappings.Add<AppUserGroupMaps>())
.Mappings(m => m.FluentMappings.Add<AppRightMaps>())
.Mappings(m => m.FluentMappings.Add<CustomerCompactMaps>())
.Mappings(m => m.FluentMappings.Add<SupplierMaps>())
.Mappings(m => m.FluentMappings.Add<AccountCustomerMapsForTest>())
.Mappings(m => m.FluentMappings.Add<AppSettingMaps>())
.Mappings(m => m.FluentMappings.Add<AppSettingDataMaps>())
.Mappings(m => m.FluentMappings.Add<ApplicationSettingMaps>())
.Mappings(m => m.FluentMappings.Add<AccountSearchItemAccMapsForTest>())
.Mappings(m => m.FluentMappings.Add<AccountTypeToAccountMapsForTest>())
.Mappings(m => m.FluentMappings.Add<AccountSupplierMapsForTest>())
.Mappings(m => m.FluentMappings.Add<AccountAddressMaps>())
.Mappings(m => m.FluentMappings.Add<AccountAddressContactMaps>())
.Mappings(m => m.FluentMappings.Add<GeoInfoMaps>())
;
ISessionFactory sessionFactory = fluentConfiguration.BuildSessionFactory();
ISession session = sessionFactory.OpenSession();
new SchemaExport(fluentConfiguration.BuildConfiguration()).Execute(true, true, false, session.Connection, Console.Out);
return session;
}
}
@@ -0,0 +1,28 @@
using Centron.BusinessLogic.Sales.Receipts.Internal;
using Centron.Interfaces;
using Centron.Interfaces.Warehousing;
namespace Centron.Tests.BL.Sales.Receipts.Internal;
public class ReceiptBarcodeBLTest
{
[Theory]
[InlineData(BarcodeState.InDeliveryList, true)]
[InlineData(BarcodeState.InStock, false)]
[InlineData(BarcodeState.LostAtStocktaking, false)]
[InlineData(BarcodeState.ManuallyBookedOut, false)]
public void ShouldUpdateBarcode_ForPickupList_OnlyAllowsBarcodeInDeliveryList(BarcodeState currentState, bool expected)
{
bool result = ReceiptBarcodeBL.ShouldUpdateBarcode(CentronObjectKindNumeric.PickupListClass, currentState);
Assert.Equal(expected, result);
}
[Fact]
public void ShouldUpdateBarcode_ForOtherReceiptKind_DoesNotRestrictBarcodeState()
{
bool result = ReceiptBarcodeBL.ShouldUpdateBarcode(CentronObjectKindNumeric.CreditVoucherClass, BarcodeState.ManuallyBookedOut);
Assert.True(result);
}
}
@@ -0,0 +1,53 @@
using System.Linq.Expressions;
using Centron.BusinessLogic.Sales.Receipts.Internal;
using Centron.Data.Entities.Sales.Receipts.DeliveryLists;
using Centron.Interfaces.Sales.Receipts.DeliveryLists;
namespace Centron.Tests.BL.Sales.Receipts.Internal;
public class ReceiptExpressionHelperTest
{
[Fact]
public void GetExpression_RewritesArrayContainsForReceiptFilters()
{
int[] receiptItemI3Ds = [1, 2];
Expression<Func<ReceiptDeliveryList, bool>> filter =
receipt => receipt.Items.Any(item => receiptItemI3Ds.Contains(item.I3D));
var result = ReceiptExpressionHelper.GetExpression<ReceiptDeliveryList, IReceiptDeliveryList>(filter);
Assert.NotNull(result);
Assert.False(ContainsArrayContainsOrImplicitConversion(result));
}
private static bool ContainsArrayContainsOrImplicitConversion(Expression expression)
{
var visitor = new ArrayContainsOrImplicitConversionFinder();
visitor.Visit(expression);
return visitor.Found;
}
private sealed class ArrayContainsOrImplicitConversionFinder : ExpressionVisitor
{
public bool Found { get; private set; }
protected override Expression VisitMethodCall(MethodCallExpression node)
{
if (node.Method.Name == "op_Implicit")
{
Found = true;
return node;
}
if (node.Method.Name == "Contains" && node.Arguments.Count > 0)
{
var source = node.Object ?? node.Arguments[0];
if (source.Type.IsArray)
Found = true;
}
return base.VisitMethodCall(node);
}
}
}
@@ -0,0 +1,295 @@
using Centron.BusinessLogic.Sales.Receipts.Internal;
using Centron.DAO;
using Centron.DAO.Mappings;
using Centron.DAO.Mappings.Accounts;
using Centron.DAO.Mappings.Administration;
using Centron.DAO.Mappings.Administration.Company;
using Centron.DAO.Mappings.Administration.Employees;
using Centron.DAO.Mappings.CustomerArea;
using Centron.DAO.Mappings.CustomerArea.Support;
using Centron.DAO.Mappings.Sales.Receipts;
using Centron.DAO.Mappings.States;
using Centron.Tests.BL.DatabaseMappings;
using Centron.Data.Entities.Accounts;
using Centron.Data.Entities.CustomerArea;
using Centron.Interfaces.Accounts;
using Centron.Interfaces.BL;
using Centron.BusinessLogic.WebServices.Sales.Receipts.DataAndResults;
using Centron.DAO.Mappings.Administration.Settings;
using Centron.DAO.Mappings.Sales.Receipts.ContractLists;
using Centron.DAO.Mappings.Sales.Receipts.CreditVouchers;
using Centron.DAO.Mappings.Sales.Receipts.DeliveryLists;
using Centron.DAO.Mappings.Sales.Receipts.Invoices;
using Centron.DAO.Mappings.Sales.Receipts.Offers;
using Centron.DAO.Mappings.Sales.Receipts.Orders;
using Centron.DAO.Mappings.Sales.Receipts.PickupLists;
using Centron.DAO.Mappings.TemporaryEntities;
using Centron.Data.Entities.Administration.MasterData;
using Centron.Data.Entities.Sales.Receipts;
using Centron.Data.Entities.Sales.Receipts.Offers;
using Centron.Interfaces.Sales.Receipts;
using Centron.Tests.BL.Fixtures;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using JetBrains.Annotations;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
using AccountType = Centron.Data.Entities.Accounts.AccountType;
namespace Centron.Tests.BL.Sales.Receipts.Internal;
[TestSubject(typeof(ReceiptReceiverUpdaterBL))]
public class ReceiptReceiverUpdaterBLTest : LicenseManagerFixture
{
[Fact]
public void FindReceiptReceiverForCustomerAccounts_ReturnsUpdates_ForAlternativeReceivers()
{
var session = CreateSession();
var country = new Country() { Name = "Deutschland" };
session.Save(country, 1);
var address = new AccountAddress()
{
Street = "Main Street 123a",
Zip = "12345",
City = "Munich",
PrintDepartment = true,
PostOfficeBox = string.Empty,
CountryI3D = 1,
};
session.Save(address, 2);
var contact = new AccountAddressContact()
{
Firstname = "John",
Lastname = "Doe",
DepartmentText = "Dept",
};
session.Save(contact, 3);
var account = new Account()
{
I3D = 100,
Name = "Main Account",
Number = 1,
IsActive = true,
IsLocked = false
};
session.Save(account, 100);
var accountType = new AccountType()
{
Name = "Kunde",
I3D = 200,
Kind = AccountTypeKind.Customer
};
session.Save(accountType, 200);
var accountCustomer = new AccountCustomer()
{
I3D = 300,
AlternativeDeliveryReceiver = "Main Account\nDept\nJohn Doe\nMain Street 123a\n12345 Munich",
AlternativeDeliveryAddressI3D = 2,
AlternativeDeliveryAddressContactI3D = 3,
AlternativeDeliveryAccountI3D = 100,
AlternativeInvoiceReceiver = "Dept\nMr John Doe\nMain Street 123a\n12345 Munich",
AlternativeInvoiceAddressI3D = 2,
AlternativeInvoiceAddressContactI3D = 3,
AlternativeInvoiceAccountI3D = 100
};
session.Save(accountCustomer, 300);
var typeBinding = new AccountTypeToAccount()
{
I3D = 400,
AccountI3D = 100,
AccountTypeI3D = 200,
AccountCustomerI3D = 300
};
session.Save(typeBinding, 400);
session.Flush();
var daoSession = new DAOSession(session);
var bl = new ReceiptReceiverUpdaterBL(daoSession);
var result = bl.FindReceiptReceiverForCustomerAccounts();
Assert.Equal(ResultStatus.Success, result.Status);
Assert.NotNull(result.Data);
Assert.Equal(2, result.Data.Count);
var delivery = result.Data.First(f => f.Type == ReceiptReceiverUpdateInformation.ReceiptReceiverType.Delivery);
Assert.True(delivery.Update);
Assert.Equal("Main Account\nDept\nJohn Doe\nMain Street 123a\n12345 Munich", delivery.Receiver);
Assert.NotNull(delivery.ReceiptReceiver);
Assert.Equal("Main Account", delivery.ReceiptReceiver.CompanyName);
var invoice = result.Data.First(f => f.Type == ReceiptReceiverUpdateInformation.ReceiptReceiverType.Invoice);
Assert.False(invoice.Update);
Assert.Equal("Dept\nMr John Doe\nMain Street 123a\n12345 Munich", invoice.Receiver);
Assert.Null(invoice.ReceiptReceiver);
Assert.Equal("Nicht erkannte Zeilen: " + Environment.NewLine + "Mr John Doe" + Environment.NewLine + "Mögliche Zeilen: " + Environment.NewLine + "John Doe, " + Environment.NewLine + "Deutschland, " + Environment.NewLine + "Main Account", invoice.Message);
}
[Fact]
public void FindReceiptReceiverForReceipts_ReturnsUpdates_ForAlternativeReceivers()
{
var session = CreateSession();
var country = new Country()
{
Name = "Deutschland"
};
session.Save(country, 1);
var address = new Address()
{
Street = "Main Street 123a",
Zip = "12345",
City = "Munich",
Country = country,
PrintType = true,
PrintContactPerson = true,
PrintDepartmentContact = 1,
PrintDepartment = true,
HasPostOfficeBox = false,
PostOfficeBox = "",
Department = "Department",
Language = country,
Currency = country,
VariableAddress = 0
};
session.Save(address, 2);
var department = new ContactDepartment()
{
Department = "Contact Department"
};
session.Save(department, 3);
var contact = new ContactPerson()
{
FirstName = "John",
LastName = "Doe",
Department = department,
Address = address
};
session.Save(contact, 4);
var customer = new CustomerCompact()
{
Name = "Tree"
};
session.Save(customer, 5);
var receipt = new ReceiptOffer()
{
CustomerI3D = 5,
DeliveryAddress = "Tree\nContact Department\nJohn Doe\nMain Street 123a\n12345 Munich",
DeliveryAddressCustomerI3D = 5,
DeliveryAddressAddressI3D = 2,
DeliveryAddressContactPersonI3D = 4,
InvoiceAddress = "Tree\nContact Department\nMr John Doe\nMain Street 123a\n12345 Munich",
InvoiceAddressCustomerI3D = 5,
InvoiceAddressAddressI3D = 2,
InvoiceAddressContactPersonI3D = 4,
Receiver = "Receiver",
Phone = "1234",
Fax = "1234",
Email = "test@test.de",
CreatedThroughApplicationVersion = "2.0.0",
ChangedThroughApplicationVersion = "2.0.0",
CurrencyString = "€",
Street = "Street",
PostOfficeBox = "",
City = "City",
Zip = "12345",
ContactName = "Name",
Information = "",
Number = 1234,
Date = DateTime.Now,
Version = 1,
State = ReceiptState.Active,
BranchOrigin = BranchOrigin.Creator,
CurrencyFactor = 1,
PurchaseOrderNumber = "1234",
};
session.Save(receipt, 7);
var provisionSchema = new ReceiptProvisionSchema
{
Name = "Schema",
};
session.Save(provisionSchema, 8);
session.Flush();
var daoSession = new DAOSession(session);
var bl = new ReceiptReceiverUpdaterBL(daoSession);
var result = bl.FindReceiptReceiverForReceipts();
Assert.Equal(ResultStatus.Success, result.Status);
Assert.NotNull(result.Data);
Assert.Equal(3, result.Data.Count);
var delivery = result.Data.First(f => f.Type == ReceiptReceiverUpdateInformation.ReceiptReceiverType.Delivery);
Assert.True(delivery.Update);
Assert.Equal("Tree\nContact Department\nJohn Doe\nMain Street 123a\n12345 Munich", delivery.Receiver);
Assert.NotNull(delivery.ReceiptReceiver);
Assert.Equal("Tree", delivery.ReceiptReceiver.CompanyName);
var invoice = result.Data.First(f => f.Type == ReceiptReceiverUpdateInformation.ReceiptReceiverType.Invoice);
Assert.False(invoice.Update);
Assert.Equal("Tree\nContact Department\nMr John Doe\nMain Street 123a\n12345 Munich", invoice.Receiver);
Assert.Null(invoice.ReceiptReceiver);
Assert.Equal("Nicht erkannte Zeilen: " + Environment.NewLine + "Mr John Doe" + Environment.NewLine + "Mögliche Zeilen: " + Environment.NewLine + "John Doe, " + Environment.NewLine + "Department, " + Environment.NewLine + "Deutschland" , invoice.Message);
}
public ISession CreateSession()
{
var fluentConfiguration = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory)
.Mappings(m => m.FluentMappings.Add<AddressMaps>())
.Mappings(m => m.FluentMappings.Add<CountryMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptReceiverMaps>())
.Mappings(m => m.FluentMappings.Add<ContactPersonMaps>())
.Mappings(m => m.FluentMappings.Add<EmployeeCompactMaps>())
.Mappings(m => m.FluentMappings.Add<AppUserMaps>())
.Mappings(m => m.FluentMappings.Add<SupportLevelMaps>())
.Mappings(m => m.FluentMappings.Add<CustomerDepartmentMaps>())
.Mappings(m => m.FluentMappings.Add<CustomerSalutationMaps>())
.Mappings(m => m.FluentMappings.Add<MandatorMaps>())
.Mappings(m => m.FluentMappings.Add<FederalStateMaps>())
.Mappings(m => m.FluentMappings.Add<AppUserGroupMaps>())
.Mappings(m => m.FluentMappings.Add<AppRightMaps>())
.Mappings(m => m.FluentMappings.Add<CustomerCompactMaps>())
.Mappings(m => m.FluentMappings.Add<SupplierMaps>())
.Mappings(m => m.FluentMappings.Add<AccountAddressMaps>())
.Mappings(m => m.FluentMappings.Add<AccountCustomerMapsForTest>())
.Mappings(m => m.FluentMappings.Add<AccountMaps>())
.Mappings(m => m.FluentMappings.Add<AccountTypeMaps>())
.Mappings(m => m.FluentMappings.Add<AccountTypeToAccountMaps>())
.Mappings(m => m.FluentMappings.Add<GeoInfoMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptOfferMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptOrderMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptOrderItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptInvoiceMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptInvoiceItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptContractMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptContractItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptCreditVoucherMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptCreditVoucherItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptProvisionSchemaMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptProvisionSchemaItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptProvisionItemEntityMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptOfferItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptDeliveryListMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptDeliveryListItemMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptPickupListMaps>())
.Mappings(m => m.FluentMappings.Add<ReceiptPickupListItemMaps>())
.Mappings(m => m.FluentMappings.Add<AccountAddressContactMaps>())
.Mappings(m => m.FluentMappings.Add<AppSettingMaps>())
.Mappings(m => m.FluentMappings.Add<ApplicationSettingMaps>())
.Mappings(m => m.FluentMappings.Add<AccountSearchItemAccMaps>());
ISessionFactory sessionFactory = fluentConfiguration.BuildSessionFactory();
ISession session = sessionFactory.OpenSession();
new SchemaExport(fluentConfiguration.BuildConfiguration()).Execute(true, true, false, session.Connection, Console.Out);
return session;
}
}
@@ -0,0 +1,493 @@
using Centron.BusinessLogic.Sales.Support;
using Centron.DAO;
using Centron.DAO.Mappings.Administration;
using Centron.DAO.Mappings.CustomerArea.Support;
using Centron.Data.Entities.Administration;
using Centron.Data.Entities.CustomerArea.Support;
using Centron.Data.Entities.EmployeeArea;
using Centron.Interfaces.BL;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using JetBrains.Annotations;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
namespace Centron.Tests.BL.Sales.Support;
[TestSubject(typeof(HelpdeskTimeRecordingBL))]
public class HelpdeskTimeRecordingBLTest
{
[Fact]
public void FreeRecordingCanBeStarted()
{
var session = CreateSession();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var result = helpdeskTimeRecordingBl.StartRecording(0, currentUser, false, false);
Assert.Equal(ResultStatus.Success, result.Status);
Assert.Equal(5, result.Data.EmployeeI3D);
Assert.Equal(0, result.Data.HelpdeskI3D);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Single(savedEntities);
var savedEntity = savedEntities.First();
Assert.Equal(5, savedEntity.EmployeeI3D);
Assert.Equal(0, savedEntity.HelpdeskI3D);
Assert.Equal(RecordingKind.Start, savedEntity.Kind);
Assert.InRange(savedEntity.Date, DateTime.Now.AddMinutes(-1), DateTime.Now.AddMinutes(1));
}
[Fact]
public void FreeRecordingCanNotBePausedForOtherUsers()
{
var session = CreateSession();
var recording = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 3,
HelpdeskI3D = 0,
Kind = RecordingKind.Start,
Date = DateTime.Now
};
session.Save(recording);
session.Flush();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var result = helpdeskTimeRecordingBl.PauseRecording("GUID-123", 0, currentUser, false);
Assert.Equal(ResultStatus.Error, result.Status);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Single(savedEntities);
}
[Fact]
public void FreeRecordingCanNotBeResumedForOtherUsers()
{
var session = CreateSession();
var recording1 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 3,
HelpdeskI3D = 0,
Kind = RecordingKind.Start,
Date = DateTime.Now.AddMinutes(-5),
};
var recording2 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 3,
HelpdeskI3D = 0,
Kind = RecordingKind.Pause,
Date = DateTime.Now,
};
session.Save(recording1);
session.Save(recording2);
session.Flush();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var result = helpdeskTimeRecordingBl.ResumeRecording("GUID-123", 0, currentUser, false);
Assert.Equal(ResultStatus.Error, result.Status);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Equal(2, savedEntities.Count);
}
[Fact]
public void FreeRecordingCanNotBeStoppedForOtherUsers()
{
var session = CreateSession();
var recording = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 3,
HelpdeskI3D = 0,
Kind = RecordingKind.Start,
Date = DateTime.Now
};
session.Save(recording);
session.Flush();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var result = helpdeskTimeRecordingBl.StopRecording("GUID-123", 0, currentUser, false);
Assert.Equal(ResultStatus.Error, result.Status);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Single(savedEntities);
}
[Fact]
public void RecordingCanBeStartedAtSpecificDate()
{
var session = CreateSession();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var date = new DateTime(2020, 1, 1);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var result = helpdeskTimeRecordingBl.StartRecording(0, currentUser, false, false, date);
Assert.Equal(ResultStatus.Success, result.Status);
Assert.Equal(5, result.Data.EmployeeI3D);
Assert.Equal(0, result.Data.HelpdeskI3D);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Single(savedEntities);
var savedEntity = savedEntities.First();
Assert.Equal(5, savedEntity.EmployeeI3D);
Assert.Equal(0, savedEntity.HelpdeskI3D);
Assert.Equal(RecordingKind.Start, savedEntity.Kind);
Assert.Equal(savedEntity.Date, date);
}
[Fact]
public void FreeRecordingCanBeStartedPausedAndResumed()
{
var session = CreateSession();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var recording = helpdeskTimeRecordingBl.StartRecording(0, currentUser, false, false);
helpdeskTimeRecordingBl.PauseRecording(recording.Data.Guid, 0, currentUser);
var resultSecondPause = helpdeskTimeRecordingBl.PauseRecording(recording.Data.Guid, 0, currentUser);
helpdeskTimeRecordingBl.ResumeRecording(recording.Data.Guid, 0, currentUser);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Equal(3, savedEntities.Count);
var savedEntity1 = savedEntities[0];
var savedEntity2 = savedEntities[1];
var savedEntity3 = savedEntities[2];
Assert.Equal(5, savedEntity1.EmployeeI3D);
Assert.Equal(5, savedEntity2.EmployeeI3D);
Assert.Equal(5, savedEntity3.EmployeeI3D);
Assert.Equal(recording.Data.Guid, savedEntity1.Guid);
Assert.Equal(recording.Data.Guid, savedEntity2.Guid);
Assert.Equal(recording.Data.Guid, savedEntity3.Guid);
Assert.Equal(RecordingKind.Start, savedEntity1.Kind);
Assert.Equal(RecordingKind.Pause, savedEntity2.Kind);
Assert.Equal(RecordingKind.Resume, savedEntity3.Kind);
}
[Fact]
public void CommentsToRecordingsCanBeAdded()
{
var date = new DateTime(2020, 1, 1);
var session = CreateSession();
var recording1 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 5,
HelpdeskI3D = 0,
Kind = RecordingKind.Start,
Date = date
};
var recording2 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 5,
HelpdeskI3D = 0,
Kind = RecordingKind.Start,
Date = date
};
session.Save(recording1);
session.Save(recording2);
session.Flush();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var result = helpdeskTimeRecordingBl.SaveTimeRecordingComment("GUID-123", 0, currentUser, "some comment");
Assert.Equal(ResultStatus.Success, result.Status);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Equal(2, savedEntities.Count);
var savedEntity1 = savedEntities[0];
var savedEntity2 = savedEntities[1];
Assert.Equal(5, savedEntity1.EmployeeI3D);
Assert.Equal(5, savedEntity2.EmployeeI3D);
Assert.Equal(0, savedEntity1.HelpdeskI3D);
Assert.Equal(0, savedEntity2.HelpdeskI3D);
Assert.Equal(RecordingKind.Start, savedEntity1.Kind);
Assert.Equal(RecordingKind.Start, savedEntity2.Kind);
Assert.Equal(date, savedEntity1.Date);
Assert.Equal(date, savedEntity2.Date);
Assert.Equal("some comment", savedEntity1.Comment);
Assert.Equal("some comment", savedEntity2.Comment);
}
[Fact]
public void LastClosedCanBeSaved()
{
var date = new DateTime(2020, 1, 1);
var dateLastClosed = new DateTime(2022, 1, 1);
var helpdeskId = 1;
var session = CreateSession();
var recording1 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 5,
HelpdeskI3D = helpdeskId,
Kind = RecordingKind.Start,
Date = date
};
var recording2 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 5,
HelpdeskI3D = helpdeskId,
Kind = RecordingKind.Start,
Date = date
};
session.Save(recording1);
session.Save(recording2);
session.Flush();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var result = helpdeskTimeRecordingBl.SaveTimeRecordingLastClosed(helpdeskId, currentUser, dateLastClosed);
Assert.Equal(ResultStatus.Success, result.Status);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Equal(2, savedEntities.Count);
var savedEntity1 = savedEntities[0];
var savedEntity2 = savedEntities[1];
Assert.Equal(5, savedEntity1.EmployeeI3D);
Assert.Equal(5, savedEntity2.EmployeeI3D);
Assert.Equal(helpdeskId, savedEntity1.HelpdeskI3D);
Assert.Equal(helpdeskId, savedEntity2.HelpdeskI3D);
Assert.Equal(RecordingKind.Start, savedEntity1.Kind);
Assert.Equal(RecordingKind.Start, savedEntity2.Kind);
Assert.Equal(date, savedEntity1.Date);
Assert.Equal(date, savedEntity2.Date);
Assert.Equal(dateLastClosed, savedEntity1.LastClosed);
Assert.Equal(dateLastClosed, savedEntity2.LastClosed);
}
[Fact]
public void RecordingCanBePaused()
{
var date = new DateTime(2020, 1, 1);
var session = CreateSession();
var recording = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 5,
HelpdeskI3D = 1,
Kind = RecordingKind.Start,
Date = date
};
session.Save(recording);
session.Flush();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var result = helpdeskTimeRecordingBl.PauseRecording("GUID-123", 1, currentUser);
Assert.Equal(ResultStatus.Success, result.Status);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Equal(2, savedEntities.Count);
var savedEntity1 = savedEntities[0];
var savedEntity2 = savedEntities[1];
Assert.Equal(5, savedEntity1.EmployeeI3D);
Assert.Equal(5, savedEntity2.EmployeeI3D);
Assert.Equal(1, savedEntity1.HelpdeskI3D);
Assert.Equal(1, savedEntity2.HelpdeskI3D);
Assert.Equal(RecordingKind.Start, savedEntity1.Kind);
Assert.Equal(RecordingKind.Pause, savedEntity2.Kind);
}
[Fact]
public void RecordingCanBeResumed()
{
var date = new DateTime(2020, 1, 1);
var session = CreateSession();
var recording1 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 5,
HelpdeskI3D = 1,
Kind = RecordingKind.Start,
Date = date.AddHours(-1)
};
var recording2 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 5,
HelpdeskI3D = 1,
Kind = RecordingKind.Pause,
Date = date
};
session.Save(recording1);
session.Save(recording2);
session.Flush();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var result = helpdeskTimeRecordingBl.ResumeRecording("GUID-123", 1, currentUser);
Assert.Equal(ResultStatus.Success, result.Status);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Equal(3, savedEntities.Count);
var savedEntity1 = savedEntities[0];
var savedEntity2 = savedEntities[1];
var savedEntity3 = savedEntities[2];
Assert.Equal(5, savedEntity1.EmployeeI3D);
Assert.Equal(5, savedEntity2.EmployeeI3D);
Assert.Equal(5, savedEntity3.EmployeeI3D);
Assert.Equal(1, savedEntity1.HelpdeskI3D);
Assert.Equal(1, savedEntity2.HelpdeskI3D);
Assert.Equal(1, savedEntity3.HelpdeskI3D);
Assert.Equal(RecordingKind.Start, savedEntity1.Kind);
Assert.Equal(RecordingKind.Pause, savedEntity2.Kind);
Assert.Equal(RecordingKind.Resume, savedEntity3.Kind);
}
[Fact]
public void RecordingCanBeStopped()
{
var date = new DateTime(2020, 1, 1);
var session = CreateSession();
var recording1 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 5,
HelpdeskI3D = 1,
Kind = RecordingKind.Start,
Date = date.AddHours(-1)
};
var recording2 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 5,
HelpdeskI3D = 1,
Kind = RecordingKind.Pause,
Date = date
};
session.Save(recording1);
session.Save(recording2);
session.Flush();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var result = helpdeskTimeRecordingBl.StopRecording("GUID-123", 0, currentUser);
Assert.Equal(ResultStatus.Success, result.Status);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Empty(savedEntities);
}
[Fact]
public void RecordingCanBeCleared()
{
var date = new DateTime(2020, 1, 1);
var session = CreateSession();
var recording1 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 5,
HelpdeskI3D = 1,
Kind = RecordingKind.Start,
Date = date.AddHours(-1)
};
var recording2 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 5,
HelpdeskI3D = 1,
Kind = RecordingKind.Pause,
Date = date
};
session.Save(recording1);
session.Save(recording2);
session.Flush();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var result = helpdeskTimeRecordingBl.ClearRecording("GUID-123", 0, currentUser);
Assert.Equal(ResultStatus.Success, result.Status);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Empty(savedEntities);
}
[Fact]
public void RecordingsCanBeCleared()
{
var date = new DateTime(2020, 1, 1);
var session = CreateSession();
var recording1 = new HelpdeskTimeRecording {
Guid = "GUID-123",
EmployeeI3D = 1,
HelpdeskI3D = 1,
Kind = RecordingKind.Start,
Date = date.AddHours(-1)
};
var recording2 = new HelpdeskTimeRecording {
Guid = "GUID-345",
EmployeeI3D = 5,
HelpdeskI3D = 2,
Kind = RecordingKind.Start,
Date = date
};
var recording3 = new HelpdeskTimeRecording {
Guid = "GUID-345",
EmployeeI3D = 5,
HelpdeskI3D = 2,
Kind = RecordingKind.Pause,
Date = date
};
session.Save(recording1);
session.Save(recording2);
session.Save(recording3);
session.Flush();
var daoSession = new DAOSession(session);
var helpdeskTimeRecordingBl = new HelpdeskTimeRecordingBL(daoSession);
var currentUser = new AppUser { Employee = new EmployeeCompact {I3D = 5} };
var result = helpdeskTimeRecordingBl.ClearRecordings([new RecordingInformation { HelpdeskI3D = 2, EmployeeI3D = 1}], currentUser);
Assert.Equal(ResultStatus.Success, result.Status);
var savedEntities = session.Query<HelpdeskTimeRecording>().ToList();
Assert.Single(savedEntities);
Assert.Equal(recording1, savedEntities.First());
}
public ISession CreateSession()
{
var fluentConfiguration = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory)
.Mappings(m => m.FluentMappings.Add<HelpdeskTimeRecordingMaps>())
.Mappings(m => m.FluentMappings.Add<StopwatchNotificationMaps>())
.Mappings(m => m.FluentMappings.Add<AppGroupRightAssignmentMaps>());
ISessionFactory sessionFactory = fluentConfiguration.BuildSessionFactory();
ISession session = sessionFactory.OpenSession();
new SchemaExport(fluentConfiguration.BuildConfiguration()).Execute(true, true, false, session.Connection, Console.Out);
return session;
}
}