Files
StoreWeb/Tests/Store.Users.Tests/DevelopmentTokenTests.cs
T
2026-10-29 11:34:35 +08:00

52 lines
2.6 KiB
C#

using MAX.Framework.DependencyInjection;
using MAX.Framework.Security;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace Store.Users.Tests;
public sealed class DevelopmentTokenTests
{
[Theory]
[InlineData("Development", true, "test-fixed-token", "test-fixed-token", "admin", "admin")]
[InlineData("Development", true, "incorrect-token", "test-fixed-token", "admin", "")]
[InlineData("Development", true, "TEST-FIXED-TOKEN", "test-fixed-token", "admin", "")]
[InlineData("Development", false, "test-fixed-token", "test-fixed-token", "admin", "")]
[InlineData("Production", true, "test-fixed-token", "test-fixed-token", "admin", "")]
[InlineData("Staging", true, "test-fixed-token", "test-fixed-token", "admin", "")]
[InlineData("Development", true, "test-fixed-token", "", "admin", "")]
[InlineData("Development", true, "test-fixed-token", "test-fixed-token", "", "")]
public async Task FixedToken_OnlyAuthenticatesWhenConfiguredAndEnabledInDevelopment(
string environment, bool enabled, string token, string configuredToken, string userName, string expectedUser)
{
var builder = WebApplication.CreateBuilder(new WebApplicationOptions { EnvironmentName = environment });
builder.WebHost.UseTestServer();
builder.Logging.ClearProviders();
builder.Configuration.AddInMemoryCollection(new Dictionary<string, string?>
{
["TokenAuth:DevelopmentToken:Enabled"] = enabled.ToString(),
["TokenAuth:DevelopmentToken:Token"] = configuredToken,
["TokenAuth:DevelopmentToken:UserName"] = userName
});
using var db = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.Sqlite, "Data Source=:memory:").Build();
builder.Services.AddSingleton<IFreeSql>(db);
builder.Services.AddStoreHubTokenAuth(builder.Configuration);
await using var app = builder.Build();
app.UseAuthentication();
app.MapGet("/identity", (ICurrentUser user) =>
user.IsAuthenticated ? user.UserName : "");
await app.StartAsync();
using var client = app.GetTestClient();
client.DefaultRequestHeaders.Authorization = new("Bearer", token);
Assert.Equal(expectedUser, await client.GetStringAsync("/identity"));
// 固定测试凭据不创建数据库会话,重复请求的结果保持一致。
Assert.Equal(expectedUser, await client.GetStringAsync("/identity"));
}
}