Files
Andy Butland 394210a8f7 Uses correct preview cookie same site and secure settings to allow preview mode to flow between links in the preview frame (#18640)
* Uses correct preview cookie same site and secure settings to allow preview mode to flow between links in the preview frame.

* Fixed comment.
2025-03-21 15:20:08 +01:00

54 lines
1.7 KiB
C#

using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Moq;
using NUnit.Framework;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Preview;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Web;
using Umbraco.Cms.Tests.Common.Builders;
using Umbraco.Cms.Tests.Common.Builders.Extensions;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Services;
[TestFixture]
public class PreviewServiceTests
{
[Test]
public async Task TryEnterPreviewAsync_Sets_Expected_Cookie_On_Successful_Token_Generation()
{
var userKey = Guid.NewGuid();
const string Token = "token";
var cookieManagerMock = new Mock<ICookieManager>();
var previewTokenGeneratorMock = new Mock<IPreviewTokenGenerator>();
previewTokenGeneratorMock
.Setup(x => x.GenerateTokenAsync(It.Is<Guid>(y => y == userKey)))
.ReturnsAsync(Attempt<string?>.Succeed(Token));
var previewService = new PreviewService(
cookieManagerMock.Object,
previewTokenGeneratorMock.Object,
Mock.Of<IServiceScopeFactory>(),
Mock.Of<IRequestCache>());
var user = new UserBuilder()
.WithKey(userKey)
.Build();
var result = await previewService.TryEnterPreviewAsync(user);
cookieManagerMock
.Verify(x => x.SetCookieValue(
It.Is<string>(y => y == Constants.Web.PreviewCookieName),
It.Is<string>(y => y == Token),
It.Is<bool>(y => y == true),
It.Is<bool>(y => y == true),
It.Is<string>(y => y == SameSiteMode.None.ToString())));
Assert.IsTrue(result);
}
}