/// <summary>
        /// Initializes a new instance of the <see cref="AttributeRoutingConvention"/> class.
        /// </summary>
        /// <param name="model">The <see cref="IEdmModel"/> to be used for parsing the route templates.</param>
        /// <param name="configuration">The <see cref="HttpConfiguration"/> to use for figuring out all the controllers to 
        /// look for a match.</param>
        /// <param name="pathTemplateHandler">The path template handler to be used for parsing the path templates.</param>
        public AttributeRoutingConvention(IEdmModel model, HttpConfiguration configuration,
            IODataPathTemplateHandler pathTemplateHandler)
            : this(model, pathTemplateHandler)
        {
            if (configuration == null)
            {
                throw Error.ArgumentNull("configuration");
            }

            DefaultODataPathHandler odataPathHanlder = pathTemplateHandler as DefaultODataPathHandler;
            if (odataPathHanlder != null)
            {
                odataPathHanlder.ResolverSetttings = configuration.GetResolverSettings();
            }

            Action<HttpConfiguration> oldInitializer = configuration.Initializer;
            bool initialized = false;
            configuration.Initializer = (config) =>
            {
                if (!initialized)
                {
                    initialized = true;
                    oldInitializer(config);
                    IHttpControllerSelector controllerSelector = config.Services.GetHttpControllerSelector();
                    _attributeMappings = BuildAttributeMappings(controllerSelector.GetControllerMapping().Values);
                }
            };
        }
        public void EnableAlternateKeys_Sets_AlternateKeyFlag()
        {
            // Arrange
            HttpConfiguration config = new HttpConfiguration();

            // Act
            config.EnableAlternateKeys(alternateKeys: true);
            ODataUriResolverSetttings resolverSetttings = config.GetResolverSettings();

            // Assert
            Assert.True(resolverSetttings.AlternateKeys);
        }
        public void EnableEnumPrefixFree_Sets_EnumPrefixFreeFlag()
        {
            // Arrange
            HttpConfiguration config = new HttpConfiguration();

            // Act
            config.EnableEnumPrefixFree(enumPrefixFree: true);
            ODataUriResolverSetttings resolverSetttings = config.GetResolverSettings();

            // Assert
            Assert.True(resolverSetttings.EnumPrefixFree);
        }
        public void EnableUnqualifedCall_Sets_UnqualifedCallFlag()
        {
            // Arrange
            HttpConfiguration config = new HttpConfiguration();

            // Act
            config.EnableUnqualifiedNameCall(unqualifiedNameCall: true);
            ODataUriResolverSetttings resolverSetttings = config.GetResolverSettings();

            // Assert
            Assert.True(resolverSetttings.UnqualifiedNameCall);
        }
        public void EnableCaseInsensitive_Sets_KeyWordAndMetadataFlag()
        {
            // Arrange
            HttpConfiguration config = new HttpConfiguration();

            // Act
            config.EnableCaseInsensitive(caseInsensitive: true);
            ODataUriResolverSetttings resolverSetttings = config.GetResolverSettings();

            // Assert
            Assert.True(resolverSetttings.CaseInsensitive);
        }
        public void GetResolverSettings_ReturnDefaultResolverSettings_IfNotSet()
        {
            // Arrange
            HttpConfiguration config = new HttpConfiguration();

            // Act
            ODataUriResolverSetttings resolverSetttings = config.GetResolverSettings();

            // Assert
            Assert.False(resolverSetttings.CaseInsensitive);
            Assert.False(resolverSetttings.UnqualifiedNameCall);
            Assert.False(resolverSetttings.EnumPrefixFree);
        }