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(); } [Fact] public void CreateHttpClient_WithIgnoreSsl_ReturnsHttpClient() { // Act using var client = SessionManager.CreateHttpClient(true); // Assert client.Should().NotBeNull(); client.Should().BeOfType(); } [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"); } }