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}");
            }
        }
Пример #2
0
        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)));
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
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)));
        }
        public Task <ApiResponse <TestScenario> > CreateTestScenario(CreateScenarioModel testScenario)
        {
            Guard.ArgumentNotNull(testScenario, nameof(testScenario));

            return(PostAsync <TestScenario, CreateScenarioModel>("save-scenario-test-version", testScenario));
        }