public async Task ReplaceItemAsync_Validation(string propName, object propValue)
        {
            // Arrange
            var id       = GetRandomId();
            var original = MovieServer.GetMovieById(id) !;
            var expected = ClientMovie.From(original);
            var entity   = expected.Clone();

            switch (propName)
            {
            case "duration": entity.Duration = (int)propValue; break;

            case "rating": entity.Rating = (string)propValue; break;

            case "title": entity.Title = (string)propValue; break;

            case "year": entity.Year = (int)propValue; break;
            }

            // Act
            var exception = await Assert.ThrowsAsync <DatasyncInvalidOperationException>(() => table.ReplaceItemAsync(entity)).ConfigureAwait(false);

            var stored = MovieServer.GetMovieById(id);

            // Assert
            Assert.Equal(HttpStatusCode.BadRequest, exception.Response?.StatusCode);
            Assert.Equal <IMovie>(expected, stored);
            Assert.Equal <ITableData>(original, stored);
        }
        public async Task ReplaceItemAsync_ConditionalFailure()
        {
            // Arrange
            var id       = GetRandomId();
            var original = MovieServer.GetMovieById(id) !;
            var expected = ClientMovie.From(original);

            expected.Title   = "Replacement Title";
            expected.Rating  = "PG-13";
            expected.Version = "dGVzdA==";

            // Act
            var exception = await Assert.ThrowsAsync <DatasyncConflictException <ClientMovie> >(() => table.ReplaceItemAsync(expected)).ConfigureAwait(false);

            // Assert
            Assert.NotNull(exception.Request);
            Assert.NotNull(exception.Response);
            Assert.Equal(MovieCount, MovieServer.GetMovieCount());
            var entity = MovieServer.GetMovieById(id);

            Assert.NotNull(entity);
            AssertEx.SystemPropertiesSet(entity, startTime);
            AssertEx.SystemPropertiesMatch(entity, exception.Item);
            Assert.Equal <IMovie>(original, exception.Item);
            Assert.Equal <IMovie>(original, entity);
            Assert.Equal <ITableData>(original, entity);
            AssertEx.ResponseHasConditionalHeaders(entity, exception.Response);
        }
        public async Task DeleteItemAsync_ConditionalFailure()
        {
            await InitializeAsync();

            // Arrange
            var id       = GetRandomId();
            var expected = MovieServer.GetMovieById(id);
            var item     = ClientMovie.From(MovieServer.GetMovieById(id));

            await ModifyServerVersionAsync(id);

            // Act
            await table !.DeleteItemAsync(item);

            Assert.Equal(MovieCount, MovieServer.GetMovieCount());

            var exception = await Assert.ThrowsAsync <PushFailedException>(() => table !.PushItemsAsync());

            // Assert
            Assert.Equal(MovieCount, MovieServer.GetMovieCount());
            var entity = MovieServer.GetMovieById(id);

            // Check the PushFailedException
            Assert.Single(exception.PushResult.Errors);
            var error = exception.PushResult.Errors.First();

            AssertSystemPropertiesMatch(entity, error.Result);
        }
Ejemplo n.º 4
0
        public async Task ReplaceItemAsync_SoftDeleted_ReturnsGone()
        {
            // Arrange
            var id = GetRandomId();
            await MovieServer.SoftDeleteMoviesAsync(x => x.Id == id).ConfigureAwait(false);

            var original = MovieServer.GetMovieById(id) !;
            var expected = ClientMovie.From(original);

            expected.Title  = "Replacement Title";
            expected.Rating = "PG-13";
            var json = CreateJsonDocument(expected);

            var table = client.GetRemoteTable("soft");

            // Act
            var exception = await Assert.ThrowsAsync <DatasyncInvalidOperationException>(() => soft.ReplaceItemAsync(json)).ConfigureAwait(false);

            var stored = MovieServer.GetMovieById(id).Clone();

            // Assert
            Assert.Equal(HttpStatusCode.Gone, exception.Response?.StatusCode);
            Assert.Equal <IMovie>(original, stored);
            Assert.Equal <ITableData>(original, stored);
        }
