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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
private IActionResult BuildOkResponse(ExchangeSetServiceResponse model) { if (model.LastModified != null) { httpContextAccessor.HttpContext.Response.Headers.Add(LastModifiedDateHeaderKey, model.LastModified); } return(Ok(model.ExchangeSetResponse)); }
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)); }
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); }
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()); } }
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); }
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)); }
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); } }
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); }
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); }