Refactored subnet object methods and enhanced related documentation
This commit is contained in:
193
classlib.tests/Helpers/SessionManagerTests.cs
Normal file
193
classlib.tests/Helpers/SessionManagerTests.cs
Normal file
@@ -0,0 +1,193 @@
|
||||
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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user