public async Task <IActionResult> CreateTestScenario(string specificationId, [FromBody] ScenarioCreateViewModel vm) { Guard.ArgumentNotNull(specificationId, nameof(specificationId)); Guard.ArgumentNotNull(vm, nameof(vm)); if (!await _authorizationHelper.DoesUserHavePermission(User, specificationId, SpecificationActionTypes.CanCreateQaTests)) { return(new ForbidResult()); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } CreateScenarioModel createScenario = _mapper.Map <CreateScenarioModel>(vm); createScenario.SpecificationId = specificationId; ApiResponse <TestScenario> result = await _scenariosClient.CreateTestScenario(createScenario); if (result.StatusCode == HttpStatusCode.OK) { return(Ok(result.Content)); } else { HttpStatusCode statusCode = result.StatusCode; _logger.Error("An error occurred while saving scenario. Status code from backend={statusCode} for specification {specificationId}", statusCode, specificationId); throw new InvalidOperationException($"An error occurred while saving scenario. Status code={result.StatusCode}"); } }
public static void ApplyToScenario(Scenario scenario, CreateScenarioModel command) { scenario.Id = (command.Id != Guid.Empty ? command.Id : scenario.Id); scenario.Name = command.Name; scenario.Passes.Clear(); command.Passes.ForEach(passModel => scenario.Passes.Add(MapToPassReference(passModel))); }
/// <summary> /// Updates Pass repository for passes /// </summary> /// <param name="scenario"></param> /// <param name="command"></param> /// <param name="deletedPassIds"></param> private void UpdatePassRepository(Scenario scenario, CreateScenarioModel command, List <int> deletedPassIds) { List <Pass> updatedPasses = new List <Pass>(); List <Pass> newPasses = new List <Pass>(); // Get changes for Pass repository for (int passIndex = 0; passIndex < scenario.Passes.Count; passIndex++) { PassReference passReference = scenario.Passes[passIndex]; PassModel passModel = command.Passes[passIndex]; Pass pass = passReference.Id == 0 ? null : _passRepository.Get(passReference.Id); if (pass == null) // New pass { pass = _mapper.Map <Pass>(passModel); pass.Id = passReference.Id; // Set in previous call to IdUpdater.SetIds Pass.ValidateForSave(pass); newPasses.Add(pass); } else // Update pass { Mappings.ApplyToPass(pass, passModel, _mapper); Pass.ValidateForSave(pass); updatedPasses.Add(pass); } } // Add/update updatedPasses.ForEach(currentPass => _passRepository.Update(currentPass)); newPasses.ForEach(currentPass => _passRepository.Add(currentPass)); // Delete passes if (deletedPassIds != null && deletedPassIds.Any()) { _passRepository.Remove(deletedPassIds); } }
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))); }
public Task <ApiResponse <TestScenario> > CreateTestScenario(CreateScenarioModel testScenario) { Guard.ArgumentNotNull(testScenario, nameof(testScenario)); return(PostAsync <TestScenario, CreateScenarioModel>("save-scenario-test-version", testScenario)); }