public void ReturnNullIfDeserializingNull()
        {
            Serializer <DateTimeOffset?> serializer = new SqlNullableDatetimeoffsetSerializer();
            DateTimeOffset?actualDeserializedValue  = serializer.Deserialize(null);

            Assert.Null(actualDeserializedValue);
        }
        public void DeserializeTheSameAsSqlServer(DateTimeOffset?plaintext, byte scale)
        {
            Database.Insert(new SqlParameter("@parameter", SqlDbType.DateTimeOffset)
            {
                Value = plaintext, Scale = scale
            });
            byte[] ciphertextBytes = Database.SelectCiphertext(SqlDbType.DateTimeOffset);
            byte[] plaintextBytes  = deterministicEncryptionAlgorithm.Decrypt(ciphertextBytes);
            Serializer <DateTimeOffset?> serializer = new SqlNullableDatetimeoffsetSerializer(scale);
            DateTimeOffset?expectedPlaintext        = serializer.Deserialize(plaintextBytes);
            DateTimeOffset?actualPlaintext          = (DateTimeOffset?)Database.SelectPlaintext(SqlDbType.DateTimeOffset);

            Assert.Equal(expectedPlaintext, actualPlaintext);
        }
        public void ThrowWhenPropertySizeOutOfRange(int scale)
        {
            SqlNullableDatetimeoffsetSerializer serializer = new SqlNullableDatetimeoffsetSerializer();

            Assert.Throws <ArgumentOutOfRangeException>(() => serializer.Scale = scale);
        }
        public void ShouldThrowIfDeserializingLessThanTenBytes(byte[] data)
        {
            Serializer <DateTimeOffset?> serializer = new SqlNullableDatetimeoffsetSerializer();

            Assert.Throws <ArgumentOutOfRangeException>(() => serializer.Deserialize(data));
        }