fengling-console/test/Fengling.AuthService.Tests/AccountIntegrationTests.cs
2026-02-03 15:30:12 +08:00

109 lines
3.7 KiB
C#

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
using FluentAssertions;
using Xunit;
using System.Net;
using System.Net.Http.Json;
using Fengling.AuthService.ViewModels;
namespace Fengling.AuthService.Tests;
public class AccountIntegrationTests : IClassFixture<WebApplicationFactory<Program>>
{
private readonly WebApplicationFactory<Program> _factory;
private readonly HttpClient _client;
public AccountIntegrationTests(WebApplicationFactory<Program> factory)
{
_factory = factory.WithWebHostBuilder(builder =>
{
builder.UseEnvironment("Testing");
});
_client = factory.CreateClient(new WebApplicationFactoryClientOptions
{
AllowAutoRedirect = false
});
}
[Fact]
public async Task Login_Get_ReturnsLoginPage()
{
var response = await _client.GetAsync("/account/login");
response.StatusCode.Should().Be(HttpStatusCode.OK);
var content = await response.Content.ReadAsStringAsync();
content.Should().Contain("欢迎回来");
content.Should().Contain("登录到 Fengling Auth");
content.Should().Contain("用户名");
content.Should().Contain("密码");
}
[Fact]
public async Task Login_Get_WithReturnUrl_ReturnsLoginPageWithReturnUrl()
{
var response = await _client.GetAsync("/account/login?returnUrl=/dashboard");
response.StatusCode.Should().Be(HttpStatusCode.OK);
var content = await response.Content.ReadAsStringAsync();
content.Should().Contain("value=\"/dashboard\"");
}
[Fact]
public async Task Register_Get_ReturnsRegisterPage()
{
var response = await _client.GetAsync("/account/register");
response.StatusCode.Should().Be(HttpStatusCode.OK);
var content = await response.Content.ReadAsStringAsync();
content.Should().Contain("创建账号");
content.Should().Contain("加入 Fengling Auth");
content.Should().Contain("用户名");
content.Should().Contain("邮箱");
content.Should().Contain("密码");
content.Should().Contain("确认密码");
}
[Fact]
public async Task Register_Get_WithReturnUrl_ReturnsRegisterPageWithReturnUrl()
{
var response = await _client.GetAsync("/account/register?returnUrl=/dashboard");
response.StatusCode.Should().Be(HttpStatusCode.OK);
var content = await response.Content.ReadAsStringAsync();
content.Should().Contain("value=\"/dashboard\"");
}
[Fact]
public async Task Dashboard_Index_ReturnsLoginPageWhenNotAuthenticated()
{
var response = await _client.GetAsync("/dashboard");
response.StatusCode.Should().Be(HttpStatusCode.Redirect);
var location = response.Headers.Location.ToString();
location.Should().StartWith("/account/login");
location.Should().Contain("dashboard");
}
[Fact]
public async Task Dashboard_Profile_ReturnsLoginPageWhenNotAuthenticated()
{
var response = await _client.GetAsync("/dashboard/profile");
response.StatusCode.Should().Be(HttpStatusCode.Redirect);
var location = response.Headers.Location.ToString();
location.Should().StartWith("/account/login");
location.Should().Contain("dashboard%2Fprofile");
}
[Fact]
public async Task Dashboard_Settings_ReturnsLoginPageWhenNotAuthenticated()
{
var response = await _client.GetAsync("/dashboard/settings");
response.StatusCode.Should().Be(HttpStatusCode.Redirect);
var location = response.Headers.Location.ToString();
location.Should().StartWith("/account/login");
location.Should().Contain("dashboard%2Fsettings");
}
}