public void Parse_ReturnsNull_GivenDbNullValue()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnum>();

            var result = typeHandler.Parse(DBNull.Value);

            result.Should().BeNull();
        }
        public void Parse_Throws_GivenValueNotConvertibleToTValue()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnum>();

            Action act = () => typeHandler.Parse("abc");

            act.Should().Throw <ArgumentException>();
        }
        public void Parse_ReturnsSmartEnumFromValue_GivenValueConvertibleToTValue()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnum>();

            long value  = 3;
            var  result = typeHandler.Parse(value);

            result.Should().BeSameAs(TestEnum.Three);
        }
        public void Constructor_SetsDbTypeToDbTypeInt64_GivenTValueIsLong()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumLong, long>();

            typeHandler.DbType.Should().Be(DbType.Int64);
        }
        public void Constructor_SetsDbTypeToDbTypeInt32_GivenTValueIsInt()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumInt, int>();

            typeHandler.DbType.Should().Be(DbType.Int32);
        }
        public void Constructor_SetsDbTypeToDbTypeInt16_GivenTValueIsShort()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumShort, short>();

            typeHandler.DbType.Should().Be(DbType.Int16);
        }
        public void Constructor_SetsDbTypeToDbTypeGuid_GivenTValueIsGuid()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumGuid, Guid>();

            typeHandler.DbType.Should().Be(DbType.Guid);
        }
        public void Constructor_SetsDbTypeToDbTypeDouble_GivenTValueIsDouble()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumDouble, double>();

            typeHandler.DbType.Should().Be(DbType.Double);
        }
        public void Constructor_SetsDbTypeToDbTypeDecimal_GivenTValueIsDecimal()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumDecimal, decimal>();

            typeHandler.DbType.Should().Be(DbType.Decimal);
        }
        public void Constructor_SetsDbTypeToDbTypeDateTimeOffset_GivenTValueIsDateTimeOffset()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumDateTimeOffset, DateTimeOffset>();

            typeHandler.DbType.Should().Be(DbType.DateTimeOffset);
        }
        public void Constructor_SetsDbTypeToDbTypeStringFixedLength_GivenTValueIsChar()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumChar, char>();

            typeHandler.DbType.Should().Be(DbType.StringFixedLength);
        }
        public void Constructor_SetsDbTypeToDbTypeByte_GivenTValueIsByte()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumByte, byte>();

            typeHandler.DbType.Should().Be(DbType.Byte);
        }
        public void Constructor_DoesNotSetDbType_GivenTValueIsSomethingElse()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumOther, TimeSpan>();

            typeHandler.DbType.Should().BeNull();
        }
        public void Constructor_SetsDbTypeToDbTypeBoolean_GivenTValueIsBool()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumBool, bool>();

            typeHandler.DbType.Should().Be(DbType.Boolean);
        }
        public void Constructor_SetsDbTypeToDbTypeString_GivenTValueIsString()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumString, string>();

            typeHandler.DbType.Should().Be(DbType.String);
        }
        public void Constructor_SetsDbTypeToDbTypeSingle_GivenTValueIsFloat()
        {
            var typeHandler = new SmartEnumByValueTypeHandler <TestEnumFloat, float>();

            typeHandler.DbType.Should().Be(DbType.Single);
        }