public void CreateRoute_IfBuilderDataTokensIsNotNull_UpdatesDataTokensFromPropertyWhenBuilding() { // Arrange TRouteDictionary existingDataTokens = new TRouteDictionaryConcrete(); string existingDataTokenKey = "ExistingDataTokenKey"; object existingDataTokenValue = "ExistingDataToken"; existingDataTokens.Add(existingDataTokenKey, existingDataTokenValue); string conflictingDataTokenKey = "ConflictingDataTokenKey"; object oldConflictingDataTokenValue = "OldConflictingDataToken"; existingDataTokens.Add(conflictingDataTokenKey, oldConflictingDataTokenValue); TRouteDictionary additionalDataTokens = new TRouteDictionaryConcrete(); string additionalDataTokenKey = "NewDataTokenKey"; string additionalDataTokenValue = "NewDataToken"; additionalDataTokens.Add(additionalDataTokenKey, additionalDataTokenValue); string newConflictingDataTokenValue = "NewConflictingDataToken"; additionalDataTokens.Add(conflictingDataTokenKey, newConflictingDataTokenValue); Mock <RouteFactoryAttribute> productMock = CreateProductUnderTestMock(); productMock.SetupGet(p => p.DataTokens).Returns(additionalDataTokens); IDirectRouteFactory product = productMock.Object; RouteEntry expectedEntry = CreateEntry(); TRouteDictionary dataTokens = null; IDirectRouteBuilder builder = null; builder = CreateBuilder( () => { dataTokens = builder.DataTokens; return(null); } ); builder.DataTokens = existingDataTokens; DirectRouteFactoryContext context = CreateContext((i) => builder); // Act RouteEntry ignore = product.CreateRoute(context); // Assert Assert.Same(existingDataTokens, dataTokens); Assert.Equal(3, dataTokens.Count); Assert.True(dataTokens.ContainsKey(existingDataTokenKey)); Assert.Same(existingDataTokenValue, dataTokens[existingDataTokenKey]); Assert.True(dataTokens.ContainsKey(conflictingDataTokenKey)); Assert.Same(newConflictingDataTokenValue, dataTokens[conflictingDataTokenKey]); Assert.True(dataTokens.ContainsKey(additionalDataTokenKey)); Assert.Same(additionalDataTokenValue, dataTokens[additionalDataTokenKey]); }
public void BuildRoute_ValidatesConstraintType_InvalidType() { // Arrange var actions = GetActions(); var builder = new DirectRouteBuilder(actions, targetIsAction: true); var constraint = new Uri("http://localhost/"); var constraints = new TRouteValueDictionary(); constraints.Add("custom", constraint); builder.Constraints = constraints; builder.Template = "c/{id}"; #if ASPNETWEBAPI string expectedMessage = "The constraint entry 'custom' on the route with route template 'c/{id}' " + "must have a string value or be of a type which implements 'System.Web.Http.Routing.IHttpRouteConstraint'."; #else string expectedMessage = "The constraint entry 'custom' on the route with route template 'c/{id}' " + "must have a string value or be of a type which implements 'System.Web.Routing.IRouteConstraint'."; #endif // Act & Assert Assert.Throws<InvalidOperationException>(() => builder.Build(), expectedMessage); }
public void BuildRoute_ValidatesConstraintType_InvalidType() { // Arrange var actions = GetActions(); var builder = new DirectRouteBuilder(actions, targetIsAction: true); var constraint = new Uri("http://localhost/"); var constraints = new TRouteValueDictionary(); constraints.Add("custom", constraint); builder.Constraints = constraints; builder.Template = "c/{id}"; #if ASPNETWEBAPI string expectedMessage = "The constraint entry 'custom' on the route with route template 'c/{id}' " + "must have a string value or be of a type which implements 'System.Web.Http.Routing.IHttpRouteConstraint'."; #else string expectedMessage = "The constraint entry 'custom' on the route with route template 'c/{id}' " + "must have a string value or be of a type which implements 'System.Web.Routing.IRouteConstraint'."; #endif // Act & Assert Assert.Throws <InvalidOperationException>(() => builder.Build(), expectedMessage); }
public void BuildRoute_ValidatesConstraintType_StringRegex() { // Arrange var actions = GetActions(); var builder = new DirectRouteBuilder(actions, targetIsAction: true); var constraint = "product|products"; var constraints = new TRouteValueDictionary(); constraints.Add("custom", constraint); builder.Constraints = constraints; // Act var routeEntry = builder.Build(); // Assert Assert.NotNull(routeEntry.Route.Constraints["custom"]); }
public void BuildRoute_ValidatesConstraintType_StringRegex() { // Arrange var actions = GetActions(); var builder = new DirectRouteBuilder(actions, targetIsAction: true); var constraint = "product|products"; var constraints = new TRouteValueDictionary(); constraints.Add("custom", constraint); builder.Constraints = constraints; // Act var routeEntry = builder.Build(); // Assert Assert.NotNull(routeEntry.Route.Constraints["custom"]); }
public void CreateRoute_IfBuilderDataTokensIsNotNull_UpdatesDataTokensFromPropertyWhenBuilding() { // Arrange TRouteDictionary existingDataTokens = new TRouteDictionaryConcrete(); string existingDataTokenKey = "ExistingDataTokenKey"; object existingDataTokenValue = "ExistingDataToken"; existingDataTokens.Add(existingDataTokenKey, existingDataTokenValue); string conflictingDataTokenKey = "ConflictingDataTokenKey"; object oldConflictingDataTokenValue = "OldConflictingDataToken"; existingDataTokens.Add(conflictingDataTokenKey, oldConflictingDataTokenValue); TRouteDictionary additionalDataTokens = new TRouteDictionaryConcrete(); string additionalDataTokenKey = "NewDataTokenKey"; string additionalDataTokenValue = "NewDataToken"; additionalDataTokens.Add(additionalDataTokenKey, additionalDataTokenValue); string newConflictingDataTokenValue = "NewConflictingDataToken"; additionalDataTokens.Add(conflictingDataTokenKey, newConflictingDataTokenValue); Mock<RouteFactoryAttribute> productMock = CreateProductUnderTestMock(); productMock.SetupGet(p => p.DataTokens).Returns(additionalDataTokens); IDirectRouteFactory product = productMock.Object; RouteEntry expectedEntry = CreateEntry(); TRouteDictionary dataTokens = null; IDirectRouteBuilder builder = null; builder = CreateBuilder(() => { dataTokens = builder.DataTokens; return null; }); builder.DataTokens = existingDataTokens; DirectRouteFactoryContext context = CreateContext((i) => builder); // Act RouteEntry ignore = product.CreateRoute(context); // Assert Assert.Same(existingDataTokens, dataTokens); Assert.Equal(3, dataTokens.Count); Assert.True(dataTokens.ContainsKey(existingDataTokenKey)); Assert.Same(existingDataTokenValue, dataTokens[existingDataTokenKey]); Assert.True(dataTokens.ContainsKey(conflictingDataTokenKey)); Assert.Same(newConflictingDataTokenValue, dataTokens[conflictingDataTokenKey]); Assert.True(dataTokens.ContainsKey(additionalDataTokenKey)); Assert.Same(additionalDataTokenValue, dataTokens[additionalDataTokenKey]); }