* 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.
72 lines
2.5 KiB
C#
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();
|
|
}
|