diff --git a/src/Resend/DateTimeOrHuman.cs b/src/Resend/DateTimeOrHuman.cs index a5a17ca..550ed57 100644 --- a/src/Resend/DateTimeOrHuman.cs +++ b/src/Resend/DateTimeOrHuman.cs @@ -50,7 +50,7 @@ public override string ToString() public int CompareTo( DateTimeOrHuman other ) { if ( this.IsMoment != other.IsMoment ) - throw new NotSupportedException( "Cannot compare DateTimeOrHuman values of different kind" ); + throw new NotSupportedException( "DH001: Cannot compare DateTimeOrHuman values of different kind" ); if ( this.IsMoment == true ) return this.Moment!.Value.CompareTo( other.Moment!.Value ); @@ -65,7 +65,7 @@ public static implicit operator DateTime( DateTimeOrHuman value ) if ( value.IsMoment == true ) return value.Moment!.Value; - throw new InvalidOperationException( "Value is not a DateTime" ); + throw new InvalidOperationException( "DH002: Value is not a DateTime" ); } diff --git a/tests/Resend.Tests/DateTimeOrHumanTests.cs b/tests/Resend.Tests/DateTimeOrHumanTests.cs index 8002d72..e7fe01f 100644 --- a/tests/Resend.Tests/DateTimeOrHumanTests.cs +++ b/tests/Resend.Tests/DateTimeOrHumanTests.cs @@ -15,6 +15,103 @@ public class WrapperClass } + /// + [Fact] + public void DateTimeToString() + { + var dt = DateTime.UtcNow; + DateTimeOrHuman src = dt; + + Assert.Equal( dt.ToString(), src.ToString() ); + } + + + /// + [Fact] + public void DateTimeCast() + { + var dt = DateTime.UtcNow; + DateTimeOrHuman src = dt; + DateTime tgt = src; + + Assert.Equal( dt, tgt ); + } + + + /// + [Fact] + public void DateTimeCastFromHuman() + { + DateTimeOrHuman src = "in 5 mins"; + + Action act = () => + { + DateTime tgt = src; + }; + + var ex = Assert.Throws( act ); + Assert.NotNull( ex.Message ); + Assert.StartsWith( "DH002:", ex.Message ); + } + + + /// + [Fact] + public void DateTimeComparable() + { + var dt1 = DateTime.UtcNow; + var dt2 = DateTime.UtcNow.AddDays( 1 ); + + DateTimeOrHuman src1 = dt1; + DateTimeOrHuman src2 = dt2; + + Assert.Equal( dt1.CompareTo( dt2 ), src1.CompareTo( src2 ) ); + } + + + /// + [Fact] + public void HumanToString() + { + var str = "in 5 mins"; + DateTimeOrHuman v = str; + + Assert.Equal( str, v.ToString() ); + } + + + /// + [Fact] + public void HumanComparable() + { + var str1 = "in 5 mins"; + var str2 = "tomorrow 5:00 am"; + + DateTimeOrHuman v1 = str1; + DateTimeOrHuman v2 = str2; + + Assert.Equal( str1.CompareTo( str2 ), v1.CompareTo( v2 ) ); + } + + + /// + [Fact] + public void MixedComparable() + { + var str = "in 5 mins"; + var dt = DateTime.UtcNow; + + DateTimeOrHuman v1 = str; + DateTimeOrHuman v2 = dt; + + Action act = () => v1.CompareTo( v2 ); + + var ex = Assert.Throws( act ); + Assert.NotNull( ex.Message ); + Assert.StartsWith( "DH001:", ex.Message ); + } + + /// [Fact] public void PropertyNotNull()