using Centron.BusinessLogic.EDI.AlsoCH; using Centron.Data.WebServices.Administration.MasterData; using CentronSoftware.Centron.WebServices.Entities.Sales.Receipts.ReceiptReceiver; using CentronSoftware.Centron.WebServices.Entities.Sales.Receipts.SupplierOrders; using CentronSoftware.Centron.WebServices.Entities.Warehousing; using JetBrains.Annotations; namespace Centron.Tests.BL.EDI.AlsoCH; [TestSubject(typeof(AlsoOrderCH_BL))] public class AlsoOrderCH_BLTest { private const string _orderSender = "L01"; private const string _customerNumberAtSupplier = "10776732"; private readonly List _testCountries = CreateTestCountries(); private readonly List _testReceiptItems = CreateTestReceiptItems(); private readonly List _testSpecialAgreements = new(); [Fact] public void CreateOrderDocument_ShouldMapLicenseReceiverContact_WhenLicenseReceiverHasContactData() { // Arrange var receipt = CreateTestReceipt(); receipt.ReceiptReceiverLicense = new ReceiptReceiverDTO { CompanyName = "Licence Company AG", Email = "licence@example.ch", Phone = "+41 44 1234567", Fax = "+41 44 7654321" }; var orderBL = new AlsoOrderCH_BL(receipt); // Act var xmlDoc = orderBL.CreateOrderDocument( _orderSender, _customerNumberAtSupplier, _testReceiptItems, _testSpecialAgreements, _testCountries); // Assert var communicationInfo = xmlDoc.Descendants() .FirstOrDefault(x => x.Name.LocalName == "licence_information") ?.Descendants().FirstOrDefault(x => x.Name.LocalName == "reseller_party") ?.Descendants().FirstOrDefault(x => x.Name.LocalName == "communication_info"); Assert.NotNull(communicationInfo); var email = communicationInfo.Descendants().FirstOrDefault(x => x.Name.LocalName == "PAEA"); Assert.NotNull(email); Assert.Equal("licence@example.ch", email.Value); var phone = communicationInfo.Descendants().FirstOrDefault(x => x.Name.LocalName == "PPHN"); Assert.NotNull(phone); Assert.Equal("+41 44 1234567", phone.Value); var fax = communicationInfo.Descendants().FirstOrDefault(x => x.Name.LocalName == "PFAN"); Assert.NotNull(fax); Assert.Equal("+41 44 7654321", fax.Value); var name = communicationInfo.Descendants().FirstOrDefault(x => x.Name.LocalName == "CCNA"); Assert.NotNull(name); Assert.Equal("Licence Company AG", name.Value); } [Fact] public void CreateOrderDocument_ShouldNotEmitEmail_WhenLicenseReceiverHasNoEmail() { // Arrange var receipt = CreateTestReceipt(); receipt.ReceiptReceiverLicense = new ReceiptReceiverDTO { CompanyName = "Licence Company AG" }; var orderBL = new AlsoOrderCH_BL(receipt); // Act var xmlDoc = orderBL.CreateOrderDocument( _orderSender, _customerNumberAtSupplier, _testReceiptItems, _testSpecialAgreements, _testCountries); // Assert var email = xmlDoc.Descendants().FirstOrDefault(x => x.Name.LocalName == "PAEA"); Assert.Null(email); } #region Test Data Creation Methods private static ReceiptSupplierOrderDTO CreateTestReceipt() { return new ReceiptSupplierOrderDTO { Number = 12345, Version = 1, Date = new DateTime(2024, 10, 14) }; } private static List CreateTestCountries() { return [ new CountryDTO { I3D = 1, CountryCode = "CH" } ]; } private static List CreateTestReceiptItems() { return [ new ReceiptSupplierOrderItemDTO { I3D = 1001, InternalPosition = 1, ArticleI3D = 2001, ArticleCode = "ART-001", ManufacturerCode = "MFG-001", QuantityComplete = 3m, BasePrice = 10.50m } ]; } #endregion }