public static void BreakExclusionsDateTimeRangeIsValid_Passes_WithNotMachingSalesArea()
        {
            List <SalesArea>           salesAreas          = GetSalesAreas("sa1", "06:00:00", "1.00:00:00");
            List <BreakExclusionModel> breakExclusionsList = GetBreakExclusionsList("sa2",
                                                                                    DateTime.UtcNow.Date, DateTime.UtcNow.Date, "03:00:00", "02:00:00");
            List <string> errorMessage;

            Assert.IsTrue(BreakExclusionsValidations.DateTimeRangeIsValid(breakExclusionsList, salesAreas, out errorMessage));
            Assert.IsEmpty(errorMessage);
        }
        public static void BreakExclusionsDateTimeRangeIsValid_Passes_WithNullBreakExclusion()
        {
            var salesAreaName = "sa1";
            var salesAreas    = GetSalesAreas(salesAreaName, "06:00:00", "1.00:00:00");
            List <BreakExclusionModel> breakExclusionsList = null;
            List <string> errorMessage;

            Assert.IsTrue(BreakExclusionsValidations.DateTimeRangeIsValid(breakExclusionsList, salesAreas, out errorMessage));
            Assert.IsEmpty(errorMessage);
        }
Ejemplo n.º 3
0
        public IHttpActionResult Post([FromBody] CreatePassModel command)
        {
            // Check empty name
            if (string.IsNullOrWhiteSpace(command.Name))
            {
                return(this.Error().InvalidParameters("Pass name must be set"));
            }

            if (!ModelState.IsValid)
            {
                return(this.Error().InvalidParameters("Invalid pass parameters"));
            }

            // Check that pass doesn't exist
            Pass pass = _passRepository.Get(command.Id);

            if (pass != null)
            {
                return(this.Error().InvalidParameters("Pass already exists"));
            }

            // Check that pass with such name doesn't exist
            pass = _passRepository.FindByName(command.Name, command.IsLibraried);
            if (pass != null)
            {
                return(this.Error().InvalidParameters("Pass with such name already exists"));
            }

            if (_passInspectorService.InspectPassSalesAreaPriorities(
                    command.PassSalesAreaPriorities,
                    out string errorMessage))
            {
                return(this.Error().InvalidParameters(errorMessage));
            }

            List <string> breakExclusionsErrorMessages = new List <string>();

            if (!BreakExclusionsValidations.DateTimeRangeIsValid(command.BreakExclusions, _salesAreaRepository.GetAll(), out breakExclusionsErrorMessages))
            {
                return(this.Error().InvalidParameters(breakExclusionsErrorMessages));
            }

            pass = _mapper.Map <Pass>(command);
            IdUpdater.SetIds(pass, _identityGeneratorResolver);

            // Validate
            ValidateForSave(pass);

            // Save
            _passRepository.Add(pass);
            _passRepository.SaveChanges();   // Do not remove this, need to persist changes now so that we can return PassModel

            return(Ok(Mappings.MapToPassModel(pass, _passRepository, _mapper)));
        }
        public static void BreakExclusionsDateTimeRangeIsValid_Fails_WithBreakExclusionsStartDateAfterTheEndDate()
        {
            var salesAreaName = "sa1";
            List <SalesArea>           salesAreas          = GetSalesAreas(salesAreaName, "06:00:00", "03:00:00");
            List <BreakExclusionModel> breakExclusionsList = GetBreakExclusionsList(salesAreaName,
                                                                                    DateTime.UtcNow.Date.AddDays(1), DateTime.UtcNow.Date, "07:00:00", "08:00:00");
            List <string> errorMessage;

            Assert.IsFalse(BreakExclusionsValidations.DateTimeRangeIsValid(breakExclusionsList, salesAreas, out errorMessage));
            Assert.IsNotEmpty(errorMessage);
        }
        public static void BreakExclusionsDateTimeRangeIsValid_Passes_WithNullSalesArea()
        {
            var salesAreaName = "sa1";
            List <SalesArea>           salesAreas          = null;
            List <BreakExclusionModel> breakExclusionsList = GetBreakExclusionsList(salesAreaName,
                                                                                    DateTime.UtcNow.Date, DateTime.UtcNow.Date, "03:00:00", "02:00:00");
            List <string> errorMessage;

            Assert.IsTrue(BreakExclusionsValidations.DateTimeRangeIsValid(breakExclusionsList, salesAreas, out errorMessage));
            Assert.IsEmpty(errorMessage);
        }
