aspnetcore/test/Microsoft.AspNet.Mvc.Razor..../DefaultViewLocationCacheTes...

131 lines
4.3 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
// 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 Microsoft.AspNet.PipelineCore;
using Microsoft.AspNet.Routing;
using Xunit;
namespace Microsoft.AspNet.Mvc.Razor
{
public class DefaultViewLocationCacheTest
{
public static IEnumerable<object[]> CacheEntryData
{
get
{
yield return new[] { new ViewLocationExpanderContext(GetActionContext(), "test") };
var areaActionContext = GetActionContext("controller2", "myarea");
yield return new[] { new ViewLocationExpanderContext(areaActionContext, "test2") };
var actionContext = GetActionContext("controller3", "area3");
var values = new Dictionary<string, string>(StringComparer.Ordinal)
{
{ "culture", "fr" },
{ "theme", "sleek" }
};
var expanderContext = new ViewLocationExpanderContext(actionContext, "test3")
{
Values = values
};
yield return new [] { expanderContext };
}
}
[Theory]
[MemberData(nameof(CacheEntryData))]
public void Get_GeneratesCacheKeyIfItemDoesNotExist(ViewLocationExpanderContext context)
{
// Arrange
var cache = new DefaultViewLocationCache();
// Act
var result = cache.Get(context);
// Assert
Assert.Null(result);
}
[Theory]
[MemberData(nameof(CacheEntryData))]
public void InvokingGetAfterSet_ReturnsCachedItem(ViewLocationExpanderContext context)
{
// Arrange
var cache = new DefaultViewLocationCache();
var value = Guid.NewGuid().ToString();
// Act
cache.Set(context, value);
var result = cache.Get(context);
// Assert
Assert.Equal(value, result);
}
public static IEnumerable<object[]> CacheKeyData
{
get
{
yield return new object[]
{
new ViewLocationExpanderContext(GetActionContext(), "test"),
"test:mycontroller"
};
var areaActionContext = GetActionContext("controller2", "myarea");
yield return new object[]
{
new ViewLocationExpanderContext(areaActionContext, "test2"),
"test2:controller2:myarea"
};
var actionContext = GetActionContext("controller3", "area3");
var values = new Dictionary<string, string>(StringComparer.Ordinal)
{
{ "culture", "fr" },
{ "theme", "sleek" }
};
var expanderContext = new ViewLocationExpanderContext(actionContext, "test3")
{
Values = values
};
yield return new object[]
{
expanderContext,
"test3:controller3:area3:culture:fr:theme:sleek"
};
}
}
[Theory]
[MemberData(nameof(CacheKeyData))]
public void CacheKeyIsComputedBasedOnValuesInExpander(ViewLocationExpanderContext context, string expected)
{
// Act
var result = DefaultViewLocationCache.GenerateKey(context);
// Assert
Assert.Equal(expected, result);
}
public static ActionContext GetActionContext(string controller = "mycontroller",
string area = null)
{
var routeData = new RouteData
{
Values = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase)
};
routeData.Values["controller"] = controller;
if (area != null)
{
routeData.Values["area"] = area;
}
return new ActionContext(new DefaultHttpContext(), routeData, new ActionDescriptor());
}
}
}