public void WhenSinceDateTimeWithinMaximumNumerOfDaysValidInProductDataSinceDateTimeRequest_ThenReturnSuccess() { var model = new ProductDataSinceDateTimeRequest { SinceDateTime = DateTime.UtcNow.AddDays(-1).ToString("R") }; var result = validator.TestValidate(model); Assert.IsTrue(result.Errors.Count == 0); }
public void WhenValidInProductDataSinceDateTimeRequest_ThenReturnSuccess() { var model = new ProductDataSinceDateTimeRequest { SinceDateTime = DateTime.UtcNow.AddDays(-7).ToString("R"), CallbackUri = "https://exchange-set-service.com/myCallback?secret=sharedSecret&po=1234" }; var result = validator.TestValidate(model); Assert.IsTrue(result.Errors.Count == 0); }
public void WhenInvalidCallBackUriInProductDataSinceDateTimeRequest_ThenReturnBadRequest() { var model = new ProductDataSinceDateTimeRequest { SinceDateTime = "Wed, 21 Oct 2015 07:28:00 GMT", CallbackUri = "abc" }; var result = validator.TestValidate(model); result.ShouldHaveValidationErrorFor(fb => fb.CallbackUri); Assert.IsTrue(result.Errors.Any(x => x.ErrorMessage == "Invalid callbackUri format.")); }
public void WhenSinceDateTimeGreaterThanCurrentDateTimeInProductDataSinceDateTimeRequest_ThenReturnBadRequest() { var model = new ProductDataSinceDateTimeRequest { SinceDateTime = DateTime.UtcNow.AddDays(5).ToString("R") }; var result = validator.TestValidate(model); result.ShouldHaveValidationErrorFor(fb => fb.SinceDateTime); Assert.IsTrue(result.Errors.Any(x => x.ErrorMessage == "Provided sinceDateTime cannot be a future date.")); }
public void WhenInvalidSinceDateTimeInProductDataSinceDateTimeRequest_ThenReturnBadRequest() { var model = new ProductDataSinceDateTimeRequest { SinceDateTime = "Wed, 21 Oct 2015" }; var result = validator.TestValidate(model); result.ShouldHaveValidationErrorFor(fb => fb.SinceDateTime); Assert.IsTrue(result.Errors.Any(x => x.ErrorMessage == "Provided sinceDateTime is either invalid or invalid format, the valid format is 'RFC1123 format' (e.g. 'Wed, 21 Oct 2020 07:28:00 GMT').")); }
public void WhenSinceDateTimeLessThanMaximumNumerOfDaysValidInProductDataSinceDateTimeRequest_ThenReturnBadRequest() { int maximumNumerOfDaysValidForSinceDateTimeEndpoint = (Convert.ToInt32(configuration.GetValue <string>("MaximumNumerOfDaysValidForSinceDateTimeEndpoint"))); var model = new ProductDataSinceDateTimeRequest { SinceDateTime = DateTime.UtcNow.AddDays(-maximumNumerOfDaysValidForSinceDateTimeEndpoint).ToString("R") }; var result = validator.TestValidate(model); result.ShouldHaveValidationErrorFor(fb => fb.SinceDateTime); string errorMessage = "Provided sinceDateTime must be within last " + configuration.GetValue <string>("MaximumNumerOfDaysValidForSinceDateTimeEndpoint") + " days."; Assert.IsTrue(result.Errors.Any(x => x.ErrorMessage == errorMessage)); }
public virtual Task <IActionResult> GetProductDataSinceDateTime([FromQuery, SwaggerParameter(Required = true), SwaggerSchema(Format = "date-time")] string sinceDateTime, [FromQuery] string callbackUri) { return(Logger.LogStartEndAndElapsedTimeAsync(EventIds.ESSGetProductsFromSpecificDateRequestStart, EventIds.ESSGetProductsFromSpecificDateRequestCompleted, "Product Data SinceDateTime Endpoint request for _X-Correlation-ID:{correlationId}", async() => { ProductDataSinceDateTimeRequest productDataSinceDateTimeRequest = new ProductDataSinceDateTimeRequest() { SinceDateTime = sinceDateTime, CallbackUri = callbackUri, CorrelationId = GetCurrentCorrelationId() }; if (productDataSinceDateTimeRequest.SinceDateTime == null) { var error = new List <Error> { new Error() { Source = "sinceDateTime", Description = "Query parameter 'sinceDateTime' is required." } }; return BuildBadRequestErrorResponse(error); } var validationResult = await productDataService.ValidateProductDataSinceDateTime(productDataSinceDateTimeRequest); if (!validationResult.IsValid && validationResult.HasBadRequestErrors(out List <Error> errors)) { return BuildBadRequestErrorResponse(errors); } AzureAdB2C azureAdB2C = new AzureAdB2C() { AudToken = TokenAudience, IssToken = TokenIssuer }; var productDetail = await productDataService.CreateProductDataSinceDateTime(productDataSinceDateTimeRequest, azureAdB2C); if (productDetail.IsExchangeSetTooLarge) { Logger.LogError(EventIds.ExchangeSetTooLarge.ToEventId(), "Requested exchange set is too large for SinceDateTime endpoint for _X-Correlation-ID:{correlationId}.", GetCurrentCorrelationId()); return BuildBadRequestErrorResponseForTooLargeExchangeSet(); } return GetEssResponse(productDetail); }, GetCurrentCorrelationId())); }
public Task <ValidationResult> ValidateProductDataSinceDateTime(ProductDataSinceDateTimeRequest productDataSinceDateTimeRequest) { return(productDataSinceDateTimeValidator.Validate(productDataSinceDateTimeRequest)); }
public async Task <ExchangeSetServiceResponse> CreateProductDataSinceDateTime(ProductDataSinceDateTimeRequest productDataSinceDateTimeRequest, AzureAdB2C azureAdB2C) { DateTime salesCatalogueServiceRequestStartedAt = DateTime.UtcNow; var salesCatalogueResponse = await salesCatalogueService.GetProductsFromSpecificDateAsync(productDataSinceDateTimeRequest.SinceDateTime, productDataSinceDateTimeRequest.CorrelationId); long fileSize = 0; if (salesCatalogueResponse.ResponseCode == HttpStatusCode.OK) { fileSize = CommonHelper.GetFileSize(salesCatalogueResponse.ResponseBody); bool isAzureB2C = azureAdB2CHelper.IsAzureB2CUser(azureAdB2C, productDataSinceDateTimeRequest.CorrelationId); if (isAzureB2C) { var checkFileResponse = CheckIfExchangeSetTooLarge(fileSize); if (checkFileResponse.HttpStatusCode != HttpStatusCode.OK) { return(checkFileResponse); } } } DateTime salesCatalogueServiceRequestCompletedAt = DateTime.UtcNow; monitorHelper.MonitorRequest("Sales Catalogue Service Since DateTime Request", salesCatalogueServiceRequestStartedAt, salesCatalogueServiceRequestCompletedAt, productDataSinceDateTimeRequest.CorrelationId, null, null, fileSize, null); var response = SetExchangeSetResponse(salesCatalogueResponse, false); if (response.HttpStatusCode != HttpStatusCode.OK) { return(response); } var exchangeSetServiceResponse = await SetExchangeSetResponseLinks(response, productDataSinceDateTimeRequest.CorrelationId); if (exchangeSetServiceResponse.HttpStatusCode != HttpStatusCode.Created) { return(exchangeSetServiceResponse); } string expiryDate = exchangeSetServiceResponse.ExchangeSetResponse.ExchangeSetUrlExpiryDateTime.Value.ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture); if (!string.IsNullOrEmpty(exchangeSetServiceResponse.BatchId)) { await SaveSalesCatalogueStorageDetails(salesCatalogueResponse.ResponseBody, exchangeSetServiceResponse.BatchId, productDataSinceDateTimeRequest.CallbackUri, productDataSinceDateTimeRequest.CorrelationId, expiryDate); } return(response); }