Ejemplo n.º 6
0
        public IHttpActionResult Put([FromUri] int id, [FromBody] PassModel command)
        {
            // Check empty name
            if (string.IsNullOrWhiteSpace(command.Name))
            {
                return(this.Error().InvalidParameters("No name was entered"));
            }

            if (!ModelState.IsValid)
            {
                return(this.Error().InvalidParameters("Invalid pass parameters"));
            }

            var pass = _passRepository.Get(id);

            if (pass == null)
            {
                return(NotFound());
            }

            var pass2 = _passRepository.FindByName(command.Name, command.IsLibraried);

            if (pass2 != null && pass.Id != pass2.Id)
            {
                return(this.Error().InvalidParameters("Pass with such name already exists"));
            }

            if (_passInspectorService.InspectPassSalesAreaPriorities(
                    command.PassSalesAreaPriorities,
                    out string errorMessage))
            {
                return(this.Error().InvalidParameters(errorMessage));
            }

            List <string> breakExclusionsErrorMessages = new List <string>();

            if (!BreakExclusionsValidations.DateTimeRangeIsValid(command.BreakExclusions, _salesAreaRepository.GetAll(), out breakExclusionsErrorMessages))
            {
                return(this.Error().InvalidParameters(breakExclusionsErrorMessages));
            }

            Mappings.ApplyToPass(pass, command, _mapper);
            IdUpdater.SetIds(pass, _identityGeneratorResolver);

            // Validate
            ValidateForSave(pass);

            // Save
            _passRepository.Update(pass);
            _passRepository.SaveChanges();   // Do not remove this, need to persist changes now so that we can return PassModel

            return(Ok(Mappings.MapToPassModel(pass, _passRepository, _mapper)));
        }
        public static void BreakExclusionsDateRangeIsValid_FailsWithProperErrorMessage()
        {
            var salesAreaName = "sa1";
            List <SalesArea>           salesAreas          = GetSalesAreas(salesAreaName, "06:00:00", "3:00:00");
            List <BreakExclusionModel> breakExclusionsList = new List <BreakExclusionModel>();

            breakExclusionsList.Add(GetBreakExclusion(salesAreaName, DateTime.UtcNow.Date.AddDays(1), DateTime.UtcNow.Date, "07:00:00", "07:30:00"));
            List <string> errorMessage;
            var           expectedMessage = EndDateBeforeStartDateMessage(salesAreas[0], breakExclusionsList[0]);

            Assert.IsFalse(BreakExclusionsValidations.DateTimeRangeIsValid(breakExclusionsList, salesAreas, out errorMessage));
            Assert.AreEqual(errorMessage.Count, 1);
            Assert.AreEqual(errorMessage[0], expectedMessage);
        }
        public static void BreakExclusionsDateTimeRangeIsValid_Failes_WithInvalidData(string broadcastStartTime
                                                                                      , string broadcastDuration, string breakExclusionStartTime, string breakExclusionEndTime)
        {
            var salesAreaName       = "sa1";
            var salesAreas          = GetSalesAreas(salesAreaName, broadcastStartTime, broadcastDuration);
            var breakExclusionsList = GetBreakExclusionsList(salesAreaName,
                                                             DateTime.UtcNow.Date,
                                                             DateTime.UtcNow.Date,
                                                             breakExclusionStartTime,
                                                             breakExclusionEndTime);
            List <string> errorMessage;

            Assert.IsFalse(BreakExclusionsValidations.DateTimeRangeIsValid(breakExclusionsList, salesAreas, out errorMessage));
            Assert.IsNotEmpty(errorMessage);
        }
        public static void BreakExclusionsTimeRangeIsValid_FailsWithProperErrorMessage(string salesAreaName,
                                                                                       string broadcastStartTime, string broadcastDuration, string breakExclusionStartTime, string breakExclusionEndTime)
        {
            var salesArea        = GetSalesArea(salesAreaName, broadcastStartTime, broadcastDuration);
            var breakExclusion   = GetBreakExclusion(salesAreaName, DateTime.UtcNow.Date, DateTime.UtcNow.Date.AddDays(1), breakExclusionStartTime, breakExclusionEndTime);
            var expectedMessages = new Dictionary <string, List <string> >()
            {
                {
                    "S01",
                    new List <string>()
                    {
                        StartTimeIsBeforeBroadcastStartTimeMessage(salesArea, breakExclusion),
                        EndTimeIsBeforeBroadcastStartTimeMessage(salesArea, breakExclusion),
                    }
                },
                {
                    "S02",
                    new List <string>()
                    {
                        StartTimeIsBeforeBroadcastStartTimeMessage(salesArea, breakExclusion),
                        EndTimeIsBeforeBroadcastStartTimeMessage(salesArea, breakExclusion),
                    }
                },
                {
                    "S03",
                    new List <string>()
                    {
                        StartTimeIsBeforeBroadcastStartTimeMessage(salesArea, breakExclusion),
                    }
                },
                {
                    "S04",
                    new List <string>()
                    {
                        EndTimeIsAfterBroadcastEndTimeMessage(salesArea, breakExclusion),
                    }
                },
                {
                    "S05",
                    new List <string>()
                    {
                        StartTimeIsAfterBroadcastEndTimeMessage(salesArea, breakExclusion),
                        EndTimeIsAfterBroadcastEndTimeMessage(salesArea, breakExclusion),
                    }
                },
                {
                    "S06",
                    new List <string>()
                    {
                        StartTimeIsAfterBroadcastEndTimeMessage(salesArea, breakExclusion),
                        EndTimeIsAfterBroadcastEndTimeMessage(salesArea, breakExclusion),
                    }
                },
                {
                    "S07",
                    new List <string>()
                    {
                        StartTimeIsBeforeBroadcastStartTimeMessage(salesArea, breakExclusion),
                    }
                },
                {
                    "S08",
                    new List <string>()
                    {
                        EndTimeIsAfterBroadcastEndTimeMessage(salesArea, breakExclusion),
                    }
                },
                {
                    "S09",
                    new List <string>()
                    {
                        StartTimeIsBeforeBroadcastStartTimeMessage(salesArea, breakExclusion),
                        EndTimeIsAfterBroadcastEndTimeMessage(salesArea, breakExclusion),
                    }
                },
                {
                    "S10",
                    new List <string>()
                    {
                        StartimeIsAfterEndTimeMessage(salesArea, breakExclusion),
                    }
                },
                {
                    "S11",
                    new List <string>()
                    {
                        StartimeIsAfterEndTimeMessage(salesArea, breakExclusion),
                    }
                },
                {
                    "S12",
                    new List <string>()
                    {
                        StartimeIsAfterEndTimeMessage(salesArea, breakExclusion),
                    }
                },
                {
                    "S13",
                    new List <string>()
                    {
                        StartimeIsAfterEndTimeMessage(salesArea, breakExclusion),
                    }
                },
            };

            var breakExclusionsList = new List <BreakExclusionModel>()
            {
                breakExclusion
            };
            var salesAreas = new List <SalesArea>()
            {
                salesArea
            };
            List <string> errorMessages;

            Assert.IsFalse(BreakExclusionsValidations.DateTimeRangeIsValid(breakExclusionsList, salesAreas, out errorMessages));
            Assert.AreEqual(expectedMessages[salesAreaName].Count, errorMessages.Count);
            foreach (var errorMessage in errorMessages)
            {
                Assert.IsNotNull(expectedMessages[salesAreaName].Find(expectedMessage => string.Equals(expectedMessage, errorMessage, StringComparison.InvariantCultureIgnoreCase)));
            }
        }
