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

namespace XUnitTest.Rainbow.Controllers;

public class DnsBlacklistControllerTests
{
    private static DnsBlacklistController CreateController()
    {
        var shell = new ShellExecutor();
        var adapter = new DnsmasqAdapter(shell);
        var manager = new DnsmasqManager(shell, adapter);
        return new DnsBlacklistController(manager);
    }

    [Fact(DisplayName = "DnsBlacklist_GetList_无过滤返回列表")]
    public void GetList_NoFilter_ReturnsList()
    {
        var controller = CreateController();
        var result = controller.GetList().Result as OkObjectResult;

        Assert.NotNull(result);
        Assert.Equal(200, result.StatusCode);
        Assert.IsAssignableFrom<IList<DnsBlacklist>>(result.Value);
    }

    [Fact(DisplayName = "DnsBlacklist_GetCategories_返回分类摘要")]
    public void GetCategories_ReturnsSummary()
    {
        var controller = CreateController();
        var result = controller.GetCategories() as OkObjectResult;

        Assert.NotNull(result);
        Assert.Equal(200, result.StatusCode);
    }

    [Fact(DisplayName = "DnsBlacklist_Add_插入成功Source为User")]
    public void Add_InsertsWithSourceUser()
    {
        var controller = CreateController();
        var item = new DnsBlacklist
        {
            Domain = "blocked" + DateTime.Now.Millisecond + ".com",
            Category = "Custom",
            Enable = true
        };
        var result = controller.Add(item) as OkObjectResult;

        Assert.NotNull(result);
        Assert.Equal(200, result.StatusCode);
    }

    [Fact(DisplayName = "DnsBlacklist_Delete_不存在返回NotFound")]
    public void Delete_NotFound()
    {
        var controller = CreateController();
        var result = controller.Delete(99999);

        Assert.IsType<NotFoundResult>(result);
    }
}