maksit-core/src/MaksIT.Core.Tests/Abstractions/EnumerationTests.cs
Maksym Sadovnychyy 8ac380c7d4 (feature): init
2024-09-03 18:38:52 +02:00

166 lines
4.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Xunit;
namespace MaksIT.Core.Abstractions.Tests {
public class TestEnumeration : Enumeration {
public static readonly TestEnumeration First = new TestEnumeration(1, "First");
public static readonly TestEnumeration Second = new TestEnumeration(2, "Second");
public static readonly TestEnumeration Third = new TestEnumeration(3, "Third");
public TestEnumeration(int id, string name) : base(id, name) { }
}
public class EnumerationTests {
[Fact]
public void GetAll_ShouldReturnAllEnumerations() {
// Act
var allValues = Enumeration.GetAll<TestEnumeration>().ToList();
// Assert
Assert.NotNull(allValues);
Assert.Equal(3, allValues.Count);
Assert.Contains(TestEnumeration.First, allValues);
Assert.Contains(TestEnumeration.Second, allValues);
Assert.Contains(TestEnumeration.Third, allValues);
}
[Theory]
[InlineData(1, "First")]
[InlineData(2, "Second")]
[InlineData(3, "Third")]
public void FromValue_ShouldReturnEnumerationByValue(int id, string expectedName) {
// Act
var result = Enumeration.FromValue<TestEnumeration>(id);
// Assert
Assert.NotNull(result);
Assert.Equal(expectedName, result.Name);
}
[Theory]
[InlineData("First", 1)]
[InlineData("Second", 2)]
[InlineData("Third", 3)]
public void FromDisplayName_ShouldReturnEnumerationByName(string displayName, int expectedId) {
// Act
var result = Enumeration.FromDisplayName<TestEnumeration>(displayName);
// Assert
Assert.NotNull(result);
Assert.Equal(expectedId, result.Id);
}
[Fact]
public void AbsoluteDifference_ShouldReturnCorrectDifference() {
// Act
var difference = Enumeration.AbsoluteDifference(TestEnumeration.First, TestEnumeration.Third);
// Assert
Assert.Equal(2, difference);
}
[Fact]
public void Equals_SameReference_ShouldReturnTrue() {
// Act
var result = TestEnumeration.First.Equals(TestEnumeration.First);
// Assert
Assert.True(result);
}
[Fact]
public void Equals_DifferentReferencesSameValues_ShouldReturnTrue() {
// Arrange
var firstCopy = Enumeration.FromValue<TestEnumeration>(1);
// Act
var result = TestEnumeration.First.Equals(firstCopy);
// Assert
Assert.True(result);
}
[Fact]
public void Equals_DifferentValues_ShouldReturnFalse() {
// Act
var result = TestEnumeration.First.Equals(TestEnumeration.Second);
// Assert
Assert.False(result);
}
[Fact]
public void CompareTo_ShouldReturnZeroForEqualValues() {
// Arrange
var firstCopy = Enumeration.FromValue<TestEnumeration>(1);
// Act
var result = TestEnumeration.First.CompareTo(firstCopy);
// Assert
Assert.Equal(0, result);
}
[Fact]
public void CompareTo_ShouldReturnPositiveForGreaterValue() {
// Act
var result = TestEnumeration.Second.CompareTo(TestEnumeration.First);
// Assert
Assert.True(result > 0);
}
[Fact]
public void CompareTo_ShouldReturnNegativeForLesserValue() {
// Act
var result = TestEnumeration.First.CompareTo(TestEnumeration.Second);
// Assert
Assert.True(result < 0);
}
[Fact]
public void CompareTo_InvalidComparison_ShouldThrowArgumentException() {
// Arrange
var nonEnumerationObject = new object();
// Act & Assert
Assert.Throws<ArgumentException>(() => TestEnumeration.First.CompareTo(nonEnumerationObject));
}
[Fact]
public void GetHashCode_ShouldReturnIdHashCode() {
// Act
var hashCode = TestEnumeration.First.GetHashCode();
// Assert
Assert.Equal(TestEnumeration.First.Id.GetHashCode(), hashCode);
}
[Fact]
public void ToString_ShouldReturnName() {
// Act
var result = TestEnumeration.First.ToString();
// Assert
Assert.Equal("First", result);
}
[Fact]
public void Parse_InvalidValue_ShouldThrowInvalidOperationException() {
// Act & Assert
Assert.Throws<InvalidOperationException>(() => Enumeration.FromValue<TestEnumeration>(999));
}
[Fact]
public void Parse_InvalidDisplayName_ShouldThrowInvalidOperationException() {
// Act & Assert
Assert.Throws<InvalidOperationException>(() => Enumeration.FromDisplayName<TestEnumeration>("NonExistent"));
}
}
}