using Moq;
using Xunit;
using System.Data;
using Oracle.ManagedDataAccess.Client;
public class CConexionContextTests
{
[Fact]
public void GetConnection_ShouldOpenConnection_WhenConexionIsNull()
{
// Arrange
var mockOracleConnection = new Mock<OracleConnection>();
var mockConexionContext = new Mock<CConexionContext>();
// Simulamos que la cadena de conexión es la esperada
mockConexionContext.Setup(c => c.getStringConnection()).Returns("Data Source=someSource;User Id=someUser;Password=somePass;");
// Simulamos el comportamiento de la conexión Oracle
mockOracleConnection.Setup(c => c.Open()).Verifiable();
mockOracleConnection.Setup(c => c.State).Returns(ConnectionState.Open);
// Act
var result = mockConexionContext.Object.GetConnection(ref mockOracleConnection.Object);
// Assert
mockOracleConnection.Verify(c => c.Open(), Times.Once()); // Verifica que Open haya sido llamado exactamente una vez.
Assert.Equal(ConnectionState.Open, result.State); // Verifica que la conexión esté abierta.
}
[Fact]
public void GetConnection_ShouldReturnExistingConnection_WhenConexionIsNotNull()
{
// Arrange
var mockOracleConnection = new Mock<OracleConnection>();
var mockConexionContext = new Mock<CConexionContext>();
// Configurar la conexión mockeada
mockOracleConnection.Setup(c => c.State).Returns(ConnectionState.Open);
mockConexionContext.Setup(c => c.getStringConnection()).Returns("Data Source=someSource;User Id=someUser;Password=somePass;");
// Act
var result = mockConexionContext.Object.GetConnection(ref mockOracleConnection.Object);
// Assert
Assert.Equal(ConnectionState.Open, result.State); // Verifica que la conexión esté abierta.
mockOracleConnection.Verify(c => c.Open(), Times.Never()); // No debe llamarse a Open, ya que la conexión ya está abierta.
}
}