Refactor invalid operation exception handling (#87)
Addresses part of #80
This commit is contained in:
parent
a8b6fa757a
commit
c816bce13a
|
|
@ -2,26 +2,21 @@
|
|||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using Microsoft.AspNetCore.JsonPatch.Exceptions;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Microsoft.AspNetCore.JsonPatch.Operations
|
||||
{
|
||||
public class OperationBase
|
||||
{
|
||||
private string _op;
|
||||
private OperationType _operationType;
|
||||
|
||||
[JsonIgnore]
|
||||
public OperationType OperationType
|
||||
{
|
||||
get
|
||||
{
|
||||
OperationType result;
|
||||
if (!Enum.TryParse(op, ignoreCase: true, result: out result))
|
||||
{
|
||||
throw new JsonPatchException(
|
||||
Resources.FormatInvalidJsonPatchOperation(op),
|
||||
innerException: null);
|
||||
}
|
||||
return result;
|
||||
return _operationType;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -29,7 +24,23 @@ namespace Microsoft.AspNetCore.JsonPatch.Operations
|
|||
public string path { get; set; }
|
||||
|
||||
[JsonProperty("op")]
|
||||
public string op { get; set; }
|
||||
public string op
|
||||
{
|
||||
get
|
||||
{
|
||||
return _op;
|
||||
}
|
||||
set
|
||||
{
|
||||
OperationType result;
|
||||
if (!Enum.TryParse(value, ignoreCase: true, result: out result))
|
||||
{
|
||||
result = OperationType.Invalid;
|
||||
}
|
||||
_operationType = result;
|
||||
_op = value;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonProperty("from")]
|
||||
public string from { get; set; }
|
||||
|
|
|
|||
|
|
@ -75,6 +75,9 @@ namespace Microsoft.AspNetCore.JsonPatch.Operations
|
|||
break;
|
||||
case OperationType.Test:
|
||||
throw new JsonPatchException(new JsonPatchError(objectToApplyTo, this, Resources.TestOperationNotSupported));
|
||||
case OperationType.Invalid:
|
||||
throw new JsonPatchException(
|
||||
Resources.FormatInvalidJsonPatchOperation(op), innerException: null);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ namespace Microsoft.AspNetCore.JsonPatch.Operations
|
|||
Replace,
|
||||
Move,
|
||||
Copy,
|
||||
Test
|
||||
Test,
|
||||
Invalid
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.JsonPatch.Operations
|
||||
{
|
||||
public class OperationBaseTests
|
||||
{
|
||||
[Theory]
|
||||
[InlineData("ADd", OperationType.Add)]
|
||||
[InlineData("Copy", OperationType.Copy)]
|
||||
[InlineData("mOVE", OperationType.Move)]
|
||||
[InlineData("REMOVE", OperationType.Remove)]
|
||||
[InlineData("replace", OperationType.Replace)]
|
||||
[InlineData("TeSt", OperationType.Test)]
|
||||
public void SetValidOperationType(string op, OperationType operationType)
|
||||
{
|
||||
// Arrange
|
||||
var operationBase = new OperationBase();
|
||||
operationBase.op = op;
|
||||
|
||||
// Act & Assert
|
||||
Assert.Equal(operationType, operationBase.OperationType);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData("invalid", OperationType.Invalid)]
|
||||
[InlineData("coppy", OperationType.Invalid)]
|
||||
[InlineData("notvalid", OperationType.Invalid)]
|
||||
public void InvalidOperationType_SetsOperationTypeInvalid(string op, OperationType operationType)
|
||||
{
|
||||
// Arrange
|
||||
var operationBase = new OperationBase();
|
||||
operationBase.op = op;
|
||||
|
||||
// Act & Assert
|
||||
Assert.Equal(operationType, operationBase.OperationType);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue