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); }
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); }
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); }
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); }
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); }
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); }