Ejemplo n.º 10
0
        public IHttpActionResult PutScenario([FromUri] Guid id, [FromBody] ScenarioModel command)
        {
            // Check empty name
            if (string.IsNullOrWhiteSpace(command.Name))
            {
                return(this.Error().InvalidParameters("No name was entered"));
            }

            if (!ModelState.IsValid)
            {
                return(this.Error().InvalidParameters("Invalid scenario parameters"));
            }

            var scenario = _scenarioRepository.Get(id);

            if (scenario == null)
            {
                return(NotFound());
            }

            var scenario2 = _scenarioRepository.FindByName(command.Name, command.IsLibraried);

            if (scenario2 != null && scenario.Id != scenario2.Id)
            {
                return(this.Error().InvalidParameters("Scenario with such name already exists"));
            }

            var salesAreas = _salesAreaRepository.GetAll();

            foreach (var pass in command.Passes)
            {
                if (_passInspectorService.InspectPassSalesAreaPriorities(
                        pass.PassSalesAreaPriorities,
                        out string errorMessage))
                {
                    return(this.Error().InvalidParameters(errorMessage));
                }

                List <string> errorMessages = new List <string>();
                if (!BreakExclusionsValidations.DateTimeRangeIsValid(pass.BreakExclusions, salesAreas, out errorMessages))
                {
                    return(this.Error().InvalidParameters(errorMessages));
                }
            }

            var oldPassIds = scenario.Passes.Select(p => p.Id).ToList();

            // Get PassIds to delete
            var deletedPassIds = oldPassIds.Except(command.Passes.Select(p => p.Id)).Distinct().ToList();

            ValidateCampaignPriorityRounds(command.CampaignPriorityRounds);

            Mappings.ApplyToScenario(scenario, command, _mapper);
            IdUpdater.SetIds(scenario, _identityGeneratorResolver);

            // Update Pass repository
            UpdatePassRepository(scenario, command, deletedPassIds);
            _passRepository.SaveChanges();

            // update scenario with any changes to passes in that scenario.campaignpasspriorities
            UpdateScenarioWithEditedPassList(scenario, oldPassIds, deletedPassIds);

            // Validate, update and save scenario
            ValidateForSave(scenario);

            scenario.DateUserModified = DateTime.UtcNow;

            _scenarioRepository.Update(new List <Scenario> {
                scenario
            });                                  // Used bulk update method as a temporary solution as it is optimized to update nested collections
                                                 // Will be changed in scope of performance optimizations phase 2
            _scenarioRepository.SaveChanges();   // Do not remove this, need to persist changes now so that we can return ScenarioModel

            return(Ok(Mappings.MapToScenarioModel(scenario, _scenarioRepository, _passRepository,
                                                  _tenantSettingsRepository, _mapper)));
        }
