using System; using System.Collections.Generic; using System.Linq; using Centron.BusinessLogic.Administration.Rights; using Centron.BusinessLogic.Sales.Support; using Centron.Tests.EndToEnd.Infrastructure; using CentronSoftware.Centron.WebServices.Entities.Sales.Support; using Xunit; using Xunit.Abstractions; namespace Centron.Tests.EndToEnd.Tests.Helpdesk.Scheduler; public class HelpdeskSchedulerTests : EndToEndTest { public HelpdeskSchedulerTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } public override void Execute() { this.PrepareDatabase(); // CrmProjects this.Test("CrmProjects_All", new DateTime(2000, 1, 1), new DateTime(2020, 12, 31), HelpdeskSchedulerItemKind.CrmProject); // Helpdesks this.Test("Helpdesk_All", new DateTime(2000, 1, 1), new DateTime(2020, 12, 31), HelpdeskSchedulerItemKind.Helpdesk); // Timer this.Test("Timer_All", new DateTime(2000, 1, 1), new DateTime(2020, 12, 31), HelpdeskSchedulerItemKind.Timer); // ScheduleItems this.Test("ScheduleItems_All", new DateTime(2000, 1, 1), new DateTime(2020, 12, 31), HelpdeskSchedulerItemKind.ScheduleItem); // All of those should find the same ticket // The ticket in year 2016 is from 2016. 12. 21 till 2016. 12. 23 this.Test("Helpdesk_2016", new DateTime(2016, 12, 20), new DateTime(2016, 12, 25), HelpdeskSchedulerItemKind.Helpdesk); this.Test("Helpdesk_2016", new DateTime(2016, 12, 21), new DateTime(2016, 12, 23), HelpdeskSchedulerItemKind.Helpdesk); this.Test("Helpdesk_2016", new DateTime(2016, 12, 22), new DateTime(2016, 12, 23), HelpdeskSchedulerItemKind.Helpdesk); this.Test("Helpdesk_2016", new DateTime(2016, 12, 23), new DateTime(2016, 12, 23), HelpdeskSchedulerItemKind.Helpdesk); this.Test("Helpdesk_2016", new DateTime(2016, 12, 23), new DateTime(2016, 12, 24), HelpdeskSchedulerItemKind.Helpdesk); this.Test("Helpdesk_2016", new DateTime(2016, 12, 23), new DateTime(2016, 12, 25), HelpdeskSchedulerItemKind.Helpdesk); this.Test("Helpdesk_2016", new DateTime(2016, 12, 22), new DateTime(2016, 12, 22), HelpdeskSchedulerItemKind.Helpdesk); // Test employee filter this.Test("Timer_Employee_25", new DateTime(2000, 1, 1), new DateTime(2020, 12, 31), new List { 25 }, HelpdeskSchedulerItemKind.Timer); } private void PrepareDatabase() { this.Sql($"DELETE FROM dbo.Sichtrus WHERE Recht = {(int)UserRightsConst.RIGHT_KALENDERANZEIGENEIGENE}"); } private void Test(string name, DateTime start, DateTime end, params HelpdeskSchedulerItemKind[] kinds) { this.Test(name, start, end, null, kinds); } private void Test(string name, DateTime start, DateTime end, List employeeI3Ds, params HelpdeskSchedulerItemKind[] kinds) { var filter = new HelpdeskSchedulerItemFilter { Start = start, End = end, ItemKinds = kinds.ToList(), EmployeeI3Ds = employeeI3Ds, }; var result = this.WithSession(s => s.GetBL().GetSchedulerItems(filter, this.GetLoggedInUser())); this.Verifier.Verify(name, result); Assert.All(result, item => { var itemStart = item.Start.GetValueOrDefault(DateTime.MinValue); var itemEnd = item.End.GetValueOrDefault(DateTime.MaxValue); var timesOverlap = start <= itemEnd && itemStart <= end; Assert.True(timesOverlap); if (employeeI3Ds != null) { Assert.True(item.EmployeeI3D == null || employeeI3Ds.Contains(item.EmployeeI3D.Value)); } }); } }