节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
4.56 KiB
Stardust
using System;
using Stardust.Data.Nodes;
using Stardust.Services;
using Xunit;

namespace ServerTest.Nodes;

/// <summary>域名供应商管理单元测试。覆盖实体 CRUD、搜索和 IDnsConfig 接口实现</summary>
public class DomainProviderTests
{
    [Fact]
    public void Implements_IDnsConfig()
    {
        var entity = new DomainProvider();

        Assert.IsAssignableFrom<IDnsConfig>(entity);

        // 验证接口属性映射
        entity.AppKey = "test-key";
        entity.AppSecret = "test-secret";
        entity.Domain = "example.com";
        entity.Endpoint = "https://api.example.com";

        var config = (IDnsConfig)entity;
        Assert.Equal("test-key", config.AppKey);
        Assert.Equal("test-secret", config.AppSecret);
        Assert.Equal("example.com", config.Domain);
        Assert.Equal("https://api.example.com", config.Endpoint);
    }

    [Fact]
    public void Insert_ValidData_Succeeds()
    {
        var entity = new DomainProvider
        {
            Name = $"test-dp-{Guid.NewGuid():n}"[..20],
            Provider = "Aliyun",
            AppKey = "test-access-key",
            AppSecret = "test-secret-key",
            Domain = "test.newlifex.com",
            Enable = true,
        };

        try
        {
            var count = entity.Insert();

            Assert.True(count > 0);
            Assert.True(entity.Id > 0);

            // 验证持久化
            var found = DomainProvider.FindById(entity.Id);
            Assert.NotNull(found);
            Assert.Equal("Aliyun", found.Provider);
            Assert.Equal("test-access-key", found.AppKey);
            Assert.True(found.Enable);
        }
        finally
        {
            entity.Delete();
        }
    }

    [Fact]
    public void Search_ByDomain_FindsResults()
    {
        var name = $"test-dp-search-{Guid.NewGuid():n}"[..20];
        var entity = new DomainProvider
        {
            Name = name,
            Provider = "Aliyun",
            AppKey = "search-key",
            AppSecret = "search-secret",
            Domain = "search.newlifex.com",
            Enable = true,
        };

        try
        {
            entity.Insert();

            // 按域名搜索
            var list = DomainProvider.Search("search.newlifex.com", null, DateTime.MinValue, DateTime.MinValue, null, null);
            Assert.Contains(list, e => e.Name == name);

            // 按启用状态搜索
            list = DomainProvider.Search(null, true, DateTime.MinValue, DateTime.MinValue, null, null);
            Assert.Contains(list, e => e.Name == name);

            // 按禁用状态搜索,不应包含已启用的记录
            list = DomainProvider.Search(null, false, DateTime.MinValue, DateTime.MinValue, null, null);
            Assert.DoesNotContain(list, e => e.Name == name);
        }
        finally
        {
            entity.Delete();
        }
    }

    [Theory]
    [InlineData("Aliyun")]
    [InlineData("TencentCloud")]
    [InlineData("UCloud")]
    [InlineData("AWS")]
    [InlineData("Cloudflare")]
    public void Provider_CommonValues_Accepted(String provider)
    {
        var entity = new DomainProvider
        {
            Name = $"test-{provider}-{Guid.NewGuid():n}"[..20],
            Provider = provider,
            AppKey = "key",
            AppSecret = "secret",
            Domain = $"{provider.ToLower()}.test.com",
            Enable = true,
        };

        try
        {
            entity.Insert();
            Assert.True(entity.Id > 0);

            var found = DomainProvider.FindById(entity.Id);
            Assert.NotNull(found);
            Assert.Equal(provider, found.Provider);
        }
        finally
        {
            entity.Delete();
        }
    }

    [Fact]
    public void Update_ModifyCredentials_Succeeds()
    {
        var entity = new DomainProvider
        {
            Name = $"test-dp-upd-{Guid.NewGuid():n}"[..20],
            Provider = "Aliyun",
            AppKey = "original-key",
            AppSecret = "original-secret",
            Domain = "upd.test.com",
            Enable = true,
        };

        try
        {
            entity.Insert();

            // 修改凭据
            entity.AppKey = "updated-key";
            entity.AppSecret = "updated-secret";
            entity.Update();

            // 验证持久化
            var found = DomainProvider.FindById(entity.Id);
            Assert.NotNull(found);
            Assert.Equal("updated-key", found.AppKey);
            Assert.Equal("updated-secret", found.AppSecret);
        }
        finally
        {
            entity.Delete();
        }
    }
}