示例#1
0
        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);
        }
示例#2
0
        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"]);
        }
示例#3
0
        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");
        }
示例#5
0
        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);
        }
示例#6
0
        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");
        }
示例#7
0
        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);
        }
示例#8
0
        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");
        }
示例#9
0
        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);
        }
示例#10
0
        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");
        }
示例#11
0
        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");
        }
示例#12
0
        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");
        }
示例#13
0
        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");
        }
示例#14
0
        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);
        }
示例#15
0
        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);
        }
示例#16
0
    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);
    }
示例#17
0
        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);
        }