public async Task Encrypt_should_encrypt_private_datetime_field_with_sensitivedata_attribute()
        {
            var userId    = Guid.NewGuid().ToString();
            var birthDate = new DateTime(1980, 1, 1);
            var person    = new PersonLifeTime(birthDate);

            await _engine.EncryptAsync(userId, person);

            // Person BirthDate should set to a default datetime value.
            Assert.NotEqual(birthDate, person.BirthDate);
            Assert.Equal(new DateTime().ToString(), person.BirthDate.ToString());

            // Mapped field should be set with encrypted value
            Assert.NotNull(person.BirthDateEncrypted);

            // After decrypt the target member should get a Default value (this case null)
            await _engine.DecryptAsync(userId, person);

            Assert.Equal(birthDate, person.BirthDate);
            Assert.Null(person.BirthDateEncrypted);
        }
        public async Task Encrypt_should_encrypt_private_datetime_property_with_sensitivedata_attribute()
        {
            var userId = Guid.NewGuid().ToString();

            var dateOfDeath = new DateTime(2050, 1, 1);
            var person      = new PersonLifeTime(null, dateOfDeath);

            await _engine.EncryptAsync(userId, person);

            // Person MariageDate should set to a default datetime value.
            Assert.NotEqual(dateOfDeath, person.DateOfDeathProxy);
            Assert.Equal(new DateTime().ToString(), person.DateOfDeathProxy.ToString());

            // Mapped field should be set with encrypted value
            Assert.NotNull(person.DateOfDeathEncrypted);

            // After decrypt the target member should get a Default value (this case null)
            await _engine.DecryptAsync(userId, person);

            Assert.Equal(dateOfDeath, person.DateOfDeathProxy);
            Assert.Null(person.DateOfDeathEncrypted);
        }
        public async Task Encrypt_should_encrypt_public_datetime_property_with_sensitivedata_attribute()
        {
            var userId       = Guid.NewGuid().ToString();
            var person       = new PersonLifeTime(null);
            var graduateDate = new DateTime(2000, 1, 1);

            person.GraduateDate = graduateDate;
            await _engine.EncryptAsync(userId, person);

            // Person MariageDate should set to a default datetime value.
            Assert.NotEqual(graduateDate, person.MariageDate);
            Assert.Equal(new DateTime().ToString(), person.GraduateDate.ToString());

            // Mapped field should be set with encrypted value
            Assert.NotNull(person.GraduateDateEncrypted);

            // After decrypt the target member should get a Default value (this case null)
            await _engine.DecryptAsync(userId, person);

            Assert.Equal(graduateDate, person.GraduateDate);
            Assert.Null(person.GraduateDateEncrypted);
        }