public void ReleaseContact_ContactExistsAndLocked_ContactReleased(
            DataAdapterProvider provider,
            IContactFactory contactFactory,
            IContact contact,
            LeaseOwner them,
            LeaseOwner us,
            TestIndexUtils contactIndex)
        {
            using (contactIndex)
            {
                // lock contact for 'them'
                provider.SaveContact(contact, new ContactSaveOptions(false, them)).Should().BeTrue();

                provider.ReleaseContact(contact.Id, them);

                var actual = provider.TryLoadContact(contact.Id, contactFactory, us, TimeSpan.FromMinutes(1));
                actual.Status.Should().Be(LockAttemptStatus.Success);
                AssertContactsEqual(actual.Object, contact, l => l.Owner == us && l.ExpirationTime > DateTime.UtcNow);
            }
        }
        public void TryLoadContactById_ContactDoesntExist_NullReturned(
            DataAdapterProvider provider,
            IContactFactory contactFactory,
            IContact contact,
            LeaseOwner leaseOwner,
            TestIndexUtils contactIndex)
        {
            using (contactIndex)
            {
                var actual = provider.TryLoadContact(contact.Id, contactFactory, leaseOwner, TimeSpan.FromMinutes(1));

                actual.Status.Should().Be(LockAttemptStatus.NotFound);
                actual.Object.Should().BeNull();
            }
        }
        public void DeleteContact_ContactExists_ContactRemoved(
            DataAdapterProvider provider,
            IContactFactory contactFactory,
            IContact contact,
            LeaseOwner leaseOwner,
            TestIndexUtils contactIndex)
        {
            using (contactIndex)
            {
                provider.SaveContact(contact, new ContactSaveOptions(true, leaseOwner)).Should().BeTrue();

                provider.DeleteContact(contact.Id);

                var actual = provider.TryLoadContact(contact.Id, contactFactory, leaseOwner, TimeSpan.FromMinutes(1));
                actual.Status.Should().Be(LockAttemptStatus.NotFound);
                actual.Object.Should().BeNull();
            }
        }
        public void TryLoadContactById_ContactExistsAndNotLocked_ContactReturned(
            DataAdapterProvider provider,
            IContactFactory contactFactory,
            IContact contact,
            LeaseOwner leaseOwner,
            TestIndexUtils contactIndex)
        {
            using (contactIndex)
            {
                provider.SaveContact(contact, new ContactSaveOptions(true, leaseOwner)).Should().BeTrue();

                var actual = provider.TryLoadContact(contact.Id, contactFactory, leaseOwner, TimeSpan.FromMinutes(1));

                actual.Status.Should().Be(LockAttemptStatus.Success);
                AssertContactsEqual(actual.Object, contact, l => l.Owner == leaseOwner && l.ExpirationTime > DateTime.UtcNow);
            }
        }