Files
PSProxmoxVE/tests/PSProxmoxVE.Core.Tests/Models/StorageModelTests.cs
T
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

139 lines
5.1 KiB
C#

using Xunit;
using Newtonsoft.Json.Linq;
using PSProxmoxVE.Core.Models.Storage;
namespace PSProxmoxVE.Core.Tests.Models
{
public class StorageModelTests
{
[Fact]
public void PveStorage_Deserialize_Pve9_ReturnsCorrectCount()
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
Assert.Equal(3, storages.Length);
}
[Fact]
public void PveStorage_Deserialize_Pve9_Local_HasCorrectId()
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
Assert.Equal("local", storages[0].Storage);
}
[Fact]
public void PveStorage_Deserialize_Pve9_Local_HasCorrectType()
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
Assert.Equal("dir", storages[0].Type);
}
[Fact]
public void PveStorage_Deserialize_Pve9_Local_HasContentTypes()
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
Assert.Equal("iso,vztmpl,backup", storages[0].Content);
}
[Fact]
public void PveStorage_Deserialize_Pve9_Local_HasSizeFields()
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
Assert.Equal(107374182400L, storages[0].Total);
Assert.Equal(21474836480L, storages[0].Used);
Assert.Equal(85899345920L, storages[0].Available);
}
[Fact]
public void PveStorage_Deserialize_Pve9_Local_IsEnabled_NotShared()
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
Assert.Equal(1, storages[0].Enabled);
Assert.Equal(0, storages[0].Shared);
}
[Fact]
public void PveStorage_Deserialize_Pve9_CephPool_IsShared()
{
var json = TestHelper.LoadFixture("pve9_storage.json");
var data = JObject.Parse(json)["data"];
var storages = data.ToObject<PveStorage[]>();
Assert.NotNull(storages);
var ceph = storages[2];
Assert.Equal("ceph-pool", ceph.Storage);
Assert.Equal("rbd", ceph.Type);
Assert.Equal(1, ceph.Shared);
}
[Fact]
public void PveStorageContent_Deserialize_Pve9_ReturnsCorrectCount()
{
var json = TestHelper.LoadFixture("pve9_storage_content.json");
var data = JObject.Parse(json)["data"];
var items = data.ToObject<PveStorageContent[]>();
Assert.NotNull(items);
Assert.Equal(2, items.Length);
}
[Fact]
public void PveStorageContent_Deserialize_Pve9_FirstItem_HasCorrectVolId()
{
var json = TestHelper.LoadFixture("pve9_storage_content.json");
var data = JObject.Parse(json)["data"];
var items = data.ToObject<PveStorageContent[]>();
Assert.NotNull(items);
Assert.Equal("local:iso/ubuntu-24.04-live-server-amd64.iso", items[0].VolId);
}
[Fact]
public void PveStorageContent_Deserialize_Pve9_FirstItem_HasCorrectContentType()
{
var json = TestHelper.LoadFixture("pve9_storage_content.json");
var data = JObject.Parse(json)["data"];
var items = data.ToObject<PveStorageContent[]>();
Assert.NotNull(items);
Assert.Equal("iso", items[0].Content);
Assert.Equal("iso", items[0].Format);
}
[Fact]
public void PveStorageContent_Deserialize_Pve9_FirstItem_HasSize()
{
var json = TestHelper.LoadFixture("pve9_storage_content.json");
var data = JObject.Parse(json)["data"];
var items = data.ToObject<PveStorageContent[]>();
Assert.NotNull(items);
Assert.Equal(2774532096L, items[0].Size);
}
[Fact]
public void PveStorageContent_Deserialize_Pve9_OptionalFields_NullWhenMissing()
{
var json = TestHelper.LoadFixture("pve9_storage_content.json");
var data = JObject.Parse(json)["data"];
var items = data.ToObject<PveStorageContent[]>();
Assert.NotNull(items);
// ISO items should not have a VmId or Notes
Assert.Null(items[0].VmId);
Assert.Null(items[0].Notes);
}
}
}