149 lines
4.8 KiB
C#
149 lines
4.8 KiB
C#
using JdeScoping.DataSync.Services;
|
|
using Shouldly;
|
|
|
|
namespace JdeScoping.DataSync.Tests.Services;
|
|
|
|
public class ParameterFormatConverterTests
|
|
{
|
|
[Fact]
|
|
public void ToJdeJulianDate_Year2024Day100_Returns124100()
|
|
{
|
|
var date = new DateTime(2024, 4, 9); // Day 100
|
|
var result = ParameterFormatConverter.ToJdeJulianDate(date);
|
|
result.ShouldBe(124100);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToJdeJulianDate_Year1999Day365_Returns99365()
|
|
{
|
|
var date = new DateTime(1999, 12, 31);
|
|
var result = ParameterFormatConverter.ToJdeJulianDate(date);
|
|
result.ShouldBe(99365);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToJdeJulianDate_Year2000Day1_Returns100001()
|
|
{
|
|
// Year 2000 should have century bit = 1
|
|
var date = new DateTime(2000, 1, 1);
|
|
var result = ParameterFormatConverter.ToJdeJulianDate(date);
|
|
result.ShouldBe(100001);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToJdeJulianDate_Year1998Day1_Returns98001()
|
|
{
|
|
// Year 1998 should have century bit = 0
|
|
var date = new DateTime(1998, 1, 1);
|
|
var result = ParameterFormatConverter.ToJdeJulianDate(date);
|
|
result.ShouldBe(98001);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToJdeTime_143025_Returns143025()
|
|
{
|
|
var time = new DateTime(2024, 1, 1, 14, 30, 25);
|
|
var result = ParameterFormatConverter.ToJdeTime(time);
|
|
result.ShouldBe(143025);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToJdeTime_Midnight_Returns0()
|
|
{
|
|
var time = new DateTime(2024, 1, 1, 0, 0, 0);
|
|
var result = ParameterFormatConverter.ToJdeTime(time);
|
|
result.ShouldBe(0);
|
|
}
|
|
|
|
[Fact]
|
|
public void ToJdeTime_235959_Returns235959()
|
|
{
|
|
var time = new DateTime(2024, 1, 1, 23, 59, 59);
|
|
var result = ParameterFormatConverter.ToJdeTime(time);
|
|
result.ShouldBe(235959);
|
|
}
|
|
|
|
[Fact]
|
|
public void Convert_WithUtcTimezone_UsesUtc()
|
|
{
|
|
var converter = new ParameterFormatConverter("UTC");
|
|
var utcTime = DateTime.SpecifyKind(new DateTime(2024, 4, 9, 12, 0, 0), DateTimeKind.Utc);
|
|
var result = converter.Convert(utcTime, "jdeJulian");
|
|
result.ShouldBe(124100);
|
|
}
|
|
|
|
[Fact]
|
|
public void Convert_WithJdeTimeFormat_ReturnsInteger()
|
|
{
|
|
var converter = new ParameterFormatConverter("UTC");
|
|
var utcTime = DateTime.SpecifyKind(new DateTime(2024, 1, 1, 14, 30, 25), DateTimeKind.Utc);
|
|
var result = converter.Convert(utcTime, "jdetime");
|
|
result.ShouldBe(143025);
|
|
}
|
|
|
|
[Fact]
|
|
public void Convert_WithNullFormat_ReturnsAdjustedDateTime()
|
|
{
|
|
var converter = new ParameterFormatConverter("UTC");
|
|
var utcTime = DateTime.SpecifyKind(new DateTime(2024, 4, 9, 12, 0, 0), DateTimeKind.Utc);
|
|
var result = converter.Convert(utcTime, null);
|
|
result.ShouldBeOfType<DateTime>();
|
|
((DateTime)result).ShouldBe(new DateTime(2024, 4, 9, 12, 0, 0));
|
|
}
|
|
|
|
[Fact]
|
|
public void Convert_WithUnknownFormat_ThrowsArgumentException()
|
|
{
|
|
var converter = new ParameterFormatConverter("UTC");
|
|
var utcTime = DateTime.SpecifyKind(new DateTime(2024, 4, 9, 12, 0, 0), DateTimeKind.Utc);
|
|
Should.Throw<ArgumentException>(() => converter.Convert(utcTime, "unknown"));
|
|
}
|
|
|
|
[Fact]
|
|
public void Constructor_WithLocalTimezone_Succeeds()
|
|
{
|
|
// Should not throw
|
|
var converter = new ParameterFormatConverter("LOCAL");
|
|
converter.ShouldNotBeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void Constructor_WithUtcTimezone_Succeeds()
|
|
{
|
|
// Should not throw
|
|
var converter = new ParameterFormatConverter("UTC");
|
|
converter.ShouldNotBeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void Convert_CaseInsensitiveFormat_ReturnsCorrectValue()
|
|
{
|
|
var converter = new ParameterFormatConverter("UTC");
|
|
var utcTime = DateTime.SpecifyKind(new DateTime(2024, 4, 9, 12, 0, 0), DateTimeKind.Utc);
|
|
|
|
// Test case insensitivity
|
|
var result1 = converter.Convert(utcTime, "JDEJULIAN");
|
|
var result2 = converter.Convert(utcTime, "JdeJulian");
|
|
var result3 = converter.Convert(utcTime, "jdejulian");
|
|
|
|
result1.ShouldBe(124100);
|
|
result2.ShouldBe(124100);
|
|
result3.ShouldBe(124100);
|
|
}
|
|
|
|
[Fact]
|
|
public void Constructor_CaseInsensitiveTimezone_Succeeds()
|
|
{
|
|
// All these should work
|
|
var converter1 = new ParameterFormatConverter("utc");
|
|
var converter2 = new ParameterFormatConverter("Utc");
|
|
var converter3 = new ParameterFormatConverter("local");
|
|
var converter4 = new ParameterFormatConverter("Local");
|
|
|
|
converter1.ShouldNotBeNull();
|
|
converter2.ShouldNotBeNull();
|
|
converter3.ShouldNotBeNull();
|
|
converter4.ShouldNotBeNull();
|
|
}
|
|
}
|