194 lines
5.1 KiB
C#
194 lines
5.1 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 TestSession_WhenNoSession_ReturnsNoToken()
|
|
{
|
|
// Arrange
|
|
SessionManager.CurrentSession = null;
|
|
|
|
// Act
|
|
var result = SessionManager.TestSession();
|
|
|
|
// Assert
|
|
result.Should().Be("NoToken");
|
|
}
|
|
|
|
[Fact]
|
|
public void TestSession_WhenSessionWithNullExpires_ReturnsValid()
|
|
{
|
|
// Arrange
|
|
var session = new Session(AuthType.token, "test-token", "app", "https://test.com", null, null);
|
|
SessionManager.CurrentSession = session;
|
|
|
|
// Act
|
|
var result = SessionManager.TestSession();
|
|
|
|
// Assert
|
|
result.Should().Be("Valid");
|
|
}
|
|
|
|
[Fact]
|
|
public void TestSession_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.TestSession();
|
|
|
|
// Assert
|
|
result.Should().Be("Valid");
|
|
}
|
|
|
|
[Fact]
|
|
public void TestSession_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.TestSession();
|
|
|
|
// Assert
|
|
result.Should().Be("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");
|
|
}
|
|
}
|