refactor: 枚举移入Models目录,命名空间更新为Rainbow.Entity.Models
大石头 authored at 2026-07-02 12:54:58
1.94 KiB
RainbowBridge
using Rainbow.Services;
using Xunit;

namespace XUnitTest.Rainbow.Services;

public class PppManagerTests
{
    [Fact(DisplayName = "PppManager_构造_无参数创建成功")]
    public void Constructor_NoParams_Success()
    {
        var manager = new PppManager();
        Assert.NotNull(manager);
        Assert.NotNull(manager.Log);
    }

    [Fact(DisplayName = "PppManager_构造_传入Shell")]
    public void Constructor_WithShell()
    {
        var shell = new ShellExecutor();
        var manager = new PppManager(shell);
        Assert.Same(shell, manager.Shell);
    }

    [Fact(DisplayName = "PppManager_GetStatus_返回状态对象")]
    public async Task GetStatus_ReturnsStatus()
    {
        var manager = new PppManager(new ShellExecutor());
        var status = await manager.GetStatusAsync();

        Assert.NotNull(status);
        // IsConnected 取决于数据库中是否有启用账号,只验证对象不为空
    }

    [Fact(DisplayName = "PppManager_Connect_NullShell返回Fail")]
    public async Task Connect_NullShell_ReturnsFail()
    {
        var manager = new PppManager();
        var result = await manager.ConnectAsync();

        Assert.NotNull(result);
        Assert.False(result.Success);
        Assert.Equal(-1, result.ExitCode);
    }

    [Fact(DisplayName = "PppManager_Disconnect_NullShell返回Fail")]
    public async Task Disconnect_NullShell_ReturnsFail()
    {
        var manager = new PppManager();
        var result = await manager.DisconnectAsync();

        Assert.NotNull(result);
        Assert.False(result.Success);
        Assert.Equal(-1, result.ExitCode);
    }

    [Fact(DisplayName = "PppManager_StartStopAutoReconnect_无异常")]
    public void StartStopAutoReconnect_NoThrow()
    {
        var manager = new PppManager();
        var ex = Record.Exception(() =>
        {
            manager.StartAutoReconnect(30);
            manager.StopAutoReconnect();
        });
        Assert.Null(ex);
    }
}