示例#1
0
        public async Task WhenInvalidSinceDateTimeInRequest_ThenGetProductDataSinceDateTimeReturnsInternalServerError()
        {
            var exchangeSetResponse = new ExchangeSetResponse()
            {
            };
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse = exchangeSetResponse,
                HttpStatusCode      = HttpStatusCode.InternalServerError
            };

            var validationMessage = new ValidationFailure("SinceDateTime", "Internal Server Error");

            validationMessage.ErrorCode = HttpStatusCode.InternalServerError.ToString();

            A.CallTo(() => fakeProductDataService.ValidateProductDataSinceDateTime(A <ProductDataSinceDateTimeRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure> {
                validationMessage
            }));

            A.CallTo(() => fakeProductDataService.CreateProductDataSinceDateTime(A <ProductDataSinceDateTimeRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            var result = (ObjectResult)await controller.GetProductDataSinceDateTime("Wed, 21 Oct 2015 07:28:00 GMT", "https://www.abc.com");

            Assert.AreSame("Internal Server Error", ((UKHO.ExchangeSetService.Common.Models.Response.InternalServerError)result.Value).Detail);
            Assert.AreEqual(500, result.StatusCode);
        }
示例#2
0
        public async Task WhenSinceDateTimeInRequest_ThenGetProductDataSinceDateTimeReturnsNotModified()
        {
            var exchangeSetResponse = new ExchangeSetResponse()
            {
            };
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse = exchangeSetResponse,
                HttpStatusCode      = HttpStatusCode.NotModified
            };

            var validationMessage = new ValidationFailure("SinceDateTime", "NotModified.");

            validationMessage.ErrorCode = HttpStatusCode.NotModified.ToString();

            A.CallTo(() => fakeProductDataService.ValidateProductDataSinceDateTime(A <ProductDataSinceDateTimeRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure> {
                validationMessage
            }));

            A.CallTo(() => fakeProductDataService.CreateProductDataSinceDateTime(A <ProductDataSinceDateTimeRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            var result = (StatusCodeResult)await controller.GetProductDataSinceDateTime("Wed, 21 Oct 2015 07:28:00 GMT", "https://www.abc.com");

            Assert.AreEqual(304, result.StatusCode);
        }
示例#3
0
        public async Task WhenInvalidProductIdentifiersRequest_ThenPostProductIdentifiersReturnsBadRequest()
        {
            var exchangeSetResponse = new ExchangeSetResponse()
            {
            };
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse = exchangeSetResponse,
                HttpStatusCode      = HttpStatusCode.BadRequest
            };

            var validationMessage = new ValidationFailure("ProductIdentifiers", "Product Identifiers cannot be null or empty.");

            validationMessage.ErrorCode = HttpStatusCode.BadRequest.ToString();

            A.CallTo(() => fakeProductDataService.ValidateProductDataByProductIdentifiers(A <ProductIdentifierRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure> {
                validationMessage
            }));

            A.CallTo(() => fakeProductDataService.CreateProductDataByProductIdentifiers(A <ProductIdentifierRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            string[] productIdentifiers = new string[] { "", "GB160060", "AU334550" };
            string   callbackUri        = string.Empty;

            var result = (BadRequestObjectResult)await controller.PostProductIdentifiers(productIdentifiers, callbackUri);

            var errors = (ErrorDescription)result.Value;

            Assert.AreEqual(400, result.StatusCode);
            Assert.AreEqual("Product Identifiers cannot be null or empty.", errors.Errors.Single().Description);
        }
示例#4
0
        public async Task WhenEmptySinceDateTimeInRequest_ThenGetProductDataSinceDateTimeReturnsBadRequest()
        {
            var validationMessage = new ValidationFailure("SinceDateTime", "Query parameter 'sinceDateTime' is required.")
            {
                ErrorCode = HttpStatusCode.BadRequest.ToString()
            };

            var exchangeSetResponse = new ExchangeSetResponse()
            {
            };
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse = exchangeSetResponse,
                HttpStatusCode      = HttpStatusCode.BadRequest
            };

            A.CallTo(() => fakeProductDataService.ValidateProductDataSinceDateTime(A <ProductDataSinceDateTimeRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure> {
                validationMessage
            }));

            A.CallTo(() => fakeProductDataService.CreateProductDataSinceDateTime(A <ProductDataSinceDateTimeRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            var result = (BadRequestObjectResult)await controller.GetProductDataSinceDateTime(null, "https://www.abc.com");

            var errors = (ErrorDescription)result.Value;

            Assert.AreEqual(400, result.StatusCode);
            Assert.AreEqual("Query parameter 'sinceDateTime' is required.", errors.Errors.Single().Description);
        }
示例#5
0
        public async Task WhenInvalidProductVersionRequest_ThenPostProductDataByProductVersionsReturnsNotModified()
        {
            var exchangeSetResponse = new ExchangeSetResponse()
            {
            };
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse = exchangeSetResponse,
                HttpStatusCode      = (HttpStatusCode)(int)HttpStatusCode.NotModified
            };

            var validationMessage = new ValidationFailure("ProductVersions", "NotModified.");

            validationMessage.ErrorCode = HttpStatusCode.NotModified.ToString();

            A.CallTo(() => fakeProductDataService.ValidateProductDataByProductVersions(A <ProductDataProductVersionsRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure> {
                validationMessage
            }));

            A.CallTo(() => fakeProductDataService.CreateProductDataByProductVersions(A <ProductDataProductVersionsRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            var result = (StatusCodeResult)await controller.PostProductDataByProductVersions(new List <ProductVersionRequest>()
                                                                                             { new ProductVersionRequest()
                                                                                               {
                                                                                                   ProductName = "demo"
                                                                                               } }, "");

            Assert.AreEqual(304, result.StatusCode);
        }
示例#6
0
        private ExchangeSetServiceResponse SetExchangeSetResponse(SalesCatalogueResponse salesCatalougeResponse, bool isNotModifiedToOk)
        {
            var response = new ExchangeSetServiceResponse
            {
                HttpStatusCode = salesCatalougeResponse.ResponseCode
            };

            if (salesCatalougeResponse.ResponseCode == HttpStatusCode.OK)
            {
                response.ExchangeSetResponse = MapExchangeSetResponse(salesCatalougeResponse);
                response.LastModified        = ConvertLastModifiedToString(salesCatalougeResponse);
            }
            else if (salesCatalougeResponse.ResponseCode == HttpStatusCode.NotModified)
            {
                if (isNotModifiedToOk)
                {
                    response.HttpStatusCode = HttpStatusCode.OK;
                }
                response.ExchangeSetResponse = new ExchangeSetResponse();
                response.LastModified        = ConvertLastModifiedToString(salesCatalougeResponse);
            }
            else
            {
                response.HttpStatusCode = HttpStatusCode.InternalServerError;
            }
            return(response);
        }
示例#7
0
        public async Task WhenInvalidNullProductVersionRequest_ThenPostProductDataByProductVersionsReturnsBadRequest()
        {
            var validationMessage = new ValidationFailure("RequestBody", "Either body is null or malformed.")
            {
                ErrorCode = HttpStatusCode.BadRequest.ToString()
            };

            var exchangeSetResponse = new ExchangeSetResponse()
            {
            };
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse = exchangeSetResponse,
                HttpStatusCode      = HttpStatusCode.BadRequest
            };

            A.CallTo(() => fakeProductDataService.ValidateProductDataByProductVersions(A <ProductDataProductVersionsRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure> {
                validationMessage
            }));

            A.CallTo(() => fakeProductDataService.CreateProductDataByProductVersions(A <ProductDataProductVersionsRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            var result = (BadRequestObjectResult)await controller.PostProductDataByProductVersions(new List <ProductVersionRequest>(), "");

            var errors = (ErrorDescription)result.Value;

            Assert.AreEqual(400, result.StatusCode);
            Assert.AreEqual("Either body is null or malformed.", errors.Errors.Single().Description);
        }
示例#8
0
        public async Task WhenInvalidProductVersionRequest_ThenPostProductDataByProductVersionsReturnsInternalServerError()
        {
            var exchangeSetResponse = new ExchangeSetResponse()
            {
            };
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse = exchangeSetResponse,
                HttpStatusCode      = HttpStatusCode.InternalServerError
            };

            var validationMessage = new ValidationFailure("ProductVersions", "Internal Server Error.");

            validationMessage.ErrorCode = HttpStatusCode.InternalServerError.ToString();

            A.CallTo(() => fakeProductDataService.ValidateProductDataByProductVersions(A <ProductDataProductVersionsRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure> {
                validationMessage
            }));

            A.CallTo(() => fakeProductDataService.CreateProductDataByProductVersions(A <ProductDataProductVersionsRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            var result = (ObjectResult)await controller.PostProductDataByProductVersions(new List <ProductVersionRequest>()
                                                                                         { new ProductVersionRequest()
                                                                                           {
                                                                                               ProductName = "demo"
                                                                                           } }, "");

            Assert.AreSame("Internal Server Error", ((UKHO.ExchangeSetService.Common.Models.Response.InternalServerError)result.Value).Detail);
            Assert.AreEqual(500, result.StatusCode);
        }
示例#9
0
        public async Task WhenLargeExchangeSetRequested_ThenPostProductIdentifiersReturnsBadRequest()
        {
            var exchangeSetResponse        = GetExchangeSetResponse();
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse   = exchangeSetResponse,
                IsExchangeSetTooLarge = true,
                HttpStatusCode        = HttpStatusCode.BadRequest
            };

            A.CallTo(() => fakeProductDataService.ValidateProductDataByProductIdentifiers(A <ProductIdentifierRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure>()));

            string[] productIdentifiers = new string[] { "GB123456", "GB160060", "AU334550" };
            string   callbackUri        = string.Empty;

            A.CallTo(() => fakeProductDataService.CreateProductDataByProductIdentifiers(A <ProductIdentifierRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            var result = (BadRequestObjectResult)await controller.PostProductIdentifiers(productIdentifiers, callbackUri);

            var errors = (ErrorDescription)result.Value;

            Assert.AreEqual(400, result.StatusCode);
            Assert.AreEqual("The Exchange Set requested is very large and will not be created, please use a standard Exchange Set provided by the UKHO.", errors.Errors.Single().Description);
        }
示例#10
0
        public async Task WhenInvalidProductIdentifiersRequest_ThenPostProductIdentifiersReturnsNotModified()
        {
            var exchangeSetResponse = new ExchangeSetResponse()
            {
            };
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse = exchangeSetResponse,
                HttpStatusCode      = HttpStatusCode.NotModified
            };

            var validationMessage = new ValidationFailure("ProductIdentifiers", "NotModified.");

            validationMessage.ErrorCode = HttpStatusCode.NotModified.ToString();

            A.CallTo(() => fakeProductDataService.ValidateProductDataByProductIdentifiers(A <ProductIdentifierRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure> {
                validationMessage
            }));

            A.CallTo(() => fakeProductDataService.CreateProductDataByProductIdentifiers(A <ProductIdentifierRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            string[] productIdentifiers = new string[] { "GB123456", "GB160060", "AU334550" };
            string   callbackUri        = string.Empty;

            var result = (StatusCodeResult)await controller.PostProductIdentifiers(productIdentifiers, callbackUri);

            Assert.AreEqual(304, result.StatusCode);
        }
示例#11
0
        public async Task WhenInvalidProductIdentifiersRequest_ThenPostProductIdentifiersReturnsInternalServerError()
        {
            var exchangeSetResponse = new ExchangeSetResponse()
            {
            };
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse = exchangeSetResponse,
                HttpStatusCode      = HttpStatusCode.InternalServerError
            };

            var validationMessage = new ValidationFailure("ProductIdentifiers", "Internal Server Error.");

            validationMessage.ErrorCode = HttpStatusCode.InternalServerError.ToString();

            A.CallTo(() => fakeProductDataService.ValidateProductDataByProductIdentifiers(A <ProductIdentifierRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure> {
                validationMessage
            }));

            A.CallTo(() => fakeProductDataService.CreateProductDataByProductIdentifiers(A <ProductIdentifierRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            string[] productIdentifiers = new string[] { "GB123456", "GB160060", "AU334550" };
            string   callbackUri        = string.Empty;

            var result = (ObjectResult)await controller.PostProductIdentifiers(productIdentifiers, callbackUri);

            Assert.AreSame("Internal Server Error", ((UKHO.ExchangeSetService.Common.Models.Response.InternalServerError)result.Value).Detail);
            Assert.AreEqual(500, result.StatusCode);
        }
示例#12
0
        public async Task WhenLargeExchangeSetRequested_ThenPostProductDataByProductVersionsReturnsBadRequest()
        {
            var exchangeSetResponse        = GetExchangeSetResponse();
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse   = exchangeSetResponse,
                IsExchangeSetTooLarge = true,
                HttpStatusCode        = HttpStatusCode.BadRequest
            };

            A.CallTo(() => fakeProductDataService.ValidateProductDataByProductVersions(A <ProductDataProductVersionsRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure>()));

            A.CallTo(() => fakeProductDataService.CreateProductDataByProductVersions(A <ProductDataProductVersionsRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            var result = (BadRequestObjectResult)await controller.PostProductDataByProductVersions(new List <ProductVersionRequest>()
                                                                                                   { new ProductVersionRequest()
                                                                                                     {
                                                                                                         ProductName = "demo"
                                                                                                     } }, "");

            var errors = (ErrorDescription)result.Value;

            Assert.AreEqual(400, result.StatusCode);
            Assert.AreEqual("The Exchange Set requested is very large and will not be created, please use a standard Exchange Set provided by the UKHO.", errors.Errors.Single().Description);
        }
示例#13
0
 private IActionResult BuildOkResponse(ExchangeSetServiceResponse model)
 {
     if (model.LastModified != null)
     {
         httpContextAccessor.HttpContext.Response.Headers.Add(LastModifiedDateHeaderKey, model.LastModified);
     }
     return(Ok(model.ExchangeSetResponse));
 }
示例#14
0
 private IActionResult BuildNotModifiedResponse(ExchangeSetServiceResponse model)
 {
     LogInfo(EventIds.NotModified.ToEventId(), "NotModified", GetCurrentCorrelationId());
     if (model.LastModified != null)
     {
         httpContextAccessor.HttpContext.Response.Headers.Add(LastModifiedDateHeaderKey, model.LastModified);
     }
     return(new StatusCodeResult(StatusCodes.Status304NotModified));
 }
示例#15
0
        public async Task WhenValidRequest_ThenGetProductDataSinceDateTimeReturnSuccess()
        {
            var exchangeSetResponse        = GetExchangeSetResponse();
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse = exchangeSetResponse,
                HttpStatusCode      = HttpStatusCode.OK
            };

            A.CallTo(() => fakeProductDataService.ValidateProductDataSinceDateTime(A <ProductDataSinceDateTimeRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure>()));

            A.CallTo(() => fakeProductDataService.CreateProductDataSinceDateTime(A <ProductDataSinceDateTimeRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            var result = (OkObjectResult)await controller.GetProductDataSinceDateTime("Wed, 21 Oct 2015 07:28:00 GMT", "https://www.abc.com");

            Assert.AreEqual(exchangeSetServiceResponse.ExchangeSetResponse.ExchangeSetCellCount, ((UKHO.ExchangeSetService.Common.Models.Response.ExchangeSetResponse)result.Value).ExchangeSetCellCount);
            Assert.AreEqual(200, result.StatusCode);
        }
示例#16
0
        protected IActionResult GetEssResponse(ExchangeSetServiceResponse model, List <Error> errors = null)
        {
            switch (model.HttpStatusCode)
            {
            case HttpStatusCode.OK:
            case HttpStatusCode.Created:
                return(BuildOkResponse(model));

            case HttpStatusCode.InternalServerError:
                return(BuildInternalServerErrorResponse());

            case HttpStatusCode.BadRequest:
                return(BuildBadRequestErrorResponse(errors));

            case HttpStatusCode.NotModified:
                return(BuildNotModifiedResponse(model));

            default:
                return(BuildInternalServerErrorResponse());
            }
        }
示例#17
0
        public async Task WhenValidProductIdentifiersRequest_ThenPostProductIdentifiersReturnsOkObjectResultCreated()
        {
            var exchangeSetResponse        = GetExchangeSetResponse();
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse = exchangeSetResponse,
                HttpStatusCode      = HttpStatusCode.OK
            };

            A.CallTo(() => fakeProductDataService.ValidateProductDataByProductIdentifiers(A <ProductIdentifierRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure>()));

            string[] productIdentifiers = new string[] { "GB123456", "GB160060", "AU334550" };
            string   callbackUri        = string.Empty;

            A.CallTo(() => fakeProductDataService.CreateProductDataByProductIdentifiers(A <ProductIdentifierRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            var result = (OkObjectResult)await controller.PostProductIdentifiers(productIdentifiers, callbackUri);

            Assert.AreEqual(exchangeSetServiceResponse.ExchangeSetResponse.ExchangeSetCellCount, ((UKHO.ExchangeSetService.Common.Models.Response.ExchangeSetResponse)result.Value).ExchangeSetCellCount);
        }
示例#18
0
        private Task <ExchangeSetServiceResponse> SetExchangeSetResponseLinks(ExchangeSetServiceResponse exchangeSetResponse, string correlationId)
        {
            return(logger.LogStartEndAndElapsedTimeAsync(EventIds.FSSCreateBatchRequestStart,
                                                         EventIds.FSSCreateBatchRequestCompleted,
                                                         "FSS create batch endpoint request for _X-Correlation-ID:{CorrelationId}",
                                                         async() =>
            {
                var createBatchResponse =
                    await fileShareService.CreateBatch(userIdentifier.UserIdentity, correlationId);

                if (createBatchResponse.ResponseCode != HttpStatusCode.Created)
                {
                    exchangeSetResponse = new ExchangeSetServiceResponse
                    {
                        HttpStatusCode = HttpStatusCode.InternalServerError
                    };
                    return exchangeSetResponse;
                }

                exchangeSetResponse.ExchangeSetResponse.Links = new Links()
                {
                    ExchangeSetBatchStatusUri = new LinkSetBatchStatusUri {
                        Href = createBatchResponse.ResponseBody.BatchStatusUri
                    },
                    ExchangeSetBatchDetailsUri = new LinkSetBatchDetailsUri {
                        Href = createBatchResponse.ResponseBody.ExchangeSetBatchDetailsUri
                    },
                    ExchangeSetFileUri = new LinkSetFileUri {
                        Href = createBatchResponse.ResponseBody.ExchangeSetFileUri
                    }
                };
                exchangeSetResponse.ExchangeSetResponse.ExchangeSetUrlExpiryDateTime = Convert.ToDateTime(createBatchResponse.ResponseBody.BatchExpiryDateTime).ToUniversalTime();
                exchangeSetResponse.BatchId = createBatchResponse.ResponseBody.BatchId;
                exchangeSetResponse.HttpStatusCode = createBatchResponse.ResponseCode;

                return exchangeSetResponse;
            }, correlationId));
        }
示例#19
0
        public ExchangeSetServiceResponse CheckIfExchangeSetTooLarge(long fileSize)
        {
            var fileSizeInMB = CommonHelper.ConvertBytesToMegabytes(fileSize);

            if (fileSizeInMB >= essFulfilmentStorageconfig.Value.LargeExchangeSetSizeInMB)
            {
                ExchangeSetServiceResponse exchangeSetResponse = new ExchangeSetServiceResponse
                {
                    HttpStatusCode        = HttpStatusCode.BadRequest,
                    IsExchangeSetTooLarge = true
                };
                return(exchangeSetResponse);
            }
            else
            {
                ExchangeSetServiceResponse exchangeSetResponse = new ExchangeSetServiceResponse
                {
                    HttpStatusCode        = HttpStatusCode.OK,
                    IsExchangeSetTooLarge = false
                };
                return(exchangeSetResponse);
            }
        }
示例#20
0
        public async Task WhenValidProductVersionRequest_ThenPostProductDataByProductVersionsReturnsOkResponse()
        {
            var exchangeSetResponse        = GetExchangeSetResponse();
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse = exchangeSetResponse,
                HttpStatusCode      = HttpStatusCode.OK
            };

            A.CallTo(() => fakeProductDataService.ValidateProductDataByProductVersions(A <ProductDataProductVersionsRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure>()));

            A.CallTo(() => fakeProductDataService.CreateProductDataByProductVersions(A <ProductDataProductVersionsRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            var result = (OkObjectResult)await controller.PostProductDataByProductVersions(new List <ProductVersionRequest>()
                                                                                           { new ProductVersionRequest()
                                                                                             {
                                                                                                 ProductName = "demo"
                                                                                             } }, "");

            Assert.AreSame(exchangeSetServiceResponse.ExchangeSetResponse, result.Value);
        }
示例#21
0
        public async Task WhenLargeExchangeSetRequested_ThenGetProductDataSinceDateTimeReturnBadRequest()
        {
            var exchangeSetResponse        = GetExchangeSetResponse();
            var exchangeSetServiceResponse = new ExchangeSetServiceResponse()
            {
                ExchangeSetResponse   = exchangeSetResponse,
                IsExchangeSetTooLarge = true,
                HttpStatusCode        = HttpStatusCode.BadRequest
            };

            A.CallTo(() => fakeProductDataService.ValidateProductDataSinceDateTime(A <ProductDataSinceDateTimeRequest> .Ignored))
            .Returns(new ValidationResult(new List <ValidationFailure>()));

            A.CallTo(() => fakeProductDataService.CreateProductDataSinceDateTime(A <ProductDataSinceDateTimeRequest> .Ignored, A <AzureAdB2C> .Ignored))
            .Returns(exchangeSetServiceResponse);

            var result = (BadRequestObjectResult)await controller.GetProductDataSinceDateTime("Wed, 21 Oct 2015 07:28:00 GMT", "https://www.abc.com");

            var errors = (ErrorDescription)result.Value;

            Assert.AreEqual(400, result.StatusCode);
            Assert.AreEqual("The Exchange Set requested is very large and will not be created, please use a standard Exchange Set provided by the UKHO.", errors.Errors.Single().Description);
        }