Example #1
0
        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);
        }
Example #2
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);
        }
Example #3
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."));
        }
Example #4
0
        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."));
        }
Example #5
0
        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')."));
        }
Example #6
0
        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));
        }
Example #7
0
        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()));
        }
Example #8
0
 public Task <ValidationResult> ValidateProductDataSinceDateTime(ProductDataSinceDateTimeRequest productDataSinceDateTimeRequest)
 {
     return(productDataSinceDateTimeValidator.Validate(productDataSinceDateTimeRequest));
 }
Example #9
0
        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);
        }