namespace PS.IPAM.Tests.Models; using FluentAssertions; using PS.IPAM; using Xunit; public class TagTests { [Fact] public void Constructor_SetsAllProperties() { // Arrange var id = 1; var type = "Used"; var showTag = true; var bgColor = "#5cb85c"; var fgColor = "#ffffff"; var compress = "Yes"; var locked = "No"; var updateTag = true; // Act var tag = new Tag(id, type, showTag, bgColor, fgColor, compress, locked, updateTag); // Assert tag.Id.Should().Be(id); tag.Type.Should().Be(type); tag.ShowTag.Should().Be(showTag); tag.BGColor.Should().Be(bgColor); tag.FGColor.Should().Be(fgColor); tag.Compress.Should().BeTrue(); tag.Locked.Should().BeFalse(); tag.UpdateTag.Should().Be(updateTag); } [Theory] [InlineData("Yes", true)] [InlineData("No", false)] [InlineData("", false)] [InlineData("yes", false)] // Case sensitive [InlineData("true", false)] // Only "Yes" is true public void StringToBool_ConvertsCorrectly(string input, bool expected) { // The StringToBool is private, so we test through the constructor // Using Compress field which uses StringToBool var tag = new Tag(1, "Test", false, "", "", input, "No", false); tag.Compress.Should().Be(expected); } [Theory] [InlineData("Used")] [InlineData("Available")] [InlineData("Reserved")] [InlineData("DHCP")] public void ToString_ReturnsTagType(string tagType) { // Arrange var tag = new Tag(1, tagType, false, "", "", "No", "No", false); // Act var result = tag.ToString(); // Assert result.Should().Be(tagType); } [Fact] public void Locked_WithYes_IsTrue() { // Arrange & Act var tag = new Tag(1, "Test", false, "", "", "No", "Yes", false); // Assert tag.Locked.Should().BeTrue(); } }