feat: 初始化NewLife Studio项目,完成基础框架与数据管理模块
何炳宏 authored at 2026-05-26 12:09:09
2.40 KiB
NewLife.Studio
using NewLife.Studio.Core.DTOs;
using NewLife.Studio.Data.Providers.SQLite;
using Xunit;

namespace NewLife.Studio.Data.Tests;

public class SQLiteProviderTests
{
    private static ConnectionInfo CreateInMemoryConnection() => new()
    {
        Name = "test-sqlite",
        ConnectionString = "Data Source=:memory:",
        ProviderType = "sqlite"
    };

    [Fact]
    public void ProviderName_Returns_SQLite()
    {
        var provider = new SQLiteProvider();

        var result = provider.ProviderName;

        Assert.Equal("SQLite", result);
    }

    [Fact]
    public void SupportedSchemes_Contains_Sqlite()
    {
        var provider = new SQLiteProvider();

        var schemes = provider.SupportedSchemes;

        Assert.Contains("sqlite", schemes);
    }

    [Fact]
    public void SupportedSchemes_Contains_Sqlite3()
    {
        var provider = new SQLiteProvider();

        var schemes = provider.SupportedSchemes;

        Assert.Contains("sqlite3", schemes);
    }

    [Fact]
    public async Task TestConnectionAsync_WithInMemoryConnection_ReturnsTrue()
    {
        var provider = new SQLiteProvider();
        var conn = CreateInMemoryConnection();

        var result = await provider.TestConnectionAsync(conn);

        Assert.True(result);
    }

    [Fact]
    public async Task TestConnectionAsync_WithInvalidPath_ReturnsFalse()
    {
        var provider = new SQLiteProvider();
        var conn = new ConnectionInfo
        {
            Name = "invalid",
            ConnectionString = @"C:\nonexistent\path\to\missing.db",
            ProviderType = "sqlite"
        };

        var result = await provider.TestConnectionAsync(conn);

        Assert.False(result);
    }

    [Fact]
    public async Task OpenSessionAsync_Returns_IDbSession_WithCorrectConnection()
    {
        var provider = new SQLiteProvider();
        var conn = CreateInMemoryConnection();

        var session = await provider.OpenSessionAsync(conn);

        Assert.NotNull(session);
        Assert.Same(conn, session.Connection);
        Assert.False(string.IsNullOrEmpty(session.SessionId));
    }

    [Fact]
    public async Task OpenSessionAsync_ReturnsNotOpen_BeforeAnyOperation()
    {
        var provider = new SQLiteProvider();
        var conn = CreateInMemoryConnection();

        var session = await provider.OpenSessionAsync(conn);

        Assert.False(session.IsOpen, "Session should not be open until first operation");
    }
}