public async Task CheckExistsAsyncReturnsFalseWithInvalidData(string reference)
        {
            // Arrange
            // Use existing records from constructor
            PartitionedTestObject _object = new PartitionedTestObject {
                Id = reference, Partition = "partition"
            };

            // Act
            bool objectExists = await _storageProvider.CheckExistsAsync(_object);

            //Assert
            Assert.False(objectExists);
        }
        public async Task DeleteAsyncFailsWithInvalidData(string reference)
        {
            // Arrange
            // Use existing records from constructor
            PartitionedTestObject _object = new PartitionedTestObject {
                Id = reference, Partition = "partition"
            };

            // Act
            var deletion = await _storageProvider.DeleteAsync(_object);

            await Task.Delay(6000);

            // Assert
            IQueryable <PartitionedTestObject> query = await _storageProvider.Query();

            Assert.False(deletion);
            Assert.Equal(2, query.Where(e => e.Partition == "partition").Count());
        }
        public async Task DeleteAsyncSucceedsWithValidData(string reference)
        {
            // Arrange
            // Use existing records from constructor
            PartitionedTestObject _object = new PartitionedTestObject {
                Id = reference, Partition = "partition"
            };

            // Act
            var deletion = await _storageProvider.DeleteAsync(_object);

            await Task.Delay(6000);

            // Assert
            IQueryable <PartitionedTestObject> query = await _storageProvider.Query();

            Assert.True(deletion);
            Assert.Single(query.Where(e => e.Partition == "partition"));
        }
        public async Task UpsertAsyncFailsToUpdateObjectWithExistingKeyAndMissingDoctype(string reference)
        {
            // Arrange
            // Use existing records from constructor
            ILogger log = new StubLogger();
            PartitionedTestObject _object = new PartitionedTestObject()
            {
                Id          = reference,
                Partition   = "partition",
                InnerObject = "myNewString"
            };

            // Act
            var exception = await Record.ExceptionAsync(() => _storageProvider.UpsertAsync(_object));

            // Assert
            Assert.IsType <Exception>(exception);
            Assert.Equal("There was at least one validation error. Please provide the appropriate information.", exception.Message);
            IQueryable <PartitionedTestObject> query = await _storageProvider.Query();

            Assert.Equal(2, query.Where(doc => doc.Partition == "partition").Count());
        }
        public async Task UpsertAsyncUpdatesObjectWithExistingKey(string reference)
        {
            // Arrange
            // Use existing records from constructor
            ILogger log = new StubLogger();
            PartitionedTestObject _object = new PartitionedTestObject()
            {
                Id          = reference,
                Partition   = "partition",
                InnerObject = "myNewString",
                Doctype     = "show"
            };

            // Act
            await _storageProvider.UpsertAsync(_object);

            // Assert
            IQueryable <PartitionedTestObject> query = (IQueryable <PartitionedTestObject>) await _storageProvider.Query();

            Assert.Equal(2, query.Where(e => e.Partition == "partition").Count());
            Assert.Single(query.Where(e => e.InnerObject == "myNewString" && e.Partition == "partition"));
            Assert.Equal(reference, query.Where(e => e.InnerObject == "myNewString" && e.Partition == "partition").Take(1).ToList().First().Id);
        }
        public async Task UpdateAsyncSucceedsWithValidKeyAndData(string reference)
        {
            // Arrange
            // Use existing records from constructor
            ILogger log = new StubLogger();
            PartitionedTestObject _object = new PartitionedTestObject()
            {
                Id          = reference,
                Partition   = "partition",
                InnerObject = "myNewString",
                Doctype     = "show"
            };

            // Act
            var update = await _storageProvider.UpdateAsync(_object);

            // Assert
            IQueryable <PartitionedTestObject> query = (IQueryable <PartitionedTestObject>) await _storageProvider.Query();

            Assert.True(update);
            Assert.Equal(2, query.Where(doc => doc.Partition == "partition").Count());
            Assert.Equal("myNewString", query.Where(e => e.Id == reference && e.Partition == "partition").Take(1).ToList().First().InnerObject);
            Assert.Single(query.Where(e => e.InnerObject == "myNewString" && e.Partition == "partition"));
        }