public async Task HandlerShouldProcessWhenValid()
        {
            // arrange
            var responseProviderMock = new Mock <IResponseProvider>(MockBehavior.Strict);
            Expression <Func <IResponseProvider, IEnumerable <IHateoasLink> > > createExpression = rp => rp.CreateLinks(It.IsAny <HttpResponseMessage>());

            responseProviderMock
            .Setup(createExpression)
            .Returns(new List <IHateoasLink>());

            var handler = new HateoasHttpHandler(responseProviderMock.Object, new List <IMessageSerializer>())
            {
                InnerHandler = new TestHandler((message, token) => new HttpResponseMessage(HttpStatusCode.Accepted)
                {
                    Content = new ObjectContent(typeof(Person), new Person(), new JsonMediaTypeFormatter())
                })
            };
            var requestMessage = new HttpRequestMessage(HttpMethod.Get, "http://hateoas.net");
            var client         = new HttpClient(handler);

            // act
            var result = await client.SendAsync(requestMessage);

            // assert
            responseProviderMock.Verify(createExpression, Times.Once);
        }
Exemple #2
0
        public static void Startup <TRegistrationClass>(
            TRegistrationClass registrationClass,
            IHttpConfiguration configuration,
            IAuthorizationProvider authorizationProvider  = null,
            IDependencyResolver dependencyResolver        = null,
            IList <IMessageSerializer> messageSerializers = null)
            where TRegistrationClass : IHateoasRegistrationProfile
        {
            var linkBuilderFactory = new LinkBuilderFactory();

            // todo: this is not very clean; user dependencyresolver etc
            if (authorizationProvider == null)
            {
                var httpContextWrapper = new HttpContextWrapper(HttpContext.Current);
                authorizationProvider = new WebApiAuthorizationProvider(httpContextWrapper);
            }

            var idFromExpressionProcessor     = new IdFromExpressionProcessor(dependencyResolver);
            var argumentsDefinitionsProcessor = new ArgumentDefinitionsProcessor();
            var templateArgumentsProcessor    = new TemplateArgumentsProcessor();

            var linkFactory = new LinkFactory(
                linkBuilderFactory: linkBuilderFactory,
                authorizationProvider: authorizationProvider,
                idFromExpressionProcessor: idFromExpressionProcessor,
                argumentsDefinitionsProcessor: argumentsDefinitionsProcessor,
                templateArgumentsProcessor: templateArgumentsProcessor
                );

            var inMemoryGenericLinksForMethodsCache = new InMemoryCache <int, MethodInfo>();
            var linksForFuncProvider =
                new ConfigurationProviderGetLinksForFuncProvider(inMemoryGenericLinksForMethodsCache);

            var getLinksForMethodCache =
                new InMemoryCache <Type, Func <ConfigurationProvider, object, IEnumerable <IHateoasLink> > >();
            var configurationProvider = new ConfigurationProvider(configuration, linkFactory, linksForFuncProvider,
                                                                  getLinksForMethodCache);

            var responseProvider = new ResponseProvider(configurationProvider);
            var handler          = new HateoasHttpHandler(responseProvider, messageSerializers ?? new List <IMessageSerializer>());

            configuration.MessageHandlers.Add(handler);

            var container = HateoasContainerFactory.Create(configuration);

            registrationClass.Register(container);
        }
Exemple #3
0
        protected async Task <TestResult> RegisterGetAndAssertResponse(bool isHateoasResponse, object data, int linkCount, int commandCount)
        {
            Hateoas.Startup(RegistrationClass, _httpConfigurationWrapper, _authorizationProviderMock.Object, _dependencyResolver.Object);

            var handler = new HateoasHttpHandler(_responseProvider, new List <IMessageSerializer>())
            {
                InnerHandler = new TestHandler((request, cancellationToken) => Response)
            };

            var client = new HttpClient(handler);
            var result = await client.SendAsync(Request);

            var testResult = new TestResult(result);
            await testResult.GetResponseString();

            // assert
            testResult.IsHateoasResponse.Should().Be(isHateoasResponse);
            testResult.HateoasResponse.Data.Should().Be(data);
            testResult.HateoasResponse.Links.Should().HaveCount(linkCount);
            testResult.HateoasResponse.Commands.Should().HaveCount(commandCount);

            return(testResult);
        }