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 { ["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(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")); } }