mirror of
https://github.com/freedbygrace/PSOPNSenseAPI.git
synced 2026-07-26 20:08:30 +00:00
Add port forwarding support, improve XML documentation, and add unit tests
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Moq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using PSOPNSenseAPI.Logging;
|
||||
using PSOPNSenseAPI.Services;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PSOPNSenseAPI.Tests
|
||||
{
|
||||
[TestClass]
|
||||
public class InterfaceServiceTests
|
||||
{
|
||||
private Mock<IOPNSenseApiClient> _mockApiClient;
|
||||
private Mock<ILogger> _mockLogger;
|
||||
private InterfaceService _interfaceService;
|
||||
|
||||
[TestInitialize]
|
||||
public void Setup()
|
||||
{
|
||||
_mockApiClient = new Mock<IOPNSenseApiClient>();
|
||||
_mockLogger = new Mock<ILogger>();
|
||||
_interfaceService = new InterfaceService(_mockApiClient.Object, _mockLogger.Object);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task GetInterfacesAsync_ReturnsInterfaces()
|
||||
{
|
||||
// Arrange
|
||||
var response = new InterfaceListResponse
|
||||
{
|
||||
Interfaces = new List<InterfaceInfo>
|
||||
{
|
||||
new InterfaceInfo
|
||||
{
|
||||
Name = "wan",
|
||||
Description = "WAN",
|
||||
IpAddress = "192.168.1.1",
|
||||
SubnetMask = "255.255.255.0",
|
||||
Gateway = "192.168.1.254",
|
||||
Status = "up"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
_mockApiClient.Setup(x => x.GetAsync<InterfaceListResponse>("interfaces/overview/searchInterfaces"))
|
||||
.ReturnsAsync(response);
|
||||
|
||||
// Act
|
||||
var result = await _interfaceService.GetInterfacesAsync();
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual(1, result.Interfaces.Count);
|
||||
Assert.AreEqual("wan", result.Interfaces[0].Name);
|
||||
Assert.AreEqual("WAN", result.Interfaces[0].Description);
|
||||
Assert.AreEqual("192.168.1.1", result.Interfaces[0].IpAddress);
|
||||
Assert.AreEqual("255.255.255.0", result.Interfaces[0].SubnetMask);
|
||||
Assert.AreEqual("192.168.1.254", result.Interfaces[0].Gateway);
|
||||
Assert.AreEqual("up", result.Interfaces[0].Status);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task GetInterfaceDetailAsync_ReturnsInterfaceDetail()
|
||||
{
|
||||
// Arrange
|
||||
var interfaceName = "wan";
|
||||
var response = new InterfaceDetailResponse
|
||||
{
|
||||
Interface = new InterfaceDetail
|
||||
{
|
||||
Name = "wan",
|
||||
Description = "WAN",
|
||||
IpAddress = "192.168.1.1",
|
||||
SubnetMask = "255.255.255.0",
|
||||
Gateway = "192.168.1.254",
|
||||
Enabled = "1"
|
||||
}
|
||||
};
|
||||
|
||||
_mockApiClient.Setup(x => x.GetAsync<InterfaceDetailResponse>($"interfaces/overview/getInterface/{interfaceName}"))
|
||||
.ReturnsAsync(response);
|
||||
|
||||
// Act
|
||||
var result = await _interfaceService.GetInterfaceDetailAsync(interfaceName);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.IsNotNull(result.Interface);
|
||||
Assert.AreEqual("wan", result.Interface.Name);
|
||||
Assert.AreEqual("WAN", result.Interface.Description);
|
||||
Assert.AreEqual("192.168.1.1", result.Interface.IpAddress);
|
||||
Assert.AreEqual("255.255.255.0", result.Interface.SubnetMask);
|
||||
Assert.AreEqual("192.168.1.254", result.Interface.Gateway);
|
||||
Assert.AreEqual("1", result.Interface.Enabled);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task UpdateInterfaceAsync_ReturnsSuccess()
|
||||
{
|
||||
// Arrange
|
||||
var interfaceName = "wan";
|
||||
var interfaceConfig = new InterfaceConfig
|
||||
{
|
||||
Description = "WAN",
|
||||
IpAddress = "192.168.1.1",
|
||||
SubnetMask = "255.255.255.0",
|
||||
Gateway = "192.168.1.254",
|
||||
Enabled = "1"
|
||||
};
|
||||
|
||||
var response = new InterfaceUpdateResponse
|
||||
{
|
||||
Result = "saved"
|
||||
};
|
||||
|
||||
_mockApiClient.Setup(x => x.PostAsync<InterfaceUpdateResponse>($"interfaces/overview/setInterface/{interfaceName}", It.IsAny<object>()))
|
||||
.ReturnsAsync(response);
|
||||
|
||||
// Act
|
||||
var result = await _interfaceService.UpdateInterfaceAsync(interfaceName, interfaceConfig);
|
||||
|
||||
// Assert
|
||||
Assert.IsNotNull(result);
|
||||
Assert.AreEqual("saved", result.Result);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
[assembly: Parallelize(Scope = ExecutionScope.MethodLevel)]
|
||||
@@ -0,0 +1,24 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="MSTest" Version="3.6.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\PSOPNSenseAPI\PSOPNSenseAPI.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,10 @@
|
||||
namespace PSOPNSenseAPI.Tests;
|
||||
|
||||
[TestClass]
|
||||
public sealed class Test1
|
||||
{
|
||||
[TestMethod]
|
||||
public void TestMethod1()
|
||||
{
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user