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");
}
}
|