* v16 cherry pick of member partial cache invalidator see #19314 # Resolved merge conflic in src/Umbraco.Core/Cache/Refreshers/Implement/MemberCacheRefresher.cs * Take nullmember cacheitems into account
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
using System.Text.RegularExpressions;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
||||
using Microsoft.AspNetCore.Mvc.ViewFeatures;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Cms.Core.Cache;
|
||||
using Umbraco.Cms.Core.Security;
|
||||
using Umbraco.Cms.Core.Web;
|
||||
using Umbraco.Cms.Web.Website.Cache.PartialViewCacheInvalidators;
|
||||
using Umbraco.Extensions;
|
||||
|
||||
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.Website.Routing;
|
||||
|
||||
[TestFixture]
|
||||
public class MemberPartialViewCacheInvalidatorTests
|
||||
{
|
||||
[Test]
|
||||
public void ClearPartialViewCacheItems_Clears_ExpectedItems()
|
||||
{
|
||||
var runTimeCacheMock = new Mock<IAppPolicyCache>();
|
||||
runTimeCacheMock
|
||||
.Setup(x => x.ClearByRegex(It.IsAny<string>()))
|
||||
.Verifiable();
|
||||
var appCaches = new AppCaches(
|
||||
runTimeCacheMock.Object,
|
||||
NoAppCache.Instance,
|
||||
new IsolatedCaches(type => new ObjectCacheAppCache()));
|
||||
var memberPartialViewCacheInvalidator = new MemberPartialViewCacheInvalidator(appCaches);
|
||||
|
||||
var memberIds = new[] { 1, 2, 3 };
|
||||
|
||||
memberPartialViewCacheInvalidator.ClearPartialViewCacheItems(memberIds);
|
||||
|
||||
foreach (var memberId in memberIds)
|
||||
{
|
||||
var regex = $"Umbraco.Web.PartialViewCacheKey.*-m{memberId}-*";
|
||||
runTimeCacheMock
|
||||
.Verify(x => x.ClearByRegex(It.Is<string>(x => x == regex)), Times.Once);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task ClearPartialViewCacheItems_Regex_Matches_CachedKeys()
|
||||
{
|
||||
const int MemberId = 1234;
|
||||
|
||||
var memberManagerMock = new Mock<IMemberManager>();
|
||||
memberManagerMock
|
||||
.Setup(x => x.GetCurrentMemberAsync())
|
||||
.ReturnsAsync(new MemberIdentityUser { Id = MemberId.ToString() });
|
||||
|
||||
var cacheKey = await HtmlHelperRenderExtensions.GenerateCacheKeyForCachedPartialViewAsync(
|
||||
"TestPartial.cshtml",
|
||||
true,
|
||||
Mock.Of<IUmbracoContext>(),
|
||||
true,
|
||||
memberManagerMock.Object,
|
||||
new TestViewModel(),
|
||||
new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary()),
|
||||
null);
|
||||
cacheKey = CoreCacheHelperExtensions.PartialViewCacheKey + cacheKey;
|
||||
Assert.AreEqual("Umbraco.Web.PartialViewCacheKeyTestPartial.cshtml-en-US-0-m1234-", cacheKey);
|
||||
|
||||
var regexForMember = $"Umbraco.Web.PartialViewCacheKey.*-m{MemberId}-*";
|
||||
var regexMatch = Regex.IsMatch(cacheKey, regexForMember);
|
||||
Assert.IsTrue(regexMatch);
|
||||
|
||||
var regexForAnotherMember = $"Umbraco.Web.PartialViewCacheKey.*-m{4321}-*";
|
||||
regexMatch = Regex.IsMatch(cacheKey, regexForAnotherMember);
|
||||
Assert.IsFalse(regexMatch);
|
||||
}
|
||||
|
||||
private class TestViewModel
|
||||
{
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user