public async Task UserNotFoundShouldReturnNullWhenThrowExceptionsOn()
        {
            using (var store = new UserStoreFixture <ElasticUser>(ElasticServerUrl, "elasticidentity-tests", true, true))
            {
                var user404 = await With503RetryForIndexRecovery(async() => await store.FindByIdAsync("missing"), 5);

                Assert.Null(user404);
            }
        }
        public async Task UpdateUser()
        {
            using (var store = new UserStoreFixture <ElasticUser>())
            {
                var user = new ElasticUser(UserId, UserName);

                await store.CreateAsync(user);

                user = await store.FindByIdAsync(user.Id);

                user.Roles.Add("hello");

                await store.UpdateAsync(user);

                user = await store.FindByIdAsync(user.Id);

                Assert.True(user.Roles.Contains("hello"));

                // create another user object from the same id
                var sameUser = await store.FindByIdAsync(user.Id);

                sameUser.Roles.Add("another_role");
                await store.UpdateAsync(sameUser);

                sameUser = await store.FindByIdAsync(sameUser.Id);

                Assert.True(sameUser.Roles.Contains("another_role"));

                // same id, different versions
                Assert.Equal(user.Id, sameUser.Id);
                Assert.NotEqual(user.Version, sameUser.Version);

                // exception should be thrown as we're attempting to
                // update the original, out of date, user.
                user.Roles.Add("bad_role");
                await Assert.ThrowsAsync <Elasticsearch.Net.ElasticsearchClientException>(async() => await store.UpdateAsync(user));
            }
        }
        public async Task FindById()
        {
            using (var store = new UserStoreFixture <ElasticUser>())
            {
                var user = new ElasticUser(UserId, UserName);

                await store.CreateAsync(user);

                var elasticUser = await store.FindByIdAsync(user.Id);

                Assert.NotNull(elasticUser);
                Assert.Equal(user.Id, elasticUser.Id);
            }
        }