Files
Clint Branham c1a9dd5ca1 test: add xUnit unit tests for core library
144 tests covering authentication (version parsing, session expiry, token
format validation), model deserialization from real PVE 8.x/9.x API JSON
fixtures, and service layer behavior. Includes TestHelper with mock
HttpMessageHandler factory and 21 JSON fixture files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 15:48:01 -05:00

53 lines
1.7 KiB
C#

using System.IO;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Moq;
using Moq.Protected;
namespace PSProxmoxVE.Core.Tests
{
public static class TestHelper
{
public static string LoadFixture(string filename)
{
var path = Path.Combine("Fixtures", filename);
return File.ReadAllText(path);
}
public static Mock<HttpMessageHandler> CreateMockHandler(string responseBody, HttpStatusCode statusCode = HttpStatusCode.OK)
{
var mock = new Mock<HttpMessageHandler>();
mock.Protected()
.Setup<Task<HttpResponseMessage>>("SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(new HttpResponseMessage
{
StatusCode = statusCode,
Content = new StringContent(responseBody)
});
return mock;
}
public static Mock<HttpMessageHandler> CreateMockHandlerSequence(params (string body, HttpStatusCode status)[] responses)
{
var mock = new Mock<HttpMessageHandler>();
var setup = mock.Protected()
.SetupSequence<Task<HttpResponseMessage>>("SendAsync",
ItExpr.IsAny<HttpRequestMessage>(),
ItExpr.IsAny<CancellationToken>());
foreach (var (body, status) in responses)
{
setup = setup.ReturnsAsync(new HttpResponseMessage
{
StatusCode = status,
Content = new StringContent(body)
});
}
return mock;
}
}
}