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); }
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); }
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))); } }
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))); }
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))); }