using System.Linq.Expressions; using Centron.BusinessLogic.Sales.Receipts.DataAndResults; using Centron.BusinessLogic.WebServices.Sales.Receipts.DataAndResults; using Centron.Data.WebServices.Sales.Receipts; using Centron.Host.Messages; using Centron.Host.RestRequests; using Centron.Interfaces; using CentronSoftware.Centron.WebServices.Connections; using CentronSoftware.Centron.WebServices.Entities.Sales.Receipts.ReceiptReceiver; namespace Centron.Tests.Integration; public class InvoiceIntegrationTest { [Fact] public async Task CreateOffer() { var connection = IntegrationTestHelper.GetConnection(); var loginToken = await IntegrationTestHelper.Login(connection); var request = new CreateReceiptRequest { ReceiptKind = CentronObjectKindNumeric.OfferClass, AddressI3D = 18, ContactPersonI3D = 30, CreateData = new CreateReceiptData(), CustomerI3D = 2, InsertSalutationAndAgreement = false, IgnoreDefaultContract = false, InsertCustomerDiscount = false }; Expression>> executeNewReceipt = f => f.CreateNewReceipt(GetRequest(request, loginToken)); var response = await connection.CallAsync(executeNewReceipt); Assert.NotNull(response); Assert.NotNull(response.Result.FirstOrDefault()); var i3d = response.Result.First().Receipt.ReceiptReceiver.I3D; var expectedReceiptReceiver = new ReceiptReceiverDTO { I3D = i3d, CompanyName= "Barkunde", Department = "", ContactName = "Frau Web Account", ContactDepartment = "", Street = "Kistlerhofstraße", HouseNumber = "75", HasPostOfficeBox = false, PostOfficeBox = "", Zip = "81379", City = "München", Country = "Deutschland", CountryI3D = 1, AdditionalAddressSupplement = "" }; Assert.Equivalent(expectedReceiptReceiver, response.Result.First().Receipt.ReceiptReceiver); } [Fact] public async Task CreateReceiverObject() { var connection = IntegrationTestHelper.GetConnection(); var loginToken = await IntegrationTestHelper.Login(connection); var request = new CreateReceiverTextRequest { AddressI3D = 18, ContactPersonI3D = 30, CustomerI3D = 2, }; Expression>> executeNewReceipt = f => f.CreateReceiverObject(GetRequest(request, loginToken)); var response = await connection.CallAsync(executeNewReceipt); Assert.NotNull(response); Assert.NotNull(response.Result.FirstOrDefault()); var i3d = response.Result.First().I3D; var expectedReceiptReceiver = new ReceiptReceiverDTO { I3D = i3d, CompanyName= "Barkunde", Department = "", ContactName = "Frau Web Account", ContactDepartment = "", Street = "Kistlerhofstraße", HouseNumber = "75", HasPostOfficeBox = false, PostOfficeBox = "", Zip = "81379", City = "München", Country = "Deutschland", CountryI3D = 1, AdditionalAddressSupplement = "" }; Assert.Equivalent(expectedReceiptReceiver, response.Result.First()); } [Fact] public async Task CreateInvoiceWithAlternativeAddress() { var connection = IntegrationTestHelper.GetConnection(); var loginToken = await IntegrationTestHelper.Login(connection); var request = new CreateReceiptRequest { ReceiptKind = CentronObjectKindNumeric.InvoiceClass, AddressI3D = 18, ContactPersonI3D = 30, CreateData = new CreateReceiptData(){UseAlternativeAddress = true}, CustomerI3D = 2, InsertSalutationAndAgreement = false, IgnoreDefaultContract = false, InsertCustomerDiscount = false }; Expression>> executeNewReceipt = f => f.CreateNewReceipt(GetRequest(request, loginToken)); var response = await connection.CallAsync(executeNewReceipt); Assert.NotNull(response); Assert.NotNull(response.Result.FirstOrDefault()); var i3d = response.Result.First().Receipt.ReceiptReceiver.I3D; var expectedReceiptReceiver = new ReceiptReceiverDTO { I3D = i3d, CompanyName= "Barkunde", Department = "", ContactName = "", ContactDepartment = "", Street = "Holzweg", HouseNumber = "1", HasPostOfficeBox = false, PostOfficeBox = "", Zip = "12345", City = "Wald", Country = "Deutschland", CountryI3D = 1, AdditionalAddressSupplement = "" }; Assert.Equivalent(expectedReceiptReceiver, response.Result.First().Receipt.ReceiptReceiver); } [Theory] [InlineData(CentronObjectKindNumeric.OfferClass)] [InlineData(CentronObjectKindNumeric.InvoiceClass)] [InlineData(CentronObjectKindNumeric.OrderClass)] [InlineData(CentronObjectKindNumeric.CreditVoucherClass)] public async Task SaveAndLoadOffer(CentronObjectKindNumeric receiptKind) { var connection = IntegrationTestHelper.GetConnection(); var loginToken = await IntegrationTestHelper.Login(connection); var request = new CreateReceiptRequest { ReceiptKind = receiptKind, AddressI3D = 18, ContactPersonI3D = 30, CreateData = new CreateReceiptData(){UseAlternativeAddress = false}, CustomerI3D = 2, InsertSalutationAndAgreement = false, IgnoreDefaultContract = false, InsertCustomerDiscount = false }; Expression>> executeNewReceipt = f => f.CreateNewReceipt(GetRequest(request, loginToken)); var response = await connection.CallAsync(executeNewReceipt); Assert.NotNull(response); Assert.NotNull(response.Result.FirstOrDefault()); var receipt = response.Result.First().Receipt; var requestSave = new SaveReceiptRequest() { Receipt = receipt, SaveData = new SaveReceiptData() { IgnoreCallbacks = true }, AutoLockIfNewReceipt = false, }; Expression>> executeSave = f => f.SaveReceipt(GetRequest(requestSave, loginToken)); var responseSave = await connection.CallAsync(executeSave); Assert.NotNull(responseSave); Assert.NotNull(responseSave.Result.First().ReceiptI3D); var requestSearch = new GetReceiptByI3DRequest() { ReceiptI3D = responseSave.Result.First().ReceiptI3D.GetValueOrDefault(), ObjectKind = responseSave.Result.First().Receipt.ReceiptKind }; Expression>> executeSearch = f => f.GetReceiptByI3D(GetRequest(requestSearch, loginToken)); var responseSearch = await connection.CallAsync(executeSearch); Assert.NotNull(responseSearch); var i3d = responseSearch.Result.First().ReceiptReceiver.I3D; var expectedReceiptReceiver = new ReceiptReceiverDTO { I3D = i3d, CompanyName= "Barkunde", Department = "", ContactName = "Frau Web Account", ContactDepartment = "", Street = "Kistlerhofstraße", HouseNumber = "75", HasPostOfficeBox = false, PostOfficeBox = "", Zip = "81379", City = "München", Country = "Deutschland", CountryI3D = 1, AdditionalAddressSupplement = "" }; Assert.Equivalent(expectedReceiptReceiver, responseSearch.Result.First().ReceiptReceiver); var requestNewVersion = new CreateNewReceiptVersionRequest() { ReceiptI3D = responseSave.Result.First().ReceiptI3D.GetValueOrDefault(), CreateNewVersionData = new CreateNewVersionData(){IgnoreCallbacks = true}, ReceiptKind = responseSave.Result.First().Receipt.ReceiptKind }; Expression>> executeNewVersion = f => f.CreateNewReceiptVersion(GetRequest(requestNewVersion, loginToken)); var responseNewVersion = await connection.CallAsync(executeNewVersion); Assert.Equivalent(expectedReceiptReceiver, responseNewVersion.Result.First().Receipt.ReceiptReceiver); } private Request GetRequest(T data, string ticket = "") { return new Request { Data = data, Ticket = ticket, }; } }