Files
Masterarbeit/QuellCode/CentronERP/tests/Centron.Tests.EndToEnd/TicketTests/Ticket160877/Ticket160877Tests.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

142 lines
5.1 KiB
C#

using System;
using System.Data;
using System.Linq;
using Centron.BusinessLogic.Sales.Receipts.DataAndResults;
using Centron.BusinessLogic.WebServices.Sales.Receipts;
using Centron.BusinessLogic.WebServices.Sales.Receipts.DataAndResults;
using Centron.Core.Extensions;
using Centron.DAO.AdoNETDataAccess;
using Centron.Data.WebServices.Sales.Receipts.Invoices;
using Centron.Interfaces;
using Centron.Interfaces.Administration.Environment;
using Centron.Interfaces.BL;
using Centron.Tests.EndToEnd.Infrastructure;
using Xunit;
using Xunit.Abstractions;
namespace Centron.Tests.EndToEnd.TicketTests.Ticket160877;
public class Ticket160877Tests : EndToEndTest
{
private const int CustomerI3D = 10022;
public Ticket160877Tests(ITestOutputHelper testOutputHelper)
: base(testOutputHelper)
{
}
public override void Execute()
{
var headerFrom = new DateTime(2026, 1, 1, 10, 0, 0);
var headerTo = new DateTime(2026, 1, 31, 13, 30, 0);
var itemFrom = new DateTime(2026, 2, 1, 10, 0, 0);
var itemTo = new DateTime(2026, 2, 28, 13, 30, 0);
var invoice = this.CreateInvoice();
invoice.ServicePeriodFrom = headerFrom;
invoice.ServicePeriodTo = headerTo;
invoice.Items.Single().ServicePeriodFrom = itemFrom;
invoice.Items.Single().ServicePeriodTo = itemTo;
var savedInvoice = this.SaveInvoice(invoice);
AssertServicePeriod(savedInvoice, headerFrom, headerTo, itemFrom, itemTo);
var loadedInvoice = this.LoadInvoice(savedInvoice.I3D);
AssertServicePeriod(loadedInvoice, headerFrom, headerTo, itemFrom, itemTo);
Assert.Equal(headerFrom, this.GetDateFromDatabase("dbo.RechKopf", "ServicePeriodFrom", savedInvoice.I3D));
Assert.Equal(headerTo, this.GetDateFromDatabase("dbo.RechKopf", "ServicePeriodTo", savedInvoice.I3D));
Assert.Equal(itemFrom, this.GetDateFromDatabase("dbo.RechPos", "ServicePeriodFrom", savedInvoice.Items.Single().I3D));
Assert.Equal(itemTo, this.GetDateFromDatabase("dbo.RechPos", "ServicePeriodTo", savedInvoice.Items.Single().I3D));
this.AssertInvalidHeaderServicePeriodIsRejected();
}
private ReceiptInvoiceDTO CreateInvoice()
{
var invoice = (ReceiptInvoiceDTO)this.WithSession(s => s.GetBL<ReceiptWebServiceBL>().CreateNewReceipt(
CentronObjectKindNumeric.InvoiceClass,
this.GetLoggedInUser(),
CustomerI3D,
new CreateReceiptData
{
IgnoreCallbacks = true,
},
addressI3D: null,
contactPersonI3D: null,
insertSalutationAndAgreement: true,
ignoreDefaultContract: false,
insertCustomerDiscount: true)).ThrowIfError().Receipt;
invoice.Items.Clear();
var item = (ReceiptInvoiceItemDTO)this.WithSession(s => s.GetBL<ReceiptItemWebServiceBL>().CreateFreetextReceiptItem(
invoice,
"Leistungszeitraum Test"));
invoice.Items.Add(item);
return invoice;
}
private ReceiptInvoiceDTO SaveInvoice(ReceiptInvoiceDTO invoice)
{
return (ReceiptInvoiceDTO)this.TrySaveInvoice(invoice).ThrowIfError().Receipt;
}
private Result<SaveReceiptResultDTO> TrySaveInvoice(ReceiptInvoiceDTO invoice)
{
return this.WithSession(s => s.GetBL<ReceiptWebServiceBL>().SaveReceipt(
invoice,
this.GetLoggedInUser().User,
new SaveReceiptData
{
IgnoreCallbacks = true,
},
autoLockIfNewReceipt: false,
CreatedThroughApplication.WebServices,
receiptTemplateFolderI3D: null));
}
private ReceiptInvoiceDTO LoadInvoice(int invoiceI3D)
{
return (ReceiptInvoiceDTO)this.WithSession(s => s.GetBL<ReceiptWebServiceBL>().GetReceiptByI3D(
invoiceI3D,
CentronObjectKindNumeric.InvoiceClass)).ThrowIfError();
}
private DateTime GetDateFromDatabase(string tableName, string columnName, int i3D)
{
return this.Sql<DateTime>(
$"SELECT {columnName} FROM {tableName} WHERE I3D = @I3D",
command => command.AddParameter("I3D", i3D, DbType.Int32));
}
private static void AssertServicePeriod(
ReceiptInvoiceDTO invoice,
DateTime headerFrom,
DateTime headerTo,
DateTime itemFrom,
DateTime itemTo)
{
Assert.Equal(headerFrom, invoice.ServicePeriodFrom);
Assert.Equal(headerTo, invoice.ServicePeriodTo);
var item = invoice.Items.Single();
Assert.Equal(itemFrom, item.ServicePeriodFrom);
Assert.Equal(itemTo, item.ServicePeriodTo);
}
private void AssertInvalidHeaderServicePeriodIsRejected()
{
var invoice = this.CreateInvoice();
invoice.ServicePeriodFrom = new DateTime(2026, 3, 1, 14, 0, 0);
invoice.ServicePeriodTo = new DateTime(2026, 3, 1, 13, 0, 0);
var result = this.TrySaveInvoice(invoice);
Assert.Equal(ResultStatus.Error, result.Status);
Assert.Contains("im Belegkopf", result.Message);
Assert.Contains("nicht nach", result.Message);
}
}