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.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Builder;
|
using Microsoft.AspNet.Builder;
|
||||||
|
|
@ -70,9 +71,42 @@ namespace Microsoft.AspNet.Mvc.FunctionalTests
|
||||||
result.Routers);
|
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
|
private class ResultData
|
||||||
{
|
{
|
||||||
|
public Dictionary<string, object> DataTokens { get; set; }
|
||||||
|
|
||||||
public string[] Routers { get; set; }
|
public string[] Routers { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,10 +19,29 @@ namespace BasicWebSite
|
||||||
return GetData();
|
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()
|
private object GetData()
|
||||||
{
|
{
|
||||||
var routers = ActionContext.RouteData.Routers.Select(r => r.GetType().FullName).ToArray();
|
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