private ResponseInfo CreateFakeResponseInfo(RequestInfo fakeRequest, IEnumerable <string> contentType, params object[] bodyArguments) { ResponseInfo result; IEnumerable <string> currentContentType; if (bodyArguments.Length == 1) { var singleResponse = ObjectResponseInfo <object> .CreateInstance(Encoding.UTF8, fakeRequest, bodyArguments[0].GetType(), bodyArguments[0], _converterProvider); currentContentType = (singleResponse.Headers[Header.ContentType] == null ? new string[0] : new[] { singleResponse.Headers[Header.ContentType].Values.Select(item => item.Value).First() }); result = singleResponse; } else { var multiResponse = new MultiObjectResponseInfo(Encoding.UTF8, fakeRequest, bodyArguments, _converterProvider); currentContentType = multiResponse.ObjectResponses.Select(item => item.Headers[Header.ContentType].Values.Select(value => value.Value).First()) .Where(item => !String.IsNullOrEmpty(item)); result = multiResponse; } if ((contentType.Any()) && (currentContentType.Join(contentType, outer => outer, inner => inner, (outer, inner) => inner).Count() != currentContentType.Count())) { throw new WebException("Unsupported media type", WebExceptionStatus.ProtocolError); } return(result); }
public void Setup() { (_converterProvider = new Mock<IConverterProvider>(MockBehavior.Strict)).Setup(instance => instance.FindBestOutputConverter<string>(It.IsAny<IResponseInfo>())) .Returns<IResponseInfo>(response => _converter.Object); _converterProvider.Setup(instance => instance.FindBestOutputConverter<int>(It.IsAny<IResponseInfo>())) .Returns<IResponseInfo>(response => _converter.Object); (_converter = new Mock<IConverter>(MockBehavior.Strict)).Setup(instance => instance.CanConvertFrom<string>(It.IsAny<IResponseInfo>())) .Returns<IResponseInfo>(response => CompatibilityLevel.ExactMatch); _converter.Setup(instance => instance.ConvertFrom(StringBody, It.IsAny<IResponseInfo>())) .Callback<string, IResponseInfo>((body, response) => { response.Headers["Content-Type"] = "text/plain"; using (var writer = new StreamWriter(response.Body)) { writer.Write(body); writer.Flush(); } }); _converter.Setup(instance => instance.ConvertFrom(NumericBody, It.IsAny<IResponseInfo>())) .Callback<int, IResponseInfo>((body, response) => { response.Headers["Content-Type"] = "text/plain"; using (var writer = new StreamWriter(response.Body)) { writer.Write(body); writer.Flush(); } }); _request = new RequestInfo(Verb.GET, (HttpUrl)UrlParser.Parse("http://temp.org/"), new MemoryStream(), new BasicClaimBasedIdentity()); _response = new MultiObjectResponseInfo(_request, new object[] { StringBody, NumericBody }, _converterProvider.Object); }
private ResponseInfo MakeResponse(IRequestMapping requestMapping, IList <object> resultingValues) { ResponseInfo result = (ResponseInfo)requestMapping.Target.Response; var bodyValues = new List <KeyValuePair <ResultInfo, object> >(); var headerValues = new List <KeyValuePair <ResultInfo, object> >(); requestMapping.Operation.Results.ForEach((resultValue, index) => (resultValue.Target is ToHeaderAttribute ? headerValues : bodyValues).Add(new KeyValuePair <ResultInfo, object>(resultValue, resultingValues[index]))); switch (bodyValues.Count) { case 0: break; case 1: var bodyValue = bodyValues[0]; result = ObjectResponseInfo <object> .CreateInstance(result.Encoding, result.Request, bodyValue.Value.GetType(), bodyValue.Value, _converterProvider, result.Headers); break; default: result = new MultiObjectResponseInfo(result.Encoding, result.Request, bodyValues.Select(item => item.Value), _converterProvider, result.Headers); break; } headerValues.ForEach(value => result.Headers.Add(new Header( ((ToHeaderAttribute)value.Key.Target).Name, String.Format(((ToHeaderAttribute)value.Key.Target).Format, _converterProvider.ConvertFrom(value.Value))))); return(result); }
private ResponseInfo MakeResponse(IRequestMapping requestMapping, IList<object> resultingValues) { ResponseInfo result = (ResponseInfo)requestMapping.Target.Response; var bodyValues = new List<KeyValuePair<ResultInfo, object>>(); var headerValues = new List<KeyValuePair<ResultInfo, object>>(); requestMapping.Operation.Results.ForEach((resultValue, index) => (resultValue.Target is ToHeaderAttribute ? headerValues : bodyValues).Add(new KeyValuePair<ResultInfo, object>(resultValue, resultingValues[index]))); switch (bodyValues.Count) { case 0: break; case 1: var bodyValue = bodyValues[0]; result = ObjectResponseInfo<object>.CreateInstance(result.Encoding, result.Request, bodyValue.Value.GetType(), bodyValue.Value, _converterProvider, result.Headers); break; default: result = new MultiObjectResponseInfo(result.Encoding, result.Request, bodyValues.Select(item => item.Value), _converterProvider, result.Headers); break; } headerValues.ForEach(value => result.Headers.Add(new Header( ((ToHeaderAttribute)value.Key.Target).Name, String.Format(((ToHeaderAttribute)value.Key.Target).Format, _converterProvider.ConvertFrom(value.Value))))); return result; }