Ejemplo n.º 11
0
        public IHttpActionResult PostScenario([FromBody] CreateScenarioModel command)
        {
            // Check empty name
            if (string.IsNullOrWhiteSpace(command.Name))
            {
                return(this.Error().InvalidParameters("No name was entered"));
            }

            if (!ModelState.IsValid)
            {
                return(this.Error().InvalidParameters("Invalid scenario parameters"));
            }

            // Check that scenario doesn't exist
            Scenario scenario = _scenarioRepository.Get(command.Id);

            if (scenario != null)
            {
                return(this.Error().InvalidParameters("Scenario already exists"));
            }

            // Check that scenario with such name doesn't exist
            scenario = _scenarioRepository.FindByName(command.Name, command.IsLibraried);
            if (scenario != null)
            {
                return(this.Error().InvalidParameters("Scenario with such name already exists"));
            }

            foreach (var pass in command.Passes)
            {
                if (_passInspectorService.InspectPassSalesAreaPriorities(
                        pass.PassSalesAreaPriorities,
                        out string errorMessage))
                {
                    return(this.Error().InvalidParameters(errorMessage));
                }

                List <string> errorMessages = new List <string>();

                if (!BreakExclusionsValidations.DateTimeRangeIsValid(pass.BreakExclusions, _salesAreaRepository.GetAll(), out errorMessages))
                {
                    return(this.Error().InvalidParameters(errorMessages));
                }
            }

            ValidateCampaignPriorityRounds(command.CampaignPriorityRounds);

            // Add scenario
            scenario = _mapper.Map <Scenario>(command);

            IdUpdater.SetIds(scenario, _identityGeneratorResolver);

            // Update Pass repository
            UpdatePassRepository(scenario, command, null);
            _passRepository.SaveChanges();

            // Add Campaign Pass Priorities to Scenario
            var campaignsResult   = _campaignRepository.GetWithProduct(null);
            var usingAllCampaigns = campaignsResult.Items?.Any() == true?campaignsResult.Items.ToList() : null;

            var forScenarioPasses = _passRepository.FindByIds(scenario.Passes.Select(p => p.Id)).ToList();

            var allCampaigns = usingAllCampaigns?.ToDictionary(x => x.ExternalId, x => x);

            CampaignPassPrioritiesServiceMapper.AmendCampaignPassPrioritiesForNewCampaigns(
                scenario,
                forScenarioPasses,
                allCampaigns,
                _passRepository,
                _mapper);

            // Validate
            ValidateForSave(scenario);

            scenario.DateUserModified = DateTime.UtcNow;

            // Add scenario
            _scenarioRepository.Add(scenario);
            _scenarioRepository.SaveChanges();   // Do not remove this, need to persist changes now so that we can return ScenarioModel

            return(Ok(Mappings.MapToScenarioModel(scenario, _scenarioRepository, _passRepository,
                                                  _tenantSettingsRepository, _mapper)));
        }