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

namespace XUnitTest.Rainbow.Services;

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

    [Fact(DisplayName = "FirewallManager_构造_传入Shell和Backup")]
    public void Constructor_WithShellAndBackup()
    {
        var shell = new ShellExecutor();
        var backup = new ConfigBackup();
        var manager = new FirewallManager(shell, backup);
        Assert.Same(shell, manager.Shell);
        Assert.Same(backup, manager.Backup);
    }

    [Fact(DisplayName = "FirewallManager_SetSchedule_设置后GetSchedules可见")]
    public void SetSchedule_ThenGetSchedules_Visible()
    {
        var manager = new FirewallManager();
        manager.SetSchedule(1, "08:00", "18:00", 127);

        var schedules = manager.GetSchedules();
        Assert.True(schedules.ContainsKey(1));
        Assert.Equal("08:00", schedules[1].StartTime);
        Assert.Equal("18:00", schedules[1].EndTime);
        Assert.Equal(127, schedules[1].WeekDays);
    }

    [Fact(DisplayName = "FirewallManager_SetSchedule_空时间移除调度")]
    public void SetSchedule_EmptyTime_Removed()
    {
        var manager = new FirewallManager();
        manager.SetSchedule(1, "08:00", "18:00");
        manager.SetSchedule(1, "", "");

        var schedules = manager.GetSchedules();
        Assert.False(schedules.ContainsKey(1));
    }

    [Fact(DisplayName = "FirewallManager_RemoveSchedule_移除存在项")]
    public void RemoveSchedule_Existing_Removed()
    {
        var manager = new FirewallManager();
        manager.SetSchedule(1, "08:00", "18:00");
        manager.RemoveSchedule(1);

        Assert.False(manager.GetSchedules().ContainsKey(1));
    }

    [Fact(DisplayName = "FirewallManager_RemoveSchedule_不存在的项不抛异常")]
    public void RemoveSchedule_NonExisting_NoThrow()
    {
        var manager = new FirewallManager();
        var ex = Record.Exception(() => manager.RemoveSchedule(999));
        Assert.Null(ex);
    }

    [Fact(DisplayName = "FirewallManager_SaveRules_返回待实现")]
    public async Task SaveRules_ReturnsNotImplemented()
    {
        var manager = new FirewallManager();
        var result = await manager.SaveRulesAsync();

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