Exemplo n.º 1
0
 public static bool IsSupportedContentType(this IPartialResponseConfig partialResponseConfig, string contentType)
 {
     return
         (!partialResponseConfig.SupportedResponseContentType.IsEmpty() &&
          partialResponseConfig.SupportedResponseContentType.Any(
              s => s.Equals(contentType, StringComparison.OrdinalIgnoreCase)));
 }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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));
        }
Exemplo n.º 7
0
        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));
        }
Exemplo n.º 8
0
        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));
        }
Exemplo n.º 9
0
        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);
            }
        }
Exemplo n.º 11
0
        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));
        }
Exemplo n.º 12
0
        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;
     }
 }