Adding a functional test that modifies data tokens
Tracked by aspnet/Routing#116 The product support for this feature is in already this change just adds a test verifying the scenario.
This commit is contained in:
parent
5fd453f07d
commit
ca92700a6f
|
|
@ -2,6 +2,7 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNet.Builder;
|
||||
|
|
@ -70,9 +71,42 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests
|
|||
result.Routers);
|
||||
}
|
||||
|
||||
// Verifies that components in the MVC pipeline can modify datatokens
|
||||
// without impacting any static data.
|
||||
//
|
||||
// This does two request, to verify that the data in the route is not modified
|
||||
[Fact]
|
||||
public async Task RouteData_DataTokens_FilterCanSetDataTokens()
|
||||
{
|
||||
// Arrange
|
||||
var server = TestServer.Create(_services, _app);
|
||||
var client = server.CreateClient();
|
||||
|
||||
var response = await client.GetAsync("http://localhost/Routing/DataTokens");
|
||||
|
||||
// Guard
|
||||
var body = await response.Content.ReadAsStringAsync();
|
||||
var result = JsonConvert.DeserializeObject<ResultData>(body);
|
||||
Assert.Single(result.DataTokens);
|
||||
Assert.Single(result.DataTokens, kvp => kvp.Key == "actionName" && ((string)kvp.Value) == "DataTokens");
|
||||
|
||||
// Act
|
||||
response = await client.GetAsync("http://localhost/Routing/Conventional");
|
||||
|
||||
// Assert
|
||||
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
||||
|
||||
body = await response.Content.ReadAsStringAsync();
|
||||
result = JsonConvert.DeserializeObject<ResultData>(body);
|
||||
|
||||
Assert.Single(result.DataTokens);
|
||||
Assert.Single(result.DataTokens, kvp => kvp.Key == "actionName" && ((string)kvp.Value) == "Conventional");
|
||||
}
|
||||
|
||||
private class ResultData
|
||||
{
|
||||
public Dictionary<string, object> DataTokens { get; set; }
|
||||
|
||||
public string[] Routers { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,10 +19,29 @@ namespace BasicWebSite
|
|||
return GetData();
|
||||
}
|
||||
|
||||
public object DataTokens()
|
||||
{
|
||||
return GetData();
|
||||
}
|
||||
|
||||
public override void OnActionExecuting(ActionExecutingContext context)
|
||||
{
|
||||
if (!context.RouteData.DataTokens.ContainsKey("actionName"))
|
||||
{
|
||||
context.RouteData.DataTokens.Add("actionName", context.ActionDescriptor.Name);
|
||||
}
|
||||
}
|
||||
|
||||
private object GetData()
|
||||
{
|
||||
var routers = ActionContext.RouteData.Routers.Select(r => r.GetType().FullName).ToArray();
|
||||
return new { Routers = routers };
|
||||
var dataTokens = ActionContext.RouteData.DataTokens;
|
||||
|
||||
return new
|
||||
{
|
||||
DataTokens = dataTokens,
|
||||
Routers = routers
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue