Files
ps.ipam/classlib.tests/Helpers/SessionManagerTests.cs

194 lines
5.2 KiB
C#

namespace PS.IPAM.Tests.Helpers;
using FluentAssertions;
using PS.IPAM;
using PS.IPAM.Helpers;
using Xunit;
[Collection("Sequential")]
public class SessionManagerTests : IDisposable
{
public SessionManagerTests()
{
// Ensure clean state before each test
SessionManager.CloseSession();
}
public void Dispose()
{
// Clean up after each test
SessionManager.CloseSession();
}
[Fact]
public void GetSessionStatus_WhenNoSession_ReturnsNoSession()
{
// Arrange
SessionManager.CurrentSession = null;
// Act
var result = SessionManager.GetSessionStatus();
// Assert
result.Should().Be(SessionStatus.NoSession);
}
[Fact]
public void GetSessionStatus_WhenSessionWithNullExpires_ReturnsValid()
{
// Arrange
var session = new Session(AuthType.Token, "test-token", "app", "https://test.com", null, null);
SessionManager.CurrentSession = session;
// Act
var result = SessionManager.GetSessionStatus();
// Assert
result.Should().Be(SessionStatus.Valid);
}
[Fact]
public void GetSessionStatus_WhenSessionNotExpired_ReturnsValid()
{
// Arrange
var futureExpiry = DateTime.Now.AddHours(1);
var session = new Session(AuthType.Credentials, "test-token", "app", "https://test.com", futureExpiry, null);
SessionManager.CurrentSession = session;
// Act
var result = SessionManager.GetSessionStatus();
// Assert
result.Should().Be(SessionStatus.Valid);
}
[Fact]
public void GetSessionStatus_WhenSessionExpired_ReturnsExpired()
{
// Arrange
var pastExpiry = DateTime.Now.AddHours(-1);
var session = new Session(AuthType.Credentials, "test-token", "app", "https://test.com", pastExpiry, null);
SessionManager.CurrentSession = session;
// Act
var result = SessionManager.GetSessionStatus();
// Assert
result.Should().Be(SessionStatus.Expired);
}
[Fact]
public void CreateSessionWithToken_CreatesValidSession()
{
// Arrange
var url = "https://ipam.example.com";
var appId = "myApp";
var token = "static-api-token";
// Act
var session = SessionManager.CreateSessionWithToken(url, appId, token);
// Assert
session.Should().NotBeNull();
session.URL.Should().Be(url);
session.AppID.Should().Be(appId);
session.Token.Should().Be(token);
session.AuthType.Should().Be(AuthType.Token);
session.Expires.Should().BeNull();
session.Credentials.Should().BeNull();
}
[Fact]
public void CreateSessionWithToken_SetsCurrentSession()
{
// Arrange
var url = "https://ipam.example.com";
var appId = "myApp";
var token = "api-token";
// Act
var session = SessionManager.CreateSessionWithToken(url, appId, token);
// Assert
SessionManager.CurrentSession.Should().BeSameAs(session);
}
[Fact]
public void CloseSession_ClearsCurrentSession()
{
// Arrange
SessionManager.CreateSessionWithToken("https://test.com", "app", "token");
SessionManager.CurrentSession.Should().NotBeNull();
// Act
SessionManager.CloseSession();
// Assert
SessionManager.CurrentSession.Should().BeNull();
}
[Fact]
public void CloseSession_WhenNoSession_DoesNotThrow()
{
// Arrange
SessionManager.CurrentSession = null;
// Act
var action = () => SessionManager.CloseSession();
// Assert
action.Should().NotThrow();
}
[Fact]
public void CurrentSession_CanBeSetDirectly()
{
// Arrange
var session = new Session(AuthType.Token, "token", "app", "https://test.com", null, null);
// Act
SessionManager.CurrentSession = session;
// Assert
SessionManager.CurrentSession.Should().BeSameAs(session);
}
[Fact]
public void CreateHttpClient_WithoutIgnoreSsl_ReturnsHttpClient()
{
// Act
using var client = SessionManager.CreateHttpClient(false);
// Assert
client.Should().NotBeNull();
client.Should().BeOfType<HttpClient>();
}
[Fact]
public void CreateHttpClient_WithIgnoreSsl_ReturnsHttpClient()
{
// Act
using var client = SessionManager.CreateHttpClient(true);
// Assert
client.Should().NotBeNull();
client.Should().BeOfType<HttpClient>();
}
[Fact]
public void CreateSessionWithToken_ReplacesExistingSession()
{
// Arrange
SessionManager.CreateSessionWithToken("https://old.com", "oldApp", "oldToken");
// Act
var newSession = SessionManager.CreateSessionWithToken("https://new.com", "newApp", "newToken");
// Assert
SessionManager.CurrentSession.Should().BeSameAs(newSession);
SessionManager.CurrentSession!.URL.Should().Be("https://new.com");
SessionManager.CurrentSession.AppID.Should().Be("newApp");
SessionManager.CurrentSession.Token.Should().Be("newToken");
}
}