Beispiel #1
0
        public void Should_resolve_bootstrapper_type_from_unique_type()
        {
            // Given
            var list = new List <Type> {
                typeof(MyFirstBootstwapper)
            };
            var typeCatalog = new TestTypeCatalog(list);

            // When
            var bootstrapperType = NancyBootstrapperLocator.GetBootstrapperType(typeCatalog);

            // Then
            bootstrapperType.ShouldEqual(typeof(MyFirstBootstwapper));
        }
Beispiel #2
0
        public void Should_throw_exception_when_multiple_bootstrappers_are_located()
        {
            // Given
            var list = new List <Type> {
                typeof(MyFirstBootstwapper), typeof(AnotherFirstBootstwapper)
            };
            var typeCatalog = new TestTypeCatalog(list);

            // When
            var result = Record.Exception(() => NancyBootstrapperLocator.GetBootstrapperType(typeCatalog));

            // Then
            result.ShouldNotBeNull();
            result.GetType().ShouldEqual(typeof(BootstrapperException));
        }
Beispiel #3
0
        public void Should_be_able_to_handle_a_complete_graph()
        {
            // Given
            var list = new List <Type> {
                typeof(BootstwapperBase), typeof(DefaultBootstwapper), typeof(MyFirstBootstwapper), typeof(MySecondBootstwapper)
            };
            Type found;

            // When
            var res = NancyBootstrapperLocator.TryFindMostDerivedType(list, out found);

            // Then
            res.ShouldEqual(true);
            found.ShouldEqual(typeof(MySecondBootstwapper));
        }
Beispiel #4
0
        public void Should_be_able_to_handle_parent_and_grandparent_inheritance_of_internal_stuff()
        {
            // Given
            var list = new List <Type> {
                typeof(MyOwnDefaultBootstwapper), typeof(MyFirstBootstwapper)
            };
            Type found;

            // When
            var res = NancyBootstrapperLocator.TryFindMostDerivedType(list, out found);

            // Then
            res.ShouldEqual(false);
            found.ShouldEqual(null);
        }
Beispiel #5
0
        public void Should_return_false_when_there_are_more_than_one_most_derived_types()
        {
            // Given
            var list = new List <Type> {
                typeof(MyFirstBootstwapper), typeof(MySecondBootstwapper), typeof(MyThirdBootstwapper)
            };
            Type found;

            // When
            var res = NancyBootstrapperLocator.TryFindMostDerivedType(list, out found);

            // Then
            res.ShouldEqual(false);
            found.ShouldEqual(null);
        }
Beispiel #6
0
        public void Should_automatically_resolve_the_most_derived_bootstrapper()
        {
            // Given
            var list = new List <Type> {
                typeof(MyFirstBootstwapper), typeof(MySecondBootstwapper), typeof(MyFourthBootstwapper)
            };
            Type found;

            // When
            var res = NancyBootstrapperLocator.TryFindMostDerivedType(list, out found);

            // Then
            res.ShouldEqual(true);
            found.ShouldEqual(typeof(MyFourthBootstwapper));
        }
Beispiel #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="InfoModule"/> class, with
        /// the provided <paramref name="rootPathProvider"/>, <paramref name="configuration"/>,
        /// <paramref name="environment"/>, <paramref name="typeCatalog"/> and <paramref name="assemblyCatalog"/>.
        /// </summary>
        /// <param name="rootPathProvider">The root path provider.</param>
        /// <param name="configuration">The configuration.</param>
        /// <param name="environment">The environment.</param>
        /// <param name="typeCatalog">The type catalog.</param>
        /// <param name="assemblyCatalog">The assembly catalog.</param>
        public InfoModule(IRootPathProvider rootPathProvider, NancyInternalConfiguration configuration, INancyEnvironment environment, ITypeCatalog typeCatalog, IAssemblyCatalog assemblyCatalog)
            : base("/info")
        {
            this.typeCatalog     = typeCatalog;
            this.assemblyCatalog = assemblyCatalog;

            Get("/", _ =>
            {
                return(View["Info"]);
            });

            Get("/data", _ =>
            {
                dynamic data = new ExpandoObject();

                data.Nancy                       = new ExpandoObject();
                data.Nancy.Version               = string.Format("v{0}", this.GetType().GetTypeInfo().Assembly.GetName().Version.ToString());
                data.Nancy.TracesDisabled        = !environment.GetValue <TraceConfiguration>().DisplayErrorTraces;
                data.Nancy.CaseSensitivity       = StaticConfiguration.CaseSensitive ? "Sensitive" : "Insensitive";
                data.Nancy.RootPath              = rootPathProvider.GetRootPath();
                data.Nancy.Hosting               = GetHosting();
                data.Nancy.BootstrapperContainer = GetBootstrapperContainer();
                data.Nancy.LocatedBootstrapper   = NancyBootstrapperLocator.GetBootstrapperType().ToString();
                data.Nancy.LoadedViewEngines     = GetViewEngines();

                data.Configuration = new Dictionary <string, object>();
                foreach (var propertyInfo in configuration.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
                {
                    var value =
                        propertyInfo.GetValue(configuration, null);

                    data.Configuration[propertyInfo.Name] = (!typeof(IEnumerable).IsAssignableFrom(value.GetType())) ?
                                                            new[] { value.ToString() } :
                    ((IEnumerable <object>)value).Select(x => x.ToString());
                }

                return(this.Response.AsJson((object)data));
            });
        }