using System.Collections.Generic; using System.Linq; using Centron.BusinessLogic; using Centron.BusinessLogic.Accounts.ExtendedFilters; using Centron.BusinessLogic.EmployeeArea; using Centron.BusinessLogic.Sales.Support; using Centron.BusinessLogic.WebServices.Sales.Support; using Centron.Data.Entities.Accounts.ExtendedFilters; using Centron.Data.Entities.Administration.Logins; using Centron.Data.Entities.CustomerArea.Support; using Centron.Data.WebServices.Sales.Support; using Centron.Interfaces.BL; using Centron.Interfaces.SelfCare; using Centron.Tests.EndToEnd.Infrastructure; using CentronSoftware.Centron.WebServices.Entities.Accounts.ExtendedSearch; using CentronSoftware.Centron.WebServices.Entities.Accounts.ExtendedSearch.Parts; using CentronSoftware.Centron.WebServices.Entities.Sales.Support; using Xunit.Abstractions; namespace Centron.Tests.EndToEnd.Tests.Helpdesk { public class HelpdeskPatternTests : EndToEndTest { private LoggedInUser GetUser(BLSession session) => new LoggedInUser(session.GetBL().GetAppUser(f => f.I3D == 11)); private LoggedInUser GetUser() { using (var session = new BLSession()) return new LoggedInUser(session.GetBL().GetAppUser(f => f.I3D == 11)); } private readonly int _referenceCustomerI3D = 10000; public HelpdeskPatternTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } public override void Execute() { this.TicketPatternUpdateCustomerMappings(); } private void TicketPatternUpdateCustomerMappings() { using (var session = new BLSession()) { int accountCustomFilterI3D = this.CreateExtendedSearch(session); var patternWebServiceBL = session.GetBL(); var helpdeskPatternBL = session.GetBL(); var user = GetUser(session); // Part 1 : Prepare our ticket patterns with a manually added customer var ticketPattern = new TicketPatternDTO() { Caption = "Customer mapping test", IsActive = true, IsGlobal = true, CustomerI3D = this._referenceCustomerI3D, AccountCustomFilterI3D = accountCustomFilterI3D }; var ticketPatternI3D = patternWebServiceBL.SaveTicketPattern(ticketPattern, user).ThrowIfError(); ticketPattern = patternWebServiceBL.GetTicketPatternByI3D(ticketPatternI3D, null); ticketPattern.CustomerMappings = new List() { new TicketPatternCustomerMappingDTO() { TicketPatternI3D = ticketPattern.I3D, CustomerI3D = _referenceCustomerI3D, RuleType = MappingRuleType.None, DisplayText = "Manueller Kunde (10000)" } }; ticketPatternI3D = patternWebServiceBL.SaveTicketPattern(ticketPattern, user).ThrowIfError(); helpdeskPatternBL.TicketPatternUpdateCustomerMappings(new TicketPatternUpdateCustomerMappingsFilter() { RefreshForTicketPatternI3Ds = new List() { ticketPatternI3D } }); ticketPattern = patternWebServiceBL.GetTicketPatternByI3D(ticketPatternI3D, null); this.Verifier.Verify("TicketPatternAccountCustomFilterPart1", ticketPattern); // Part 2 Test: We change the RuleType of a mapping to excluded. After Update customer mapping it should be still there unchanged. var randomCustomerMapping = ticketPattern.CustomerMappings[5]; randomCustomerMapping.RuleType = MappingRuleType.Exclude; patternWebServiceBL.SaveTicketPattern(ticketPattern, user).ThrowIfError(); helpdeskPatternBL.TicketPatternUpdateCustomerMappings(new TicketPatternUpdateCustomerMappingsFilter() { RefreshForTicketPatternI3Ds = new List() { ticketPatternI3D } }); ticketPattern = patternWebServiceBL.GetTicketPatternByI3D(ticketPatternI3D, null); this.Verifier.Verify("TicketPatternAccountCustomFilterPart2", ticketPattern); // Part 3: We change the extended search, after update we should have only the data from the new extended search (excluded the manually changed ones) accountCustomFilterI3D = this.CreateExtendedSearch(session); ticketPattern.AccountCustomFilterI3D = accountCustomFilterI3D; patternWebServiceBL.SaveTicketPattern(ticketPattern, user).ThrowIfError(); helpdeskPatternBL.TicketPatternUpdateCustomerMappings(new TicketPatternUpdateCustomerMappingsFilter() { RefreshForTicketPatternI3Ds = new List() { ticketPatternI3D } }); ticketPattern = patternWebServiceBL.GetTicketPatternByI3D(ticketPatternI3D, null); this.Verifier.Verify("TicketPatternAccountCustomFilterPart3", ticketPattern); } } private int CreateExtendedSearch(BLSession session) { var customFilterBL = session.GetBL(); var customFilter = new AccountCustomFilter() { Caption = "Extended Search for ticket pattern tests", IsPublic = true }; var filter = new AccountSearchExtendedFilter() { OnlyDefaultAddress = true, OnlyDefaultAddressContact = true, FilterNode = new ExtendedFilterAndNode() { Nodes = new List() { new ExtendedFilterAddressCountryNode() { Values = new List() { 1 } // Germany } } } }; var data = customFilterBL.SaveCustomFilter(this.GetUser().User, customFilter, filter).ThrowIfError(); return data.I3D; } } }