public async Task CreateMaintenanceWindow_Valid()
        {
            var startTime = DateTime.UtcNow.AddDays(3);
            var endTime   = DateTime.UtcNow.AddDays(4);

            var jsWindow = new JsMaintenanceWindowInput
            {
                StartTime = startTime.ToString(FormattingConstants.DateTimeFormat),
                EndTime   = endTime.ToString(FormattingConstants.DateTimeFormat),
            };

            var window = new MaintenanceWindow
            {
                StartTime = startTime,
                EndTime   = endTime
            };

            var validation = new ValidationResult();

            var createdWindow = new MaintenanceWindow
            {
                Id        = 1,
                IsDeleted = false,
                StartTime = DateTime.ParseExact(jsWindow.StartTime, FormattingConstants.DateTimeFormat, CultureInfo.InvariantCulture),
                EndTime   = DateTime.ParseExact(jsWindow.EndTime, FormattingConstants.DateTimeFormat, CultureInfo.InvariantCulture),
            };

            var expectedResult = new MaintenanceWindowValidationResult
            {
                Valid  = true,
                Result = createdWindow
            };

            maintenanceWindowModelServiceMock.Setup(mock => mock.ConvertFromJS(jsWindow)).Returns(window);

            maintenanceWindowValidatorMock.Setup(mock => mock.Validate(window))
            .Returns(validation);

            maintenanceWindowSchedulingServiceMock.Setup(mock => mock.ScheduleMaintenanceWindowAsync(window))
            .ReturnsAsync(createdWindow);

            var result = await maintenanceWindowSchedulerController.CreateMaintenanceWindow(jsWindow);

            Assert.That(result, Is.Not.Null);
            Assert.That(result.Valid, Is.EqualTo(expectedResult.Valid));
            Assert.That(result.Result, Is.EqualTo(expectedResult.Result));
            Assert.That(result.Errors, Is.EqualTo(expectedResult.Errors));
        }
        public async Task CreateMaintenanceWindow_Invalid()
        {
            var startTime = DateTime.UtcNow.AddDays(4);
            var endTime   = DateTime.UtcNow.AddDays(3);

            var jsWindow = new JsMaintenanceWindowInput
            {
                StartTime = startTime.ToString(FormattingConstants.DateTimeFormat),
                EndTime   = endTime.ToString(FormattingConstants.DateTimeFormat),
            };

            var window = new MaintenanceWindow
            {
                StartTime = startTime,
                EndTime   = endTime
            };

            var validation = new ValidationResult
            {
                Errors = { new ValidationFailure("StartTime", "Start Time must be after End Time.") }
            };

            var expectedValidation = new MaintenanceWindowValidationResult
            {
                Valid  = false,
                Result = window,
                Errors = new List <string>
                {
                    "Start Time must be after End Time."
                }
            };

            maintenanceWindowModelServiceMock.Setup(mock => mock.ConvertFromJS(jsWindow)).Returns(window);
            maintenanceWindowValidatorMock.Setup(mock => mock.Validate(window))
            .Returns(validation);

            var result = await maintenanceWindowSchedulerController.CreateMaintenanceWindow(jsWindow);

            Assert.That(result, Is.Not.Null);
            Assert.That(result.Valid, Is.EqualTo(expectedValidation.Valid));
            Assert.That(result.Valid, Is.False);
            Assert.That(result.Result, Is.EqualTo(expectedValidation.Result));
        }