public void TryAdd_ThrowsJsonPatchException_IfPropertyDoesNotExist_Inheritance() { // Arrange var adapter = new PocoAdapter(); var options = new JsonSerializerOptions(); var model = new Customer(); var expectedErrorMessage = "The target location specified by path segment 'CreatedDate' was not found."; // Act var addStatus = adapter.TryAdd(model, typeof(UpdatableCustomer), "CreatedDate", options, "2020-10-04T23:00:00.000Z", out var errorMessage); // Assert Assert.False(addStatus); Assert.Equal(expectedErrorMessage, errorMessage); }
public void Basics() { var poco = new TestPoco { Foo = "Foo", Bar = 42, Baz = true, Nullable = Math.PI }; var adapter = new PocoAdapter(typeof(TestPoco)); var record = new PocoRecord(adapter, poco); Assert.AreEqual("Foo", record["foo"]); Assert.AreEqual(42, record["bar"]); Assert.AreEqual(true, record["baz"]); Assert.ThrowsException <IndexOutOfRangeException>(() => record.GetOrdinal("WriteOnly")); Assert.ThrowsException <ArgumentException>(() => record["DoesntExist"]); Assert.AreEqual(Math.PI, record["Nullable"]); Assert.AreEqual(DBNull.Value, record["NullableNull"]); }
public void TryTest_DoesNotThrowException_IfTestSuccessful() { var adapter = new PocoAdapter(); var options = new JsonSerializerOptions(); var model = new Customer { Name = "Joana" }; // Act var testStatus = adapter.TryTest(model, typeof(Customer), "Name", options, "Joana", out var errorMessage); // Assert Assert.Equal("Joana", model.Name); Assert.True(testStatus); Assert.True(string.IsNullOrEmpty(errorMessage), "Expected no error message"); }
public void TryTest_DoesNotThrowException_IfTestSuccessful() { var adapter = new PocoAdapter(); var contractResolver = new DefaultContractResolver(); var model = new Customer { Name = "Joana" }; // Act var testStatus = adapter.TryTest(model, "Name", contractResolver, "Joana", out var errorMessage); // Assert Assert.Equal("Joana", model.Name); Assert.True(testStatus); Assert.True(string.IsNullOrEmpty(errorMessage), "Expected no error message"); }
public void TryRemove_ThrowsJsonPatchException_IfPropertyDoesNotExist() { // Arrange var adapter = new PocoAdapter(); var options = new JsonSerializerOptions(); var model = new Customer { Name = "Joana" }; var expectedErrorMessage = "The target location specified by path segment 'LastName' was not found."; // Act var removeStatus = adapter.TryRemove(model, typeof(Customer), "LastName", options, out var errorMessage); // Assert Assert.False(removeStatus); Assert.Equal(expectedErrorMessage, errorMessage); }
public void TryGet_ExistingProperty() { // Arrange var adapter = new PocoAdapter(); var options = new JsonSerializerOptions(); var model = new Customer { Name = "Joana" }; // Act var getStatus = adapter.TryGet(model, typeof(Customer), "Name", options, out var value, out var errorMessage); // Assert Assert.Equal("Joana", value); Assert.True(getStatus); Assert.True(string.IsNullOrEmpty(errorMessage), "Expected no error message"); }
public void TryTest_ThrowsJsonPatchException_IfTestFails() { // Arrange var adapter = new PocoAdapter(); var options = new JsonSerializerOptions(); var model = new Customer { Name = "Joana" }; var expectedErrorMessage = "The current value 'Joana' at path 'Name' is not equal to the test value 'John'."; // Act var testStatus = adapter.TryTest(model, typeof(Customer), "Name", options, "John", out var errorMessage); // Assert Assert.False(testStatus); Assert.Equal(expectedErrorMessage, errorMessage); }
public void TryReplace_OverwritesExistingValue() { // Arrange var adapter = new PocoAdapter(); var options = new JsonSerializerOptions(); var model = new Customer { Name = "Joana" }; // Act var replaceStatus = adapter.TryReplace(model, typeof(Customer), "Name", options, "John", out var errorMessage); // Assert Assert.Equal("John", model.Name); Assert.True(replaceStatus); Assert.True(string.IsNullOrEmpty(errorMessage), "Expected no error message"); }
public void TryRemove_ThrowsJsonPatchException_IfPropertyDoesNotExist_Inheritance() { // Arrange var adapter = new PocoAdapter(); var options = new JsonSerializerOptions(); var model = new Customer { CreatedDate = new DateTime(2020, 10, 4, 23, 0, 0) }; var expectedErrorMessage = "The target location specified by path segment 'CreatedDate' was not found."; // Act var removeStatus = adapter.TryRemove(model, typeof(UpdatableCustomer), "CreatedDate", options, out var errorMessage); // Assert Assert.False(removeStatus); Assert.Equal(expectedErrorMessage, errorMessage); }
public void TryRemove_SetsPropertyToNull() { // Arrange var adapter = new PocoAdapter(); var contractResolver = new DefaultContractResolver(); var model = new Customer { Name = "Joana" }; // Act var removeStatus = adapter.TryRemove(model, "Name", contractResolver, out var errorMessage); // Assert Assert.Null(model.Name); Assert.True(removeStatus); Assert.True(string.IsNullOrEmpty(errorMessage), "Expected no error message"); }
public void TryAdd_ReplacesExistingProperty() { // Arrange var adapter = new PocoAdapter(); var contractResolver = new DefaultContractResolver(); var model = new Customer { Name = "Joana" }; // Act var addStatus = adapter.TryAdd(model, "Name", contractResolver, "John", out var errorMessage); // Assert Assert.Equal("John", model.Name); Assert.True(addStatus); Assert.True(string.IsNullOrEmpty(errorMessage), "Expected no error message"); }
public void TryRemove_SetsPropertyToNull() { // Arrange var adapter = new PocoAdapter(); var options = new JsonSerializerOptions(); var model = new Customer { Name = "Joana" }; // Act var removeStatus = adapter.TryRemove(model, typeof(Customer), "Name", options, out var errorMessage); // Assert Assert.Null(model.Name); Assert.True(removeStatus); Assert.True(string.IsNullOrEmpty(errorMessage), "Expected no error message"); }
public void TryGet_ExistingProperty() { // Arrange var adapter = new PocoAdapter(); var contractResolver = new DefaultContractResolver(); var model = new Customer { Name = "Joana" }; // Act var getStatus = adapter.TryGet(model, "Name", contractResolver, out var value, out var errorMessage); // Assert Assert.Equal("Joana", value); Assert.True(getStatus); Assert.True(string.IsNullOrEmpty(errorMessage), "Expected no error message"); }
public void TryAdd_ThrowsJsonPatchException_IfPropertyDoesNotExist() { // Arrange var adapter = new PocoAdapter(); var contractResolver = new DefaultContractResolver(); var model = new Customer { Name = "Joana" }; var expectedErrorMessage = "The target location specified by path segment 'LastName' was not found."; // Act var addStatus = adapter.TryAdd(model, "LastName", contractResolver, "Smith", out var errorMessage); // Assert Assert.False(addStatus); Assert.Equal(expectedErrorMessage, errorMessage); }
public void TryTest_ThrowsJsonPatchException_IfTestFails() { // Arrange var adapter = new PocoAdapter(); var contractResolver = new DefaultContractResolver(); var model = new Customer { Name = "Joana" }; var expectedErrorMessage = "The current value 'Joana' at path 'Name' is not equal to the test value 'John'."; // Act var testStatus = adapter.TryTest(model, "Name", contractResolver, "John", out var errorMessage); // Assert Assert.False(testStatus); Assert.Equal(expectedErrorMessage, errorMessage); }
public void TryReplace_UsesCustomConverter() { // Arrange var adapter = new PocoAdapter(); var contractResolver = new RectangleContractResolver(); var model = new Square() { Rectangle = new Rectangle() { RectangleProperty = "Square" } }; // Act var replaceStatus = adapter.TryReplace(model, "Rectangle", contractResolver, "Oval", out var errorMessage); // Assert Assert.Equal("Oval", model.Rectangle.RectangleProperty); Assert.True(replaceStatus); }
public void TryReplace_ThrowsJsonPatchException_IfNewValueIsInvalidType() { // Arrange var adapter = new PocoAdapter(); var contractResolver = new DefaultContractResolver(); var model = new Customer { Age = 25 }; var expectedErrorMessage = "The value 'TwentySix' is invalid for target location."; // Act var replaceStatus = adapter.TryReplace(model, "Age", contractResolver, "TwentySix", out var errorMessage); // Assert Assert.Equal(25, model.Age); Assert.False(replaceStatus); Assert.Equal(expectedErrorMessage, errorMessage); }