Files
Umbraco-CMS/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Cache/DistributedCacheExtensionsTests.cs
Andy Butland 118b26a8b9 Clear member cache by older user name when member user name is updated (16) (#19690)
* Pass notification state to cache refreshers.
Pass previous user name into member saved notification state and use when refreshing cache to clear the member by keys based on this.

* Fixed issue raised in code review.

* Fixed casing for state key.

* Added removed parameter to unit tests.

* Fix breaking change.
2025-07-08 11:28:11 +02:00

72 lines
2.5 KiB
C#

// Copyright (c) Umbraco.
// See LICENSE for more details.
using NUnit.Framework;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Notifications;
using Umbraco.Cms.Tests.Common.Builders;
using Umbraco.Cms.Tests.Common.Builders.Extensions;
using Umbraco.Extensions;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Cache;
[TestFixture]
public class DistributedCacheExtensionsTests
{
[TestCase(true)]
[TestCase(false)]
public void Member_GetPayloads_CorrectlyCreatesPayloads(bool removed)
{
var member1Key = Guid.NewGuid();
var member2Key = Guid.NewGuid();
var member3Key = Guid.NewGuid();
var members = new List<IMember>()
{
CreateMember(1, member1Key, "Fred", "fred", "fred@test.com"),
CreateMember(1, member1Key, "Fred", "fred", "fred@test.com"),
CreateMember(2, member2Key, "Sally", "sally", "sally@test.com"),
CreateMember(3, member3Key, "Jane", "jane", "jane@test.com"),
};
var state = new Dictionary<string, object>
{
{
MemberSavedNotification.PreviousUsernameStateKey,
new Dictionary<Guid, string> { { member3Key, "janeold" } }
},
};
var payloads = DistributedCacheExtensions.GetPayloads(members, state, removed);
Assert.AreEqual(3, payloads.Count());
var payloadForFred = payloads.First();
Assert.AreEqual("fred", payloadForFred.Username);
Assert.AreEqual(1, payloadForFred.Id);
Assert.IsNull(payloadForFred.PreviousUsername);
Assert.AreEqual(removed, payloadForFred.Removed);
var payloadForSally = payloads.Skip(1).First();
Assert.AreEqual("sally", payloadForSally.Username);
Assert.AreEqual(2, payloadForSally.Id);
Assert.IsNull(payloadForSally.PreviousUsername);
Assert.AreEqual(removed, payloadForSally.Removed);
var payloadForJane = payloads.Skip(2).First();
Assert.AreEqual("jane", payloadForJane.Username);
Assert.AreEqual(3, payloadForJane.Id);
Assert.AreEqual("janeold", payloadForJane.PreviousUsername);
Assert.AreEqual(removed, payloadForJane.Removed);
}
private static IMember CreateMember(int id, Guid key, string name, string username, string email)
=> new MemberBuilder()
.AddMemberType()
.Done()
.WithId(id)
.WithKey(key)
.WithName(name)
.WithLogin(username, "password")
.WithEmail(email)
.Build();
}