dramaling-vocab-learning/backend/DramaLing.Api.Tests/Utils/CEFRHelperTests.cs

219 lines
6.9 KiB
C#

using DramaLing.Api.Utils;
using Xunit;
namespace DramaLing.Api.Tests.Utils
{
public class CEFRHelperTests
{
[Theory]
[InlineData("A1", 1)]
[InlineData("A2", 2)]
[InlineData("B1", 3)]
[InlineData("B2", 4)]
[InlineData("C1", 5)]
[InlineData("C2", 6)]
[InlineData("a1", 1)] // 測試小寫
[InlineData(" A1 ", 1)] // 測試空格
[InlineData(null, 0)]
[InlineData("", 0)]
[InlineData("INVALID", 0)]
public void ToNumeric_ShouldReturnCorrectValue(string input, int expected)
{
// Act
var result = CEFRHelper.ToNumeric(input);
// Assert
Assert.Equal(expected, result);
}
[Theory]
[InlineData(1, "A1")]
[InlineData(2, "A2")]
[InlineData(3, "B1")]
[InlineData(4, "B2")]
[InlineData(5, "C1")]
[InlineData(6, "C2")]
[InlineData(0, "Unknown")]
[InlineData(-1, "Unknown")]
[InlineData(7, "Unknown")]
public void ToString_ShouldReturnCorrectValue(int input, string expected)
{
// Act
var result = CEFRHelper.ToString(input);
// Assert
Assert.Equal(expected, result);
}
[Theory]
[InlineData(3, 2, true)] // B1 > A2
[InlineData(2, 3, false)] // A2 < B1
[InlineData(3, 3, false)] // B1 == B1
[InlineData(0, 1, false)] // 未知 < A1
[InlineData(6, 5, true)] // C2 > C1
public void IsHigherThan_Numeric_ShouldReturnCorrectValue(int level1, int level2, bool expected)
{
// Act
var result = CEFRHelper.IsHigherThan(level1, level2);
// Assert
Assert.Equal(expected, result);
}
[Theory]
[InlineData("B1", "A2", true)] // B1 > A2
[InlineData("A2", "B1", false)] // A2 < B1
[InlineData("B1", "B1", false)] // B1 == B1
[InlineData("C2", "C1", true)] // C2 > C1
[InlineData(null, "A1", false)] // null < A1
[InlineData("A1", "", false)] // A1 > ""
public void IsHigherThan_String_ShouldReturnCorrectValue(string level1, string level2, bool expected)
{
// Act
var result = CEFRHelper.IsHigherThan(level1, level2);
// Assert
Assert.Equal(expected, result);
}
[Theory]
[InlineData(2, 3, true)] // A2 < B1
[InlineData(3, 2, false)] // B1 > A2
[InlineData(3, 3, false)] // B1 == B1
[InlineData(1, 0, false)] // A1 > 未知
public void IsLowerThan_Numeric_ShouldReturnCorrectValue(int level1, int level2, bool expected)
{
// Act
var result = CEFRHelper.IsLowerThan(level1, level2);
// Assert
Assert.Equal(expected, result);
}
[Theory]
[InlineData("A2", "B1", true)] // A2 < B1
[InlineData("B1", "A2", false)] // B1 > A2
[InlineData("B1", "B1", false)] // B1 == B1
public void IsLowerThan_String_ShouldReturnCorrectValue(string level1, string level2, bool expected)
{
// Act
var result = CEFRHelper.IsLowerThan(level1, level2);
// Assert
Assert.Equal(expected, result);
}
[Theory]
[InlineData(3, 3, true)] // B1 == B1
[InlineData(3, 2, false)] // B1 != A2
[InlineData(0, 0, true)] // 未知 == 未知
public void IsSameLevel_Numeric_ShouldReturnCorrectValue(int level1, int level2, bool expected)
{
// Act
var result = CEFRHelper.IsSameLevel(level1, level2);
// Assert
Assert.Equal(expected, result);
}
[Theory]
[InlineData("B1", "B1", true)] // B1 == B1
[InlineData("B1", "A2", false)] // B1 != A2
[InlineData("b1", "B1", true)] // 忽略大小寫
[InlineData(null, "", true)] // null == "" (都是未知)
public void IsSameLevel_String_ShouldReturnCorrectValue(string level1, string level2, bool expected)
{
// Act
var result = CEFRHelper.IsSameLevel(level1, level2);
// Assert
Assert.Equal(expected, result);
}
[Theory]
[InlineData(0, true)]
[InlineData(1, true)]
[InlineData(6, true)]
[InlineData(-1, false)]
[InlineData(7, false)]
public void IsValidNumericLevel_ShouldReturnCorrectValue(int level, bool expected)
{
// Act
var result = CEFRHelper.IsValidNumericLevel(level);
// Assert
Assert.Equal(expected, result);
}
[Theory]
[InlineData("A1", true)]
[InlineData("C2", true)]
[InlineData("a1", true)] // 忽略大小寫
[InlineData(" B1 ", true)] // 忽略空格
[InlineData("X1", false)]
[InlineData("", false)]
[InlineData(null, false)]
public void IsValidStringLevel_ShouldReturnCorrectValue(string level, bool expected)
{
// Act
var result = CEFRHelper.IsValidStringLevel(level);
// Assert
Assert.Equal(expected, result);
}
[Fact]
public void GetAllNumericLevels_ShouldReturnCorrectArray()
{
// Act
var result = CEFRHelper.GetAllNumericLevels();
// Assert
Assert.Equal(new int[] { 0, 1, 2, 3, 4, 5, 6 }, result);
}
[Fact]
public void GetAllStringLevels_ShouldReturnCorrectArray()
{
// Act
var result = CEFRHelper.GetAllStringLevels();
// Assert
Assert.Equal(new string[] { "A1", "A2", "B1", "B2", "C1", "C2" }, result);
}
[Fact]
public void RoundTrip_StringToNumericToString_ShouldReturnOriginal()
{
// Arrange
var originalLevels = new[] { "A1", "A2", "B1", "B2", "C1", "C2" };
foreach (var original in originalLevels)
{
// Act
var numeric = CEFRHelper.ToNumeric(original);
var result = CEFRHelper.ToString(numeric);
// Assert
Assert.Equal(original, result);
}
}
[Fact]
public void RoundTrip_NumericToStringToNumeric_ShouldReturnOriginal()
{
// Arrange
var originalLevels = new[] { 1, 2, 3, 4, 5, 6 };
foreach (var original in originalLevels)
{
// Act
var stringLevel = CEFRHelper.ToString(original);
var result = CEFRHelper.ToNumeric(stringLevel);
// Assert
Assert.Equal(original, result);
}
}
}
}