using System; using System.Collections.Generic; using System.Linq; using Centron.BusinessLogic; using Centron.BusinessLogic.WebServices.Sales.Receipts; using Centron.Interfaces.Sales.Receipts; using Centron.Tests.EndToEnd.Infrastructure; using CentronSoftware.Centron.WebServices.Entities.Sales.Receipts; using Xunit; using Xunit.Abstractions; namespace Centron.Tests.EndToEnd.Tests.ReceiptProvisionSchemaExpiration; public class ReceiptProvisionSchemaExpirationTests : EndToEndTest { public ReceiptProvisionSchemaExpirationTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } public override void Execute() { this.CreateSchemas(); this.VerifySettings("Before"); this.UpdateExpiredSchemas(); this.VerifySettings("After"); this.CanDeleteNewSchema(); } private void CreateSchemas() { using var session = new BLSession(); // Create Schemas var newSchema = new ReceiptProvisionSchemaDTO { Name = "Neues Schema", Items = new List { new() { Receiver = ReceiptProvisionReceiver.CustomerAdviser1, SharePercentage = 100, ProvisionPercentage = 10, Source = ReceiptProvisionSource.All, Value = ReceiptProvisionValue.Auto }, } }; newSchema = session.GetBL().SaveProvisionSchema(newSchema, this.GetLoggedInUser()); var oldSchema = new ReceiptProvisionSchemaDTO { Name = "Altes Schema", ExpiresAt = DateTime.Today.AddDays(-1), // Expired yesterday NextSchemaI3D = newSchema.I3D, Items = new List { new() { Receiver = ReceiptProvisionReceiver.CustomerAdviser2, SharePercentage = 100, ProvisionPercentage = 5, Source = ReceiptProvisionSource.All, Value = ReceiptProvisionValue.Earnings }, } }; oldSchema = session.GetBL().SaveProvisionSchema(oldSchema, this.GetLoggedInUser()); // Assign global schema var receiptSettings = session.GetBL().GetReceiptSettings(this.GetLoggedInUser().User); receiptSettings.GlobalReceiptProvisionSchemaI3D = oldSchema.I3D; session.GetBL().UpdateReceiptSettings(receiptSettings, this.GetLoggedInUser().User); // Assign customer schema var customerAssignments = new List { new() { SchemaI3D = oldSchema.I3D, CustomerAssignments = new List { new () { CustomerNumber = 10000 } } } }; session.GetBL().UpdateProvisionSchemaCustomerAssignments(customerAssignments, this.GetLoggedInUser()); } private void UpdateExpiredSchemas() { using var session = new BLSession(); var expiredSchema = session.GetBL().GetAllProvisionSchemas().FirstOrDefault(f => f.ExpiresAt is not null); // Update the expired schema session.GetBL().UpdateProvisionSchemaWithNextSchema(expiredSchema.I3D, expiredSchema.NextSchemaI3D.Value); } private void VerifySettings(string name) { using var session = new BLSession(); // Verify global schema is updated now var receiptSettings = session.GetBL().GetReceiptSettings(this.GetLoggedInUser().User); this.Verifier.Verify($"{name}_GlobalSchemaI3D", receiptSettings.GlobalReceiptProvisionSchemaI3D); // Verify customer assignments var schemaDetails = session.GetBL().GetAllProvisionSchemaDetails(); this.Verifier.Verify($"{name}_SchemaDetails", schemaDetails); } private void CanDeleteNewSchema() { const int NextSchemaI3D = 1; using var session = new BLSession(); session.GetBL().DeleteProvisionSchema(NextSchemaI3D, this.GetLoggedInUser()); } }