public async Task <FullStubModel> Handle(AddStubCommand request, CancellationToken cancellationToken) { // Delete stub with same ID. await _stubContext.DeleteStubAsync(request.Stub.Id); return(await _stubContext.AddStubAsync(request.Stub)); }
/// <inheritdoc /> public async Task <Unit> Handle(UpdateStubCommand request, CancellationToken cancellationToken) { var validationResults = _stubModelValidator.ValidateStubModel(request.Stub).ToArray(); if (validationResults.Any()) { throw new ValidationException(validationResults); } // Check that the stub is not read-only. const string exceptionFormat = "Stub with ID '{0}' is read-only; it can not be updated through the API."; var oldStub = await _stubContext.GetStubAsync(request.StubId); if (oldStub?.Metadata?.ReadOnly == true) { throw new ValidationException(string.Format(exceptionFormat, request.StubId)); } var newStub = await _stubContext.GetStubAsync(request.Stub.Id); if (newStub?.Metadata?.ReadOnly == true) { throw new ValidationException(string.Format(exceptionFormat, request.Stub.Id)); } await _stubContext.DeleteStubAsync(request.StubId); await _stubContext.DeleteStubAsync(request.Stub.Id); await _stubContext.AddStubAsync(request.Stub); return(Unit.Value); }
public async Task <Unit> Handle(UpdateStubCommand request, CancellationToken cancellationToken) { // Delete stub with same ID. await _stubContext.DeleteStubAsync(request.StubId); await _stubContext.DeleteStubAsync(request.Stub.Id); await _stubContext.AddStubAsync(request.Stub); return(Unit.Value); }
private async Task <FullStubModel> CreateStub(bool doNotCreateStub, StubModel stub) { if (doNotCreateStub) { return(new FullStubModel { Stub = stub, Metadata = new StubMetadataModel() }); } await _stubContext.DeleteStubAsync(stub.Id); return(await _stubContext.AddStubAsync(stub)); }
/// <inheritdoc /> public async Task <FullStubModel> Handle(AddStubCommand request, CancellationToken cancellationToken) { var validationResults = _stubModelValidator.ValidateStubModel(request.Stub).ToArray(); if (validationResults.Any()) { throw new ValidationException(validationResults); } // Delete stub with same ID. await _stubContext.DeleteStubAsync(request.Stub.Id); return(await _stubContext.AddStubAsync(request.Stub)); }
private async Task <FullStubModel> CreateStub(bool doNotCreateStub, OpenApiServer server, OpenApiLine line, string tenant) { var stub = await _openApiToStubConverter.ConvertToStubAsync(server, line, tenant); if (doNotCreateStub) { return(new FullStubModel { Stub = stub, Metadata = new StubMetadataModel() }); } await _stubContext.DeleteStubAsync(stub.Id); return(await _stubContext.AddStubAsync(stub)); }
/// <inheritdoc /> public async Task <FullStubModel> GenerateStubBasedOnRequestAsync( string requestCorrelationId, bool doNotCreateStub) { _logger.LogDebug($"Creating stub based on request with corr.ID '{requestCorrelationId}'."); var requestResult = await _stubContext.GetRequestResultAsync(requestCorrelationId); if (requestResult == null) { throw new NotFoundException(nameof(RequestResultModel), requestCorrelationId); } var request = _mapper.Map <HttpRequestModel>(requestResult.RequestParameters); var stub = new StubModel { Conditions = await _httpRequestToConditionsService.ConvertToConditionsAsync(request), Response = { Text = "OK!" } }; // Generate an ID based on the created stub. var contents = JsonConvert.SerializeObject(stub); stub.EnsureStubId(); FullStubModel result; if (doNotCreateStub) { result = new FullStubModel { Stub = stub, Metadata = new StubMetadataModel() }; } else { await _stubContext.DeleteStubAsync(stub.Id); result = await _stubContext.AddStubAsync(stub); } _logger.LogInformation($"Stub with ID '{stub.Id}' generated!"); return(result); }
public async Task <FullStubModel> GenerateStubBasedOnRequestAsync(string requestCorrelationId) { _logger.LogInformation($"Creating stub based on request with corr.ID '{requestCorrelationId}'."); // TODO lateron, when the querying is fixed, only query for one request result. var requestResults = await _stubContext.GetRequestResultsAsync(); var requestResult = requestResults.FirstOrDefault(r => r.CorrelationId == requestCorrelationId); if (requestResult == null) { throw new NotFoundException(nameof(RequestResultModel), requestCorrelationId); } var stub = new StubModel(); foreach (var handler in _handlers.OrderByDescending(w => w.Priority)) { var executed = await handler.HandleStubGenerationAsync(requestResult, stub); _logger.LogInformation($"Handler '{handler.GetType().Name}'" + (executed ? " executed" : "") + "."); } // Set a default response stub.Response.Text = "OK!"; // Generate an ID based on the created stub. var contents = JsonConvert.SerializeObject(stub); stub.Id = "generated-" + HashingUtilities.GetMd5String(contents); await _stubContext.DeleteStubAsync(stub.Id); var result = await _stubContext.AddStubAsync(stub); _logger.LogInformation($"Stub with ID '{stub.Id}' generated!"); return(result); }
/// <inheritdoc /> public async Task <IEnumerable <FullStubModel> > Handle( AddStubsCommand request, CancellationToken cancellationToken) { if (request.Stubs == null || !request.Stubs.Any()) { throw new ArgumentException("No stubs posted."); } // Validate posted stubs. var stubsToAdd = request.Stubs.ToArray(); var validationResults = stubsToAdd .SelectMany(s => { var validation = _stubModelValidator.ValidateStubModel(s); return(!string.IsNullOrWhiteSpace(s.Id) ? validation.Select(v => $"{s.Id}: {v}") : validation); }) .ToArray(); if (validationResults.Any()) { throw new ValidationException(validationResults); } // Validate that none of the posted stubs have the same ID. var duplicateIds = stubsToAdd .Select(s => s.Id) .GroupBy(id => id, StringComparer.OrdinalIgnoreCase) .Where(g => g.Count() > 1) .Select(g => g.Key) .ToArray(); if (duplicateIds.Any()) { throw new ArgumentException( $"The following stub IDs are posted more than once: {string.Join(", ", duplicateIds)}"); } // Validated that no stubs with the same ID exist in readonly stub sources. var stubsFromReadonlySource = await _stubContext.GetStubsFromReadOnlySourcesAsync(); var duplicateStubs = stubsFromReadonlySource.Where(r => stubsToAdd.Any(s => string.Equals(s.Id, r.Stub.Id, StringComparison.OrdinalIgnoreCase))).ToArray(); if (duplicateStubs.Any()) { throw new ValidationException(duplicateStubs.Select(s => $"Stub with ID already exists: {s.Stub.Id}")); } // Add the stubs. var result = new List <FullStubModel>(); foreach (var stub in stubsToAdd) { // First, delete existing stub with same ID. await _stubContext.DeleteStubAsync(stub.Id); result.Add(await _stubContext.AddStubAsync(stub)); } return(result); }