public void WhenISendARequest() { var httpMessageHelper = new HttpMessageHelper(); var request = this.scenarioContext.GetValueOrDefault <HttpRequestMessage>(ContextKey.Request); var responseMessage = httpMessageHelper.GetResponseMessage(request, scenarioContext); scenarioContext[ContextKey.ResponseMessage] = responseMessage; scenarioContext[ContextKey.StatusCode] = responseMessage.StatusCode; if (!responseMessage.IsSuccessStatusCode) { var result = (string)scenarioContext[ContextKey.Result]; Assert.IsFalse(string.IsNullOrWhiteSpace(result), $"Expected response to have a result. {request.RequestUri.PathAndQuery}"); var errorMessageContent = JsonConvert.DeserializeObject <ErrorMessage>(result); var jsonErrorMessage = JsonConvert.DeserializeObject <ErrorResponseBody>(result); if ((int)responseMessage.StatusCode <= 500) { scenarioContext[ContextKey.ErrorMessage] = jsonErrorMessage.Detail; } else { scenarioContext[ContextKey.ErrorMessage] = errorMessageContent.Message; } } }
public static async Task <HttpResponseMessage> CreateNewAsync(Stream responseStream, HttpMethod requestMethod) { // https://tools.ietf.org/html/rfc7230#section-3 // The normal procedure for parsing an HTTP message is to read the // start - line into a structure, read each header field into a hash table // by field name until the empty line, and then use the parsed data to // determine if a message body is expected.If a message body has been // indicated, then it is read as a stream until an amount of octets // equal to the message body length is read or the connection is closed. // https://tools.ietf.org/html/rfc7230#section-3 // All HTTP/ 1.1 messages consist of a start - line followed by a sequence // of octets in a format similar to the Internet Message Format // [RFC5322]: zero or more header fields(collectively referred to as // the "headers" or the "header section"), an empty line indicating the // end of the header section, and an optional message body. // HTTP - message = start - line // * (header - field CRLF ) // CRLF // [message - body] string startLine = await HttpMessageHelper.ReadStartLineAsync(responseStream).ConfigureAwait(false); var statusLine = StatusLine.Parse(startLine); var response = new HttpResponseMessage(statusLine.StatusCode); string headers = await HttpMessageHelper.ReadHeadersAsync(responseStream).ConfigureAwait(false); var headerSection = await HeaderSection.CreateNewAsync(headers).ConfigureAwait(false); var headerStruct = headerSection.ToHttpResponseHeaders(); HttpMessageHelper.AssertValidHeaders(headerStruct.ResponseHeaders, headerStruct.ContentHeaders); byte[]? contentBytes = await HttpMessageHelper.GetContentBytesAsync(responseStream, headerStruct, requestMethod, statusLine).ConfigureAwait(false); contentBytes = HttpMessageHelper.HandleGzipCompression(headerStruct.ContentHeaders, contentBytes); response.Content = contentBytes is null ? null : new ByteArrayContent(contentBytes); HttpMessageHelper.CopyHeaders(headerStruct.ResponseHeaders, response.Headers); if (response.Content is { })
public void WhenICallTheInsolvenciesService(string searchDate) { var url = scenarioContext.GetMandatoryValue <string>(ContextKey.Url); var httpMessageHelper = new HttpMessageHelper(); var requestMessage = httpMessageHelper.CreateRequestMessage(url, "GET"); var headers = scenarioContext.GetValueOrDefault <Dictionary <string, string> >(ContextKey.Headers); foreach (var item in headers) { requestMessage.Headers.Add(item.Key, item.Value); } if (searchDate == null) { searchDate = "current"; } switch (searchDate) { case OperationDateTypes.Current: break; case OperationDateTypes.CurrentMinus0Days: requestMessage.Headers.Add("Operation-Date", DateTime.Now.ToString("yyyy-MM-dd")); break; case OperationDateTypes.CurrentMinus1Day: requestMessage.Headers.Add("Operation-Date", DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd")); break; case OperationDateTypes.CurrentMinus1Year: requestMessage.Headers.Add("Operation-Date", DateTime.Now.AddYears(-1).ToString("yyyy-MM-dd")); break; case OperationDateTypes.CurrentMinus2Years: requestMessage.Headers.Add("Operation-Date", DateTime.Now.AddYears(-2).ToString("yyyy-MM-dd")); break; case OperationDateTypes.CurrentMinus3Years: requestMessage.Headers.Add("Operation-Date", DateTime.Now.AddYears(-3).ToString("yyyy-MM-dd")); break; case OperationDateTypes.CurrentMinus4Years: requestMessage.Headers.Add("Operation-Date", DateTime.Now.AddYears(-4).ToString("yyyy-MM-dd")); break; case OperationDateTypes.CurrentMinus5Years: requestMessage.Headers.Add("Operation-Date", DateTime.Now.AddYears(-5).ToString("yyyy-MM-dd")); break; case OperationDateTypes.CurrentMinus6Years: requestMessage.Headers.Add("Operation-Date", DateTime.Now.AddYears(-6).ToString("yyyy-MM-dd")); break; case OperationDateTypes.CurrentMinus7Years: requestMessage.Headers.Add("Operation-Date", DateTime.Now.AddYears(-7).ToString("yyyy-MM-dd")); break; case OperationDateTypes.CurrentMinus8Years: requestMessage.Headers.Add("Operation-Date", DateTime.Now.AddYears(-8).ToString("yyyy-MM-dd")); break; case OperationDateTypes.CurrentMinus9Years: requestMessage.Headers.Add("Operation-Date", DateTime.Now.AddYears(-9).ToString("yyyy-MM-dd")); break; case OperationDateTypes.CurrentPlus6Years: requestMessage.Headers.Add("Operation-Date", DateTime.Now.AddYears(6).ToString("yyyy-MM-dd")); break; default: throw new ArgumentException($"search Date Type {searchDate} is not in a list of Operation Date Types"); } scenarioContext[ContextKey.Request] = requestMessage; var request = scenarioContext.GetValueOrDefault <HttpRequestMessage>(ContextKey.Request); var responseMessage = httpMessageHelper.GetResponseMessage(request, scenarioContext); scenarioContext[ContextKey.ResponseMessage] = responseMessage; scenarioContext[ContextKey.StatusCode] = responseMessage.StatusCode; if (responseMessage.IsSuccessStatusCode) { return; } var result = (string)this.scenarioContext[ContextKey.Result]; Assert.IsFalse(string.IsNullOrWhiteSpace(result), $"Expected response to have a result. {request.RequestUri.PathAndQuery}"); }