Пример #1
0
        public void RegisterShouldRegisterEnumerableOfTModel()
        {
            // arrange
            var container = HateoasContainerFactory.Create(_httpConfigurationMock.Object);

            // act
            container.RegisterCollection <IEnumerable <TestModel> >("test");

            // assert
            Assert.AreEqual(1, _httpConfigurationMock.Object.GetRegistrationsFor(typeof(IEnumerable <TestModel>)).Count);
        }
Пример #2
0
        public void Initialize()
        {
            _authorizationProvider  = new Mock <IAuthorizationProvider>();
            _dependencyResolverMock = new Mock <IDependencyResolver>();
            _personProvider         = new Mock <IPersonProvider>();

            var linkBuilderFactory = new LinkBuilderFactory();

            _authorizationProvider.Setup(p => p.IsAuthorized(It.IsAny <MethodInfo>())).Returns(true);
            _dependencyResolverMock.Setup(p => p.GetService(It.IsAny <Type>())).Returns(_personProvider.Object);

            var idFromExpressionProcessor     = new IdFromExpressionProcessor(_dependencyResolverMock.Object);
            var argumentsDefinitionsProcessor = new ArgumentDefinitionsProcessor();
            var templateArgumentsProcessor    = new TemplateArgumentsProcessor();

            var configurationMock = new Mock <IHttpConfiguration>(MockBehavior.Strict);
            var properties        = new ConcurrentDictionary <object, object>();

            configurationMock.SetupGet(c => c.Properties).Returns(() => properties);

            Container   = HateoasContainerFactory.Create(configurationMock.Object);
            LinkFactory = new LinkFactory(
                linkBuilderFactory,
                _authorizationProvider.Object,
                idFromExpressionProcessor,
                argumentsDefinitionsProcessor,
                templateArgumentsProcessor);
            var linksForFuncProvider = new ConfigurationProviderGetLinksForFuncProvider(new InMemoryCache <int, MethodInfo>());

            ConfigurationProvider = new ConfigurationProvider(configurationMock.Object, LinkFactory, linksForFuncProvider, new InMemoryCache <Type, Func <ConfigurationProvider, object, IEnumerable <IHateoasLink> > >());

            Enumerable = new List <Person>
            {
                new Person()
                {
                    Id      = Guid.Parse("ae213c3e-9ce8-489f-a5ff-5422b55bba44"),
                    HouseId = Guid.Parse("a7a52c3d-a5ef-47ff-97db-176f4b2609e4"),
                },
                new Person()
                {
                    Id      = Guid.Parse("6153d85e-8233-4d9f-b583-a78d2ba8d3d1"),
                    HouseId = Guid.Parse("9042e54f-dee6-45c9-8d9e-048026f5d5fa"),
                },
            };

            // this link is added to check if it is ignored
            Container.Register <Person>("some-extra-link").Get <PersonController>();
            Container.Register <Car>("some-extra-link").Get <CarController>();
        }
Пример #3
0
        public void ConfigureMergeEmptyOptionsWithDefault()
        {
            // arrange
            var hateoasContainer = HateoasContainerFactory.Create(_httpConfigurationMock.Object);
            var configuration    = new { };

            // act
            hateoasContainer.Configure(configuration);

            // assert
            Assert.IsNotNull(hateoasContainer.Configuration);
            Assert.AreEqual(HrefStyle.Relative, hateoasContainer.Configuration.HrefStyle);
            Assert.AreEqual(LinkStyle.Array, hateoasContainer.Configuration.LinkStyle);
            Assert.AreEqual(TemplateStyle.Rendered, hateoasContainer.Configuration.TemplateStyle);
        }
Пример #4
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);
        }
Пример #5
0
        public void ConfigureShouldMergeDefaultAndProvidedParameters()
        {
            // arrange
            var container = HateoasContainerFactory.Create(_httpConfigurationMock.Object);

            // act
            container.Configure(new
            {
                HrefStyle     = HrefStyle.Relative,
                LinkStyle     = LinkStyle.Array,
                TemplateStyle = TemplateStyle.Rendered
            });

            // assert
            Assert.AreEqual(HrefStyle.Relative, container.Configuration.HrefStyle);
            Assert.AreEqual(LinkStyle.Array, container.Configuration.LinkStyle);
            Assert.AreEqual(TemplateStyle.Rendered, container.Configuration.TemplateStyle);
        }
Пример #6
0
        public void RegisterIEnumerableAsModelShouldThrowArgumentException()
        {
            // arrange
            var container = HateoasContainerFactory.Create(_httpConfigurationMock.Object);

            try
            {
                // act
                container.Register <IEnumerable <TestModel> >("test");

                // assert
                Assert.Fail("Expected exception has not been thrown.");
            }
            catch (ArgumentException exc)
            {
                // assert
                Assert.AreEqual("Cannot register collections; use .RegisterCollection<TModel>(\"name\") instead", exc.Message);
            }
        }
Пример #7
0
        public void Initialize()
        {
            _authorizationProvider  = new Mock <IAuthorizationProvider>();
            _dependencyResolverMock = new Mock <IDependencyResolver>();
            _personProvider         = new Mock <IPersonProvider>();

            var linkBuilderFactory = new LinkBuilderFactory();

            _authorizationProvider.Setup(p => p.IsAuthorized(It.IsAny <MethodInfo>())).Returns(true);
            _dependencyResolverMock.Setup(p => p.GetService(It.IsAny <Type>())).Returns(_personProvider.Object);

            var idFromExpressionProcessor     = new IdFromExpressionProcessor(_dependencyResolverMock.Object);
            var argumentsDefinitionsProcessor = new ArgumentDefinitionsProcessor();
            var templateArgumentsProcessor    = new TemplateArgumentsProcessor();

            var configurationMock = new Mock <IHttpConfiguration>(MockBehavior.Strict);
            var properties        = new ConcurrentDictionary <object, object>();

            configurationMock.SetupGet(c => c.Properties).Returns(() => properties);

            Container   = HateoasContainerFactory.Create(configurationMock.Object);
            LinkFactory = new LinkFactory(
                linkBuilderFactory,
                _authorizationProvider.Object,
                idFromExpressionProcessor,
                argumentsDefinitionsProcessor,
                templateArgumentsProcessor);
            var linksForFuncProvider = new ConfigurationProviderGetLinksForFuncProvider(new InMemoryCache <int, MethodInfo>());

            ConfigurationProvider = new ConfigurationProvider(configurationMock.Object, LinkFactory, linksForFuncProvider, new InMemoryCache <Type, Func <ConfigurationProvider, object, IEnumerable <IHateoasLink> > >());

            Entity = new Person()
            {
                Id      = Guid.Parse("ae213c3e-9ce8-489f-a5ff-5422b55bba44"),
                HouseId = Guid.Parse("a7a52c3d-a5ef-47ff-97db-176f4b2609e4"),
            };
        }