aspnetcore/test/Microsoft.AspNetCore.Rewrit.../UrlActions/ChangeCookieActionTests.cs

67 lines
2.4 KiB
C#

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Rewrite.Internal.UrlActions;
using Microsoft.Net.Http.Headers;
using Xunit;
namespace Microsoft.AspNetCore.Rewrite.Tests.UrlActions
{
public class ChangeCookieActionTests
{
[Fact]
public void SetsCookie()
{
var now = DateTimeOffset.UtcNow;
var context = new RewriteContext { HttpContext = new DefaultHttpContext() };
var action = new ChangeCookieAction("Cookie", () => now)
{
Value = "Chocolate Chip",
Domain = "contoso.com",
Lifetime = TimeSpan.FromMinutes(1440),
Path = "/recipes",
Secure = true,
HttpOnly = true
};
action.ApplyAction(context, null, null);
var cookieHeaders = context.HttpContext.Response.Headers[HeaderNames.SetCookie];
var header = Assert.Single(cookieHeaders);
Assert.Equal($"Cookie=Chocolate%20Chip; expires={HeaderUtilities.FormatDate(now.AddMinutes(1440))}; domain=contoso.com; path=/recipes; secure; samesite=lax; httponly", header);
}
[Fact]
public void ZeroLifetime()
{
var context = new RewriteContext { HttpContext = new DefaultHttpContext() };
var action = new ChangeCookieAction("Cookie")
{
Value = "Chocolate Chip",
};
action.ApplyAction(context, null, null);
var cookieHeaders = context.HttpContext.Response.Headers[HeaderNames.SetCookie];
var header = Assert.Single(cookieHeaders);
Assert.Equal($"Cookie=Chocolate%20Chip; samesite=lax", header);
}
[Fact]
public void UnsetCookie()
{
var context = new RewriteContext { HttpContext = new DefaultHttpContext() };
var action = new ChangeCookieAction("Cookie");
action.ApplyAction(context, null, null);
var cookieHeaders = context.HttpContext.Response.Headers[HeaderNames.SetCookie];
var header = Assert.Single(cookieHeaders);
Assert.Equal($"Cookie=; samesite=lax", header);
}
}
}