public static bool IsSupportedContentType(this IPartialResponseConfig partialResponseConfig, string contentType) { return (!partialResponseConfig.SupportedResponseContentType.IsEmpty() && partialResponseConfig.SupportedResponseContentType.Any( s => s.Equals(contentType, StringComparison.OrdinalIgnoreCase))); }
public void GetFields_UnknownEnum_ReturnsEmptyString() { Assert.False(Enum.IsDefined(typeof(FieldResolutionMethod), Int32.MaxValue)); IPartialResponseConfig partialReponseConfig = GetMockResponseConfig((FieldResolutionMethod)Int32.MaxValue); var reqContextMock = MockRepository.GenerateStub <IRequestContext>(); Assert.Equal(string.Empty, FieldsRetriever.GetFields(reqContextMock, partialReponseConfig)); }
public void GetFields_HeaderOnlyQueryStringSet_ReturnsEmptyString() { IPartialResponseConfig partialReponseConfig = GetMockResponseConfig(FieldResolutionMethod.HeaderOnly); const string IdField = "id"; var request = MockRepository.GenerateStub <IRequest>(); StubQueryString(request, partialReponseConfig.FieldsQueryStringName, IdField); Assert.Equal(string.Empty, FieldsRetriever.GetFields(request, partialReponseConfig)); }
public void GetFields_QueryStringOnlyHeaderSet_RetrunsEmptyString() { IPartialResponseConfig partialReponseConfig = GetMockResponseConfig(FieldResolutionMethod.QueryStringOnly); const string IdField = "id"; var reqContextMock = MockRepository.GenerateStub <IRequestContext>(); var httpRequesttMock = MockRepository.GenerateStub <IHttpRequest>(); reqContextMock.Expect(x => x.Get <IHttpRequest>()).Return(httpRequesttMock); reqContextMock.Expect(x => x.GetHeader(partialReponseConfig.FieldsHeaderName)).Return(IdField); Assert.Equal(string.Empty, FieldsRetriever.GetFields(reqContextMock, partialReponseConfig)); }
public void GetFields_HeaderOnlyOneFieldSet_RetrunsOneField() { IPartialResponseConfig partialReponseConfig = GetMockResponseConfig(FieldResolutionMethod.HeaderOnly); const string IdField = "id"; var reqContextMock = MockRepository.GenerateStub <IRequestContext>(); reqContextMock.Expect(x => x.GetHeader(partialReponseConfig.FieldsHeaderName)).Return(IdField); Assert.Equal( IdField, FieldsRetriever.GetFields(reqContextMock, partialReponseConfig)); }
public void GetFields_HeaderOnlyOneFieldSet_RetrunsOneField() { IPartialResponseConfig partialReponseConfig = GetMockResponseConfig(FieldResolutionMethod.HeaderOnly); const string IdField = "id"; var request = MockRepository.GenerateStub <IRequest>(); StubHeaders(request, partialReponseConfig.FieldsHeaderName, IdField); Assert.Equal( IdField, FieldsRetriever.GetFields(request, partialReponseConfig)); }
public void GetFields_HeaderOnlyQueryStringSet_ReturnsEmptyString() { IPartialResponseConfig partialReponseConfig = GetMockResponseConfig(FieldResolutionMethod.HeaderOnly); const string IdField = "id"; var reqContextMock = MockRepository.GenerateStub <IRequestContext>(); var httpRequesttMock = MockRepository.GenerateStub <IHttpRequest>(); reqContextMock.Expect(x => x.Get <IHttpRequest>()).Return(httpRequesttMock); httpRequesttMock.Expect(x => x.QueryString) .Return(new NameValueCollection { { partialReponseConfig.FieldsQueryStringName, IdField } }); Assert.Equal(string.Empty, FieldsRetriever.GetFields(reqContextMock, partialReponseConfig)); }
public void GetFields_HeaderThenQueryStringBothSetDifferent_ReturnsHeaderFieldOnly() { IPartialResponseConfig partialReponseConfig = GetMockResponseConfig(FieldResolutionMethod.HeaderThenQueryString); const string IdField = "id"; const string NameField = "name"; var request = MockRepository.GenerateStub <IRequest>(); StubQueryString(request, partialReponseConfig.FieldsQueryStringName, IdField); StubHeaders(request, partialReponseConfig.FieldsHeaderName, NameField); Assert.Equal( NameField, FieldsRetriever.GetFields(request, partialReponseConfig)); }
public void GetFields_QueryStringAndHeaderBothSet_ReturnsAllFields() { IPartialResponseConfig partialReponseConfig = GetMockResponseConfig(FieldResolutionMethod.QueryStringAndHeader); const string IdField = "id"; const string NameField = "name"; var request = MockRepository.GenerateStub <IRequest>(); StubQueryString(request, partialReponseConfig.FieldsQueryStringName, IdField); StubHeaders(request, partialReponseConfig.FieldsHeaderName, NameField); Assert.Equal( string.Join(FieldSelectorConstants.MultipleFieldSeparator.ToString(), NameField, IdField), FieldsRetriever.GetFields(request, partialReponseConfig)); }
public static string GetFields(IRequest request, IPartialResponseConfig partialResponseConfig) { switch (partialResponseConfig.FieldResolutionMethod) { case FieldResolutionMethod.HeaderOnly: return(FieldsFromHeader(request, partialResponseConfig.FieldsHeaderName)); case FieldResolutionMethod.QueryStringOnly: return(FieldsFromQueryString(request, partialResponseConfig.FieldsQueryStringName)); case FieldResolutionMethod.HeaderThenQueryString: { string fields = FieldsFromHeader(request, partialResponseConfig.FieldsHeaderName); return(string.IsNullOrWhiteSpace(fields) ? FieldsFromQueryString(request, partialResponseConfig.FieldsQueryStringName) : fields); } case FieldResolutionMethod.QueryStringThenHeader: { string fields = FieldsFromQueryString(request, partialResponseConfig.FieldsQueryStringName); return(string.IsNullOrWhiteSpace(fields) ? FieldsFromHeader(request, partialResponseConfig.FieldsHeaderName) : fields); } case FieldResolutionMethod.QueryStringAndHeader: { string headerFields = FieldsFromHeader(request, partialResponseConfig.FieldsHeaderName); string queryFields = FieldsFromQueryString( request, partialResponseConfig.FieldsQueryStringName); return(string.IsNullOrWhiteSpace(headerFields) ? queryFields : string.Join( FieldSelectorConstants.MultipleFieldSeparator.ToString(), headerFields, queryFields)); } default: return(string.Empty); } }
public void GetFields_HeaderThenQueryStringBothSetDifferent_ReturnsHeaderFieldOnly() { IPartialResponseConfig partialReponseConfig = GetMockResponseConfig(FieldResolutionMethod.HeaderThenQueryString); const string IdField = "id"; const string NameField = "name"; var reqContextMock = MockRepository.GenerateStub <IRequestContext>(); var httpRequesttMock = MockRepository.GenerateStub <IHttpRequest>(); reqContextMock.Expect(x => x.Get <IHttpRequest>()).Return(httpRequesttMock); httpRequesttMock.Expect(x => x.QueryString) .Return(new NameValueCollection { { partialReponseConfig.FieldsQueryStringName, IdField } }); reqContextMock.Expect(x => x.GetHeader(partialReponseConfig.FieldsHeaderName)).Return(NameField); Assert.Equal( NameField, FieldsRetriever.GetFields(reqContextMock, partialReponseConfig)); }
public void GetFields_QueryStringAndHeaderBothSet_ReturnsAllFields() { IPartialResponseConfig partialReponseConfig = GetMockResponseConfig(FieldResolutionMethod.QueryStringAndHeader); const string IdField = "id"; const string NameField = "name"; var reqContextMock = MockRepository.GenerateStub <IRequestContext>(); var httpRequesttMock = MockRepository.GenerateStub <IHttpRequest>(); reqContextMock.Expect(x => x.Get <IHttpRequest>()).Return(httpRequesttMock); httpRequesttMock.Expect(x => x.QueryString) .Return(new NameValueCollection { { partialReponseConfig.FieldsQueryStringName, IdField } }); reqContextMock.Expect(x => x.GetHeader(partialReponseConfig.FieldsHeaderName)).Return(NameField); Assert.Equal( string.Join(FieldSelectorConstants.MultipleFieldSeparator.ToString(), NameField, IdField), FieldsRetriever.GetFields(reqContextMock, partialReponseConfig)); }
/// <summary> /// <para> /// Returns a partial response of the given Dto if fileds are specified in the request context and the content /// type is supported. /// </para> /// <para>Configuration is provided by the caller.</para> /// </summary> /// <typeparam name="T"></typeparam> /// <param name="requestContext"></param> /// <param name="dto"></param> /// <param name="partialResponseConfig"></param> /// <returns></returns> public static object ToPartialResponse <T>( this IRequestContext requestContext, T dto, IPartialResponseConfig partialResponseConfig) where T : class { if (dto == null) { return(null); } string fields = FieldsRetriever.GetFields(requestContext, partialResponseConfig); bool isSupportedContentType = partialResponseConfig.IsSupportedContentType(requestContext.ResponseContentType); object processedResponse = dto; if (!string.IsNullOrWhiteSpace(fields) && isSupportedContentType) { List <FieldSelectorTreeNode> fieldSelectors = FieldSelectorParser.Expand(fields); var responsinator = new PartialResponsinator(fieldSelectors, new PropertyValueGetterFactory()); processedResponse = responsinator.GetPartialResponse(dto); } return(processedResponse); }
public static string GetFields(IRequestContext requestContext, IPartialResponseConfig partialResponseConfig) { switch (partialResponseConfig.FieldResolutionMethod) { case FieldResolutionMethod.HeaderOnly: return FieldsFromHeader(requestContext, partialResponseConfig.FieldsHeaderName); case FieldResolutionMethod.QueryStringOnly: return FieldsFromQueryString(requestContext, partialResponseConfig.FieldsQueryStringName); case FieldResolutionMethod.HeaderThenQueryString: { string fields = FieldsFromHeader(requestContext, partialResponseConfig.FieldsHeaderName); return string.IsNullOrWhiteSpace(fields) ? FieldsFromQueryString(requestContext, partialResponseConfig.FieldsQueryStringName) : fields; } case FieldResolutionMethod.QueryStringThenHeader: { string fields = FieldsFromQueryString(requestContext, partialResponseConfig.FieldsQueryStringName); return string.IsNullOrWhiteSpace(fields) ? FieldsFromHeader(requestContext, partialResponseConfig.FieldsHeaderName) : fields; } case FieldResolutionMethod.QueryStringAndHeader: { string headerFields = FieldsFromHeader(requestContext, partialResponseConfig.FieldsHeaderName); string queryFields = FieldsFromQueryString( requestContext, partialResponseConfig.FieldsQueryStringName); return string.IsNullOrWhiteSpace(headerFields) ? queryFields : string.Join( FieldSelectorConstants.MultipleFieldSeparator.ToString(), headerFields, queryFields); } default: return string.Empty; } }