diff --git a/ValueOf.Tests/HasValue.cs b/ValueOf.Tests/HasValue.cs new file mode 100644 index 0000000..8f7935f --- /dev/null +++ b/ValueOf.Tests/HasValue.cs @@ -0,0 +1,72 @@ +using System; +using NUnit.Framework; + +namespace ValueOf.Tests +{ + public class IntId : ValueOf { } + public class StringId : ValueOf { } + public class GuidId : ValueOf { } + + public class HasValue + { + [Test] + public void HasValueWhenDefaultIntegerIdThenHasValueIsFalseAndIsEmptyIsTrue() + { + var id = new IntId(); + + Assert.IsFalse(id.HasValue); + Assert.IsTrue(id.IsEmpty); + } + + [Test] + public void HasValueWhenEmptyStringIdThenHasValueIsFalseAndIsEmptyIsTrue() + { + var id = new StringId(); + + Assert.IsFalse(id.HasValue); + Assert.IsTrue(id.IsEmpty); + } + + [Test] + public void HasValueWhenDefaultGuidIdThenHasValueIsFalseAndIsEmptyIsTrue() + { + var id = new GuidId(); + + Assert.IsFalse(id.HasValue); + Assert.IsTrue(id.IsEmpty); + } + + [Test] + public void HasValueWhenIntegerIdThenHasValueIsTrueAndIsEmptyIsFalse() + { + var value = new Random().Next(1, 100); + var id = IntId.From(value); + + Assert.IsTrue(id.HasValue); + Assert.IsFalse(id.IsEmpty); + Assert.AreEqual(value, id.Value); + } + + [Test] + public void HasValueWhenStringIdThenHasValueIsTrueAndIsEmptyIsFalse() + { + var value = Guid.NewGuid().ToString(); + var id = StringId.From(value); + + Assert.IsTrue(id.HasValue); + Assert.IsFalse(id.IsEmpty); + Assert.AreEqual(value, id.Value); + } + + [Test] + public void HasValueWhenGuidIdThenHasValueIsTrueAndIsEmptyIsFalse() + { + var value = Guid.NewGuid(); + var id = GuidId.From(value); + + Assert.IsTrue(id.HasValue); + Assert.IsFalse(id.IsEmpty); + Assert.AreEqual(value, id.Value); + } + } +} diff --git a/ValueOf.Tests/ValueOf.Tests.csproj b/ValueOf.Tests/ValueOf.Tests.csproj index c5b1259..6407972 100644 --- a/ValueOf.Tests/ValueOf.Tests.csproj +++ b/ValueOf.Tests/ValueOf.Tests.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/ValueOf/ValueOf.cs b/ValueOf/ValueOf.cs index e6e5666..c4c28bf 100644 --- a/ValueOf/ValueOf.cs +++ b/ValueOf/ValueOf.cs @@ -41,6 +41,10 @@ static ValueOf() public TValue Value { get; protected set; } + public bool HasValue => Value != null && !Value.Equals(default(TValue)); + + public bool IsEmpty => !HasValue; + public static TThis From(TValue item) { TThis x = Factory();