Beispiel #1
0
        public void WhenInvalidCallbackuriInProductDataProductVersionRequest_ThenReturnBadRequest()
        {
            var model = new ProductDataProductVersionsRequest {
                CallbackUri = "demo uri"
            };
            var result = validator.TestValidate(model);

            result.ShouldHaveValidationErrorFor(fb => fb.CallbackUri);
            Assert.IsTrue(result.Errors.Any(x => x.ErrorMessage == "Invalid callbackUri format."));
        }
Beispiel #2
0
        public void WhenProductVersionsNullInProductDataProductVersionRequest_ThenReturnBadRequest()
        {
            var model = new ProductDataProductVersionsRequest
            {
                ProductVersions = null
            };
            var result = validator.TestValidate(model);

            result.ShouldHaveValidationErrorFor(fb => fb.ProductVersions);
            Assert.IsTrue(result.Errors.Any(x => x.ErrorMessage == "productVersions cannot be null."));
        }
Beispiel #3
0
        public virtual Task <IActionResult> PostProductDataByProductVersions([FromBody] List <ProductVersionRequest> productVersionsRequest, string callbackUri)
        {
            return(Logger.LogStartEndAndElapsedTimeAsync(EventIds.ESSPostProductVersionsRequestStart, EventIds.ESSPostProductVersionsRequestCompleted,
                                                         "Product Versions Endpoint request for _X-Correlation-ID:{correlationId}",
                                                         async() => {
                if (productVersionsRequest == null || !productVersionsRequest.Any())
                {
                    var error = new List <Error>
                    {
                        new Error()
                        {
                            Source = "requestBody",
                            Description = "Either body is null or malformed."
                        }
                    };
                    return BuildBadRequestErrorResponse(error);
                }
                ProductDataProductVersionsRequest request = new ProductDataProductVersionsRequest
                {
                    ProductVersions = productVersionsRequest,
                    CallbackUri = callbackUri,
                    CorrelationId = GetCurrentCorrelationId()
                };

                var validationResult = await productDataService.ValidateProductDataByProductVersions(request);

                if (!validationResult.IsValid)
                {
                    List <Error> errors;

                    if (validationResult.HasBadRequestErrors(out errors))
                    {
                        return BuildBadRequestErrorResponse(errors);
                    }
                }
                AzureAdB2C azureAdB2C = new AzureAdB2C()
                {
                    AudToken = TokenAudience,
                    IssToken = TokenIssuer
                };

                var productDetail = await productDataService.CreateProductDataByProductVersions(request, azureAdB2C);

                if (productDetail.IsExchangeSetTooLarge)
                {
                    Logger.LogError(EventIds.ExchangeSetTooLarge.ToEventId(), "Requested exchange set is too large for product versions endpoint for _X-Correlation-ID:{correlationId}.", GetCurrentCorrelationId());
                    return BuildBadRequestErrorResponseForTooLargeExchangeSet();
                }
                return GetEssResponse(productDetail);
            }, GetCurrentCorrelationId()));
        }
Beispiel #4
0
        public void WhenValidRequestInProductDataProductVersionRequest_ThenReturnSuccess()
        {
            var model = new ProductDataProductVersionsRequest
            {
                ProductVersions = new List <ProductVersionRequest> {
                    new ProductVersionRequest {
                        EditionNumber = 0, UpdateNumber = 0, ProductName = "ProductName"
                    }
                }
            };
            var result = validator.TestValidate(model);

            Assert.IsTrue(result.Errors.Count == 0);
        }
Beispiel #5
0
        public void WhenUpdateNumberNullInProductDataProductVersionRequest_ThenReturnBadRequest()
        {
            var model = new ProductDataProductVersionsRequest
            {
                ProductVersions = new List <ProductVersionRequest> {
                    new ProductVersionRequest {
                        EditionNumber = 0, ProductName = "ProductName"
                    }
                }
            };
            var result = validator.TestValidate(model);

            result.ShouldHaveValidationErrorFor("ProductVersions[0].updateNumber");
            Assert.IsTrue(result.Errors.Any(x => x.ErrorMessage == "updateNumber cannot be less than zero or null."));
        }
