public async Task <CurrentTestScenario> GetCurrentTestScenarioById(string testScenarioId) { Guard.IsNullOrWhiteSpace(testScenarioId, nameof(testScenarioId)); DocumentEntity <TestScenario> scenario = await _cosmosRepository.ReadDocumentByIdAsync <TestScenario>(testScenarioId); if (scenario?.Content == null) { return(null); } CurrentTestScenario currentTestScenario = new CurrentTestScenario { LastUpdatedDate = scenario.UpdatedAt, Id = scenario.Id, Name = scenario.Content.Name, Description = scenario.Content.Current.Description, Author = scenario.Content.Current.Author, Comment = scenario.Content.Current.Comment, CurrentVersionDate = scenario.Content.Current.Date, PublishStatus = scenario.Content.Current.PublishStatus, Gherkin = scenario.Content.Current.Gherkin, Version = scenario.Content.Current.Version, SpecificationId = scenario.Content.SpecificationId, }; return(currentTestScenario); }
public async Task <IActionResult> GetCurrentTestScenarioById(string scenarioId) { if (string.IsNullOrWhiteSpace(scenarioId)) { _logger.Error("No scenario Id was provided to GetCurrentTestScenarioById"); return(new BadRequestObjectResult("Null or empty scenario Id provided")); } CurrentTestScenario testScenario = await _scenariosRepository.GetCurrentTestScenarioById(scenarioId); if (testScenario == null) { return(new NotFoundResult()); } return(new OkObjectResult(testScenario)); }
public async Task <IActionResult> GetCurrentTestScenarioById(HttpRequest request) { request.Query.TryGetValue("scenarioId", out Microsoft.Extensions.Primitives.StringValues testId); string scenarioId = testId.FirstOrDefault(); if (string.IsNullOrWhiteSpace(scenarioId)) { _logger.Error("No scenario Id was provided to GetCurrentTestScenarioById"); return(new BadRequestObjectResult("Null or empty scenario Id provided")); } CurrentTestScenario testScenario = await _scenariosRepository.GetCurrentTestScenarioById(scenarioId); if (testScenario == null) { return(new NotFoundResult()); } return(new OkObjectResult(testScenario)); }
public async Task <IActionResult> SaveVersion(HttpRequest request) { string json = await request.GetRawBodyStringAsync(); CreateNewTestScenarioVersion scenarioVersion = JsonConvert.DeserializeObject <CreateNewTestScenarioVersion>(json); if (scenarioVersion == null) { _logger.Error("A null scenario version was provided"); return(new BadRequestObjectResult("Null or empty calculation Id provided")); } BadRequestObjectResult validationResult = (await _createNewTestScenarioVersionValidator.ValidateAsync(scenarioVersion)).PopulateModelState(); if (validationResult != null) { return(validationResult); } TestScenario testScenario = null; if (!string.IsNullOrEmpty(scenarioVersion.Id)) { testScenario = await _scenariosRepository.GetTestScenarioById(scenarioVersion.Id); } bool saveAsVersion = true; SpecificationSummary specification = await _specificationsRepository.GetSpecificationSummaryById(scenarioVersion.SpecificationId); if (specification == null) { _logger.Error($"Unable to find a specification for specification id : {scenarioVersion.SpecificationId}"); return(new StatusCodeResult(412)); } Reference user = request.GetUserOrDefault(); if (testScenario == null) { string Id = Guid.NewGuid().ToString(); testScenario = new TestScenario { Id = Id, SpecificationId = specification.Id, Name = scenarioVersion.Name, Current = new TestScenarioVersion { Date = DateTimeOffset.Now.ToLocalTime(), TestScenarioId = Id, PublishStatus = PublishStatus.Draft, Version = 1, Author = user, Gherkin = scenarioVersion.Scenario, Description = scenarioVersion.Description, FundingPeriodId = specification.FundingPeriod.Id, FundingStreamIds = specification.FundingStreams.Select(s => s.Id).ToArraySafe(), } }; } else { testScenario.Name = scenarioVersion.Name; saveAsVersion = !string.Equals(scenarioVersion.Scenario, testScenario.Current.Gherkin) || scenarioVersion.Description != testScenario.Current.Description; TestScenarioVersion newVersion = testScenario.Current.Clone() as TestScenarioVersion; if (saveAsVersion == true) { newVersion.Author = user; newVersion.Gherkin = scenarioVersion.Scenario; newVersion.Description = scenarioVersion.Description; newVersion.FundingStreamIds = specification.FundingStreams.Select(s => s.Id).ToArraySafe(); newVersion.FundingPeriodId = specification.FundingPeriod.Id; newVersion = await _versionRepository.CreateVersion(newVersion, testScenario.Current); testScenario.Current = newVersion; } } HttpStatusCode statusCode = await _scenariosRepository.SaveTestScenario(testScenario); if (!statusCode.IsSuccess()) { _logger.Error($"Failed to save test scenario with status code: {statusCode.ToString()}"); return(new StatusCodeResult((int)statusCode)); } await _versionRepository.SaveVersion(testScenario.Current); ScenarioIndex scenarioIndex = CreateScenarioIndexFromScenario(testScenario, specification); await _searchRepository.Index(new List <ScenarioIndex> { scenarioIndex }); await _cacheProvider.RemoveAsync <List <TestScenario> >($"{CacheKeys.TestScenarios}{testScenario.SpecificationId}"); await _cacheProvider.RemoveAsync <GherkinParseResult>($"{CacheKeys.GherkinParseResult}{testScenario.Id}"); IEnumerable <Models.Calcs.CalculationCurrentVersion> calculations = await _calcsRepositoryPolicy.ExecuteAsync(() => _calcsRepository.GetCurrentCalculationsBySpecificationId(specification.Id)); if (calculations.IsNullOrEmpty()) { _logger.Information($"No calculations found to test for specification id: '{specification.Id}'"); } else { string correlationId = request.GetCorrelationId(); try { Trigger trigger = new Trigger { EntityId = testScenario.Id, EntityType = nameof(TestScenario), Message = $"Saving test scenario: '{testScenario.Id}'" }; bool generateCalculationAggregations = SourceCodeHelpers.HasCalculationAggregateFunctionParameters(calculations.Select(m => m.SourceCode)); Job job = await SendInstructAllocationsToJobService(specification.Id, user, trigger, correlationId, generateCalculationAggregations); _logger.Information($"New job of type '{job.JobDefinitionId}' created with id: '{job.Id}'"); } catch (Exception ex) { _logger.Error(ex, $"Failed to create job of type '{JobConstants.DefinitionNames.CreateInstructAllocationJob}' on specification '{specification.Id}'"); return(new InternalServerErrorResult($"An error occurred attempting to execute calculations prior to running tests on specification '{specification.Id}'")); } } CurrentTestScenario testScenarioResult = await _scenariosRepository.GetCurrentTestScenarioById(testScenario.Id); return(new OkObjectResult(testScenarioResult)); }