Ejemplo n.º 5
0
        public async Task ReplaceItemAsync_Validation(string propName, object propValue)
        {
            await InitializeAsync();

            // Arrange
            var id       = GetRandomId();
            var original = MovieServer.GetMovieById(id) !;
            var expected = ClientMovie.From(original);
            var entity   = expected.Clone();

            switch (propName)
            {
            case "duration": entity.Duration = (int)propValue; break;

            case "rating": entity.Rating = (string)propValue; break;

            case "title": entity.Title = (string)propValue; break;

            case "year": entity.Year = (int)propValue; break;
            }

            // Act
            await table !.ReplaceItemAsync(entity);
            var   exception = await Assert.ThrowsAsync <PushFailedException>(() => table !.PushItemsAsync());

            var stored = MovieServer.GetMovieById(id);

            // Assert
            Assert.Single(exception.PushResult.Errors);
        }
        public async Task DeleteItemAsync_ConditionalSuccess()
        {
            // Arrange
            var id   = GetRandomId();
            var item = ClientMovie.From(MovieServer.GetMovieById(id));

            // Act
            await table.DeleteItemAsync(item).ConfigureAwait(false);

            // Assert
            Assert.Equal(MovieCount - 1, MovieServer.GetMovieCount());
            Assert.Null(MovieServer.GetMovieById(id));
        }
        public async Task DeleteItemAsync_SoftDelete()
        {
            // Arrange
            var id   = GetRandomId();
            var item = ClientMovie.From(MovieServer.GetMovieById(id));

            // Act
            await soft.DeleteItemAsync(item).ConfigureAwait(false);

            // Assert
            Assert.Equal(MovieCount, MovieServer.GetMovieCount());
            var entity = MovieServer.GetMovieById(id) !;

            Assert.True(entity.Deleted);
        }
        public async Task DeleteItemAsync_Basic()
        {
            await InitializeAsync();

            // Arrange
            var id   = GetRandomId();
            var item = ClientMovie.From(MovieServer.GetMovieById(id));

            // Act
            await table !.DeleteItemAsync(item);

            Assert.Equal(MovieCount, MovieServer.GetMovieCount());

            await table !.PushItemsAsync();

            Assert.Equal(MovieCount - 1, MovieServer.GetMovieCount());
            Assert.Null(MovieServer.GetMovieById(id));
        }
        public async Task DeleteItemAsync_GoneWhenDeleted()
        {
            // Arrange
            var id   = GetRandomId();
            var item = ClientMovie.From(MovieServer.GetMovieById(id));
            await MovieServer.SoftDeleteMoviesAsync(x => x.Id == id).ConfigureAwait(false);

            // Act
            var exception = await Assert.ThrowsAsync <DatasyncInvalidOperationException>(() => soft.DeleteItemAsync(item)).ConfigureAwait(false);

            // Assert
            Assert.NotNull(exception.Request);
            Assert.NotNull(exception.Response);
            Assert.Equal(HttpStatusCode.Gone, exception.Response?.StatusCode);
            Assert.Equal(MovieCount, MovieServer.GetMovieCount());
            var entity = MovieServer.GetMovieById(id);

            Assert.True(entity.Deleted);
        }
Ejemplo n.º 10
0
        public async Task ReplaceItemAsync_ConditionalFailure()
        {
            await InitializeAsync();

            // Arrange
            var id       = GetRandomId();
            var original = MovieServer.GetMovieById(id) !;
            var expected = ClientMovie.From(original);

            expected.Title   = "Replacement Title";
            expected.Rating  = "PG-13";
            expected.Version = "dGVzdA==";

            // Act
            await table !.ReplaceItemAsync(expected);
            var   exception = await Assert.ThrowsAsync <PushFailedException>(() => table !.PushItemsAsync());

            // Assert
            Assert.Single(exception.PushResult.Errors);
        }
        public async Task ReplaceItemAsync_Basic()
        {
            // Arrange
            var id       = GetRandomId();
            var original = MovieServer.GetMovieById(id) !;
            var expected = ClientMovie.From(original);

            expected.Title  = "Replacement Title";
            expected.Rating = "PG-13";
            var response = expected.Clone();

            // Act
            await table.ReplaceItemAsync(response).ConfigureAwait(false);

            var stored = MovieServer.GetMovieById(id);

            // Assert
            Assert.Equal <IMovie>(expected, stored);
            AssertEx.SystemPropertiesChanged(original, stored);
            AssertEx.SystemPropertiesMatch(stored, response);
        }
Ejemplo n.º 12
0
        public async Task ReplaceItemAsync_SoftNotDeleted()
        {
            // Arrange
            var id       = GetRandomId();
            var original = MovieServer.GetMovieById(id) !;
            var expected = ClientMovie.From(original);

            expected.Title  = "Replacement Title";
            expected.Rating = "PG-13";
            var json = CreateJsonDocument(expected);

            // Act
            var response = await soft.ReplaceItemAsync(json).ConfigureAwait(false);

            var stored = MovieServer.GetMovieById(id).Clone();

            // Assert
            Assert.Equal <IMovie>(expected, stored);
            AssertEx.SystemPropertiesChanged(original, stored);
            AssertJsonDocumentMatches(stored, response);
        }
Ejemplo n.º 13
0
        public async Task ReplaceItemAsync_Basic()
        {
            await InitializeAsync();

            // Arrange
            var id       = GetRandomId();
            var original = MovieServer.GetMovieById(id) !;
            var expected = ClientMovie.From(original);

            expected.Title  = "Replacement Title";
            expected.Rating = "PG-13";

            // Act
            await table !.ReplaceItemAsync(expected);
            await table !.PushItemsAsync();
            var   response = await table !.GetItemAsync(id);

            var stored = MovieServer.GetMovieById(id);

            // Assert
            Assert.Equal <IMovie>(expected, stored);
            AssertEx.SystemPropertiesChanged(original, stored);
            AssertEx.SystemPropertiesMatch(stored, response);
        }