Beispiel #6
0
        public void WhenValidCallbackuriInProductDataProductVersionRequest_ThenReturnSuccess()
        {
            var model = new ProductDataProductVersionsRequest
            {
                ProductVersions = new List <ProductVersionRequest>
                {
                    new ProductVersionRequest {
                        UpdateNumber = 0, EditionNumber = 0, ProductName = "ProductName"
                    }
                },
                CallbackUri = "https://exchange-set-service.com/myCallback?secret=sharedSecret&po=1234"
            };
            var result = validator.TestValidate(model);

            Assert.IsTrue(result.Errors.Count == 0);
        }
Beispiel #7
0
 public Task <ValidationResult> ValidateProductDataByProductVersions(ProductDataProductVersionsRequest request)
 {
     return(productVersionsValidator.Validate(request));
 }
Beispiel #8
0
        public async Task <ExchangeSetServiceResponse> CreateProductDataByProductVersions(ProductDataProductVersionsRequest request, AzureAdB2C azureAdB2C)
        {
            DateTime salesCatalogueServiceRequestStartedAt = DateTime.UtcNow;
            var      salesCatalogueResponse = await salesCatalogueService.PostProductVersionsAsync(request.ProductVersions, request.CorrelationId);

            long fileSize = 0;

            if (salesCatalogueResponse.ResponseCode == HttpStatusCode.OK)
            {
                fileSize = CommonHelper.GetFileSize(salesCatalogueResponse.ResponseBody);
                bool isAzureB2C = azureAdB2CHelper.IsAzureB2CUser(azureAdB2C, request.CorrelationId);
                if (isAzureB2C)
                {
                    var checkFileResponse = CheckIfExchangeSetTooLarge(fileSize);
                    if (checkFileResponse.HttpStatusCode != HttpStatusCode.OK)
                    {
                        return(checkFileResponse);
                    }
                }
            }
            DateTime salesCatalogueServiceRequestCompletedAt = DateTime.UtcNow;

            monitorHelper.MonitorRequest("Sales Catalogue Service Product Version Request", salesCatalogueServiceRequestStartedAt, salesCatalogueServiceRequestCompletedAt, request.CorrelationId, null, null, fileSize, null);

            var response = SetExchangeSetResponse(salesCatalogueResponse, true);

            if (response.HttpStatusCode != HttpStatusCode.OK && response.HttpStatusCode != HttpStatusCode.NotModified)
            {
                return(response);
            }

            if (salesCatalogueResponse.ResponseCode == HttpStatusCode.NotModified)
            {
                response.ExchangeSetResponse.RequestedProductCount             = response.ExchangeSetResponse.RequestedProductsAlreadyUpToDateCount = request.ProductVersions.Count;
                response.ExchangeSetResponse.RequestedProductsNotInExchangeSet = new List <RequestedProductsNotInExchangeSet>();
                salesCatalogueResponse.ResponseBody = new SalesCatalogueProductResponse
                {
                    Products      = new List <Products>(),
                    ProductCounts = new ProductCounts()
                };
                salesCatalogueResponse.ResponseBody.ProductCounts.ReturnedProductCount         = 0;
                salesCatalogueResponse.ResponseBody.ProductCounts.RequestedProductsNotReturned = new List <RequestedProductsNotReturned>();
                salesCatalogueResponse.ResponseBody.ProductCounts.RequestedProductCount        = salesCatalogueResponse.ResponseBody.ProductCounts.RequestedProductsAlreadyUpToDateCount = request.ProductVersions.Count;
            }

            var exchangeSetServiceResponse = await SetExchangeSetResponseLinks(response, request.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, request.CallbackUri, request.CorrelationId, expiryDate);
            }

            return(response);
        }