public void AddBaseRouteExclusion_DoesNotThrow_IfDuplicateItemAdded()
        {
            // Act
            var mobileAppConfig = new MobileAppConfiguration();

            mobileAppConfig.AddBaseRouteExclusion("MobileApp");
            mobileAppConfig.AddBaseRouteExclusion("MobileApp");
            mobileAppConfig.AddBaseRouteExclusion("mobileapp");

            // Assert
            Assert.Equal(1, mobileAppConfig.BaseRouteConstraints.Count);

            // verify that comparisons are case-insensitive
            Assert.True(mobileAppConfig.BaseRouteConstraints.Contains("MobileApp"));
            Assert.True(mobileAppConfig.BaseRouteConstraints.Contains("mobileapp"));
            Assert.True(mobileAppConfig.BaseRouteConstraints.Contains("MOBILEAPP"));
        }
        public void MapApiControllers_AppliesControllerExclusions()
        {
            // Arrange
            var typeList = new[]
            {
                typeof(Mobile1Controller),
                typeof(Mobile2Controller),
                typeof(Mobile3Controller)
            };

            HttpConfiguration config = new HttpConfiguration();

            SetupMockControllerList(config, typeList);

            // Act
            var mobileAppConfig = new MobileAppConfiguration()
                                  .MapApiControllers();

            mobileAppConfig.AddBaseRouteExclusion("Mobile2");
            // verify comparisons are case-insensitive
            mobileAppConfig.AddBaseRouteExclusion("MOBILE3");
            mobileAppConfig.ApplyTo(config);

            // Assert
            Assert.Equal(1, config.Routes.Count);

            var route = config.Routes[0];

            Assert.Equal("api/{controller}/{id}", route.RouteTemplate);
            Assert.Equal(1, route.Constraints.Count);
            var constraint = route.Constraints["controller"] as SetRouteConstraint <string>;

            Assert.NotNull(constraint);
            Assert.Equal(false, constraint.Excluded);
            Assert.Equal(new[] { "Mobile1" }, constraint.Set);
        }
        public void MapApiControllers_AppliesControllerExclusions()
        {
            // Arrange
            var typeList = new[]
            {
                typeof(Mobile1Controller),
                typeof(Mobile2Controller),
                typeof(Mobile3Controller)
            };

            HttpConfiguration config = new HttpConfiguration();
            SetupMockControllerList(config, typeList);

            // Act
            var mobileAppConfig = new MobileAppConfiguration()
                .MapApiControllers();

            mobileAppConfig.AddBaseRouteExclusion("Mobile2");
            // verify comparisons are case-insensitive
            mobileAppConfig.AddBaseRouteExclusion("MOBILE3");
            mobileAppConfig.ApplyTo(config);

            // Assert
            Assert.Equal(1, config.Routes.Count);

            var route = config.Routes[0];
            Assert.Equal("api/{controller}/{id}", route.RouteTemplate);
            Assert.Equal(1, route.Constraints.Count);
            var constraint = route.Constraints["controller"] as SetRouteConstraint<string>;
            Assert.NotNull(constraint);
            Assert.Equal(false, constraint.Excluded);
            Assert.Equal(new[] { "Mobile1" }, constraint.Set);
        }
        public void AddBaseRouteExclusion_DoesNotThrow_IfDuplicateItemAdded()
        {
            // Act
            var mobileAppConfig = new MobileAppConfiguration();
            mobileAppConfig.AddBaseRouteExclusion("MobileApp");
            mobileAppConfig.AddBaseRouteExclusion("MobileApp");
            mobileAppConfig.AddBaseRouteExclusion("mobileapp");

            // Assert
            Assert.Equal(1, mobileAppConfig.BaseRouteConstraints.Count);

            // verify that comparisons are case-insensitive
            Assert.True(mobileAppConfig.BaseRouteConstraints.Contains("MobileApp"));
            Assert.True(mobileAppConfig.BaseRouteConstraints.Contains("mobileapp"));
            Assert.True(mobileAppConfig.BaseRouteConstraints.Contains("MOBILEAPP"));
        }