Removing optional data property from Error response class (#325)

* Removing optional data property from Error response class

* Fixing broken unit tests
This commit is contained in:
Benjamin Russell
2017-04-24 13:45:33 -07:00
committed by GitHub
parent cf9a81aec9
commit e65699ef75
9 changed files with 26 additions and 57 deletions

View File

@@ -16,11 +16,6 @@ namespace Microsoft.SqlTools.Hosting.Contracts
/// </summary> /// </summary>
public int Code { get; set; } public int Code { get; set; }
/// <summary>
/// Optional information to return with the error
/// </summary>
public object Data { get; set; }
/// <summary> /// <summary>
/// Error message /// Error message
/// </summary> /// </summary>

View File

@@ -39,14 +39,13 @@ namespace Microsoft.SqlTools.Hosting.Protocol
eventParams); eventParams);
} }
public virtual Task SendError(string errorMessage, int errorCode = 0, object data = null) public virtual Task SendError(string errorMessage, int errorCode = 0)
{ {
// Build the error message // Build the error message
Error error = new Error Error error = new Error
{ {
Message = errorMessage, Message = errorMessage,
Code = errorCode, Code = errorCode
Data = data
}; };
return this.messageWriter.WriteMessage( return this.messageWriter.WriteMessage(
Message.ResponseError( Message.ResponseError(
@@ -58,7 +57,7 @@ namespace Microsoft.SqlTools.Hosting.Protocol
public virtual Task SendError(Exception e) public virtual Task SendError(Exception e)
{ {
// Overload to use the parameterized error handler // Overload to use the parameterized error handler
return SendError(e.Message, e.HResult, e.ToString()); return SendError(e.Message, e.HResult);
} }
} }
} }

View File

@@ -76,7 +76,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials
public async Task SaveCredentialThrowsIfCredentialIdMissing() public async Task SaveCredentialThrowsIfCredentialIdMissing()
{ {
string errorResponse = null; string errorResponse = null;
var contextMock = RequestContextMocks.Create<bool>(null).AddErrorHandling((msg, code, obj) => errorResponse = msg); var contextMock = RequestContextMocks.Create<bool>(null).AddErrorHandling((msg, code) => errorResponse = msg);
await service.HandleSaveCredentialRequest(new Credential(null), contextMock.Object); await service.HandleSaveCredentialRequest(new Credential(null), contextMock.Object);
TestUtils.VerifyErrorSent(contextMock); TestUtils.VerifyErrorSent(contextMock);
@@ -87,7 +87,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials
public async Task SaveCredentialThrowsIfPasswordMissing() public async Task SaveCredentialThrowsIfPasswordMissing()
{ {
string errorResponse = null; string errorResponse = null;
var contextMock = RequestContextMocks.Create<bool>(null).AddErrorHandling((msg, code, obj) => errorResponse = msg); var contextMock = RequestContextMocks.Create<bool>(null).AddErrorHandling((msg, code) => errorResponse = msg);
await service.HandleSaveCredentialRequest(new Credential(CredentialId), contextMock.Object); await service.HandleSaveCredentialRequest(new Credential(CredentialId), contextMock.Object);
TestUtils.VerifyErrorSent(contextMock); TestUtils.VerifyErrorSent(contextMock);
@@ -186,7 +186,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials
public async Task ReadCredentialThrowsIfCredentialIsNull() public async Task ReadCredentialThrowsIfCredentialIsNull()
{ {
string errorResponse = null; string errorResponse = null;
var contextMock = RequestContextMocks.Create<Credential>(null).AddErrorHandling((msg, code, obj) => errorResponse = msg); var contextMock = RequestContextMocks.Create<Credential>(null).AddErrorHandling((msg, code) => errorResponse = msg);
// Verify throws on null, and this is sent as an error // Verify throws on null, and this is sent as an error
await service.HandleReadCredentialRequest(null, contextMock.Object); await service.HandleReadCredentialRequest(null, contextMock.Object);
@@ -198,7 +198,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials
public async Task ReadCredentialThrowsIfIdMissing() public async Task ReadCredentialThrowsIfIdMissing()
{ {
string errorResponse = null; string errorResponse = null;
var contextMock = RequestContextMocks.Create<Credential>(null).AddErrorHandling((msg, code, obj) => errorResponse = msg); var contextMock = RequestContextMocks.Create<Credential>(null).AddErrorHandling((msg, code) => errorResponse = msg);
// Verify throws with no ID // Verify throws with no ID
await service.HandleReadCredentialRequest(new Credential(), contextMock.Object); await service.HandleReadCredentialRequest(new Credential(), contextMock.Object);
@@ -228,7 +228,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Credentials
public async Task DeleteCredentialThrowsIfIdMissing() public async Task DeleteCredentialThrowsIfIdMissing()
{ {
object errorResponse = null; object errorResponse = null;
var contextMock = RequestContextMocks.Create<bool>(null).AddErrorHandling((msg, code, obj) => errorResponse = msg); var contextMock = RequestContextMocks.Create<bool>(null).AddErrorHandling((msg, code) => errorResponse = msg);
// Verify throws with no ID // Verify throws with no ID
await service.HandleDeleteCredentialRequest(new Credential(), contextMock.Object); await service.HandleDeleteCredentialRequest(new Credential(), contextMock.Object);

View File

@@ -154,7 +154,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Formatter
public static void VerifyResult<T>(Mock<RequestContext<T>> contextMock, Action verify) public static void VerifyResult<T>(Mock<RequestContext<T>> contextMock, Action verify)
{ {
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once); contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<object>()), Times.Never); contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Never);
verify(); verify();
} }

View File

@@ -93,9 +93,9 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.LanguageServer
requestContext = new Mock<RequestContext<Location[]>>(); requestContext = new Mock<RequestContext<Location[]>>();
requestContext.Setup(rc => rc.SendResult(It.IsAny<Location[]>())) requestContext.Setup(rc => rc.SendResult(It.IsAny<Location[]>()))
.Returns(Task.FromResult(0)); .Returns(Task.FromResult(0));
requestContext.Setup(rc => rc.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<object>())).Returns(Task.FromResult(0));; requestContext.Setup(rc => rc.SendError(It.IsAny<string>(), It.IsAny<int>())).Returns(Task.FromResult(0));
requestContext.Setup(r => r.SendEvent(It.IsAny<EventType<TelemetryParams>>(), It.IsAny<TelemetryParams>())).Returns(Task.FromResult(0));; requestContext.Setup(r => r.SendEvent(It.IsAny<EventType<TelemetryParams>>(), It.IsAny<TelemetryParams>())).Returns(Task.FromResult(0));
requestContext.Setup(r => r.SendEvent(It.IsAny<EventType<StatusChangeParams>>(), It.IsAny<StatusChangeParams>())).Returns(Task.FromResult(0));; requestContext.Setup(r => r.SendEvent(It.IsAny<EventType<StatusChangeParams>>(), It.IsAny<StatusChangeParams>())).Returns(Task.FromResult(0));
// setup the IBinder mock // setup the IBinder mock
binder = new Mock<IBinder>(); binder = new Mock<IBinder>();
@@ -129,7 +129,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.LanguageServer
await definitionTask; await definitionTask;
// verify that send result was not called and send error was called // verify that send result was not called and send error was called
requestContext.Verify(m => m.SendResult(It.IsAny<Location[]>()), Times.Never()); requestContext.Verify(m => m.SendResult(It.IsAny<Location[]>()), Times.Never());
requestContext.Verify(m => m.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<object>()), Times.Once()); requestContext.Verify(m => m.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Once());
} }
/// <summary> /// <summary>

View File

@@ -37,7 +37,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.ObjectExplorer
{ {
object errorResponse = null; object errorResponse = null;
var contextMock = RequestContextMocks.Create<CreateSessionResponse>(null) var contextMock = RequestContextMocks.Create<CreateSessionResponse>(null)
.AddErrorHandling((errorMessage, errorCode, obj) => errorResponse = errorMessage); .AddErrorHandling((errorMessage, errorCode) => errorResponse = errorMessage);
await service.HandleCreateSessionRequest(null, contextMock.Object); await service.HandleCreateSessionRequest(null, contextMock.Object);
VerifyErrorSent(contextMock); VerifyErrorSent(contextMock);
@@ -177,14 +177,14 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.ObjectExplorer
private void VerifyResult<T>(Mock<RequestContext<T>> contextMock, Action<T> verify, T actual) private void VerifyResult<T>(Mock<RequestContext<T>> contextMock, Action<T> verify, T actual)
{ {
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once); contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<object>()), Times.Never); contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Never);
verify(actual); verify(actual);
} }
private void VerifyErrorSent<T>(Mock<RequestContext<T>> contextMock) private void VerifyErrorSent<T>(Mock<RequestContext<T>> contextMock)
{ {
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Never); contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Never);
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<object>()), Times.Once); contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Once);
} }
} }

View File

@@ -64,37 +64,12 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility
return this; return this;
} }
public EventFlowValidator<TRequestContext> AddCompleteErrorValidation<TErrorObj>(Action<string, int> paramValidation,
Action<TErrorObj> dataValidation)
{
// Put together a validator that checks for null and adds the provided validators
Action<Error> validator = e =>
{
Assert.NotNull(e);
paramValidation(e.Message, e.Code);
Assert.IsType<TErrorObj>(e.Data);
dataValidation((TErrorObj) e.Data);
};
// Add the expected error
expectedEvents.Add(new ExpectedEvent
{
EventType = EventTypes.Error,
ParamType = typeof(Error),
Validator = validator
});
return this;
}
public EventFlowValidator<TRequestContext> AddSimpleErrorValidation(Action<string, int> paramValidation) public EventFlowValidator<TRequestContext> AddSimpleErrorValidation(Action<string, int> paramValidation)
{ {
// Put together a validator that ensures a null data // Put together a validator that ensures a null data
Action<Error> validator = e => Action<Error> validator = e =>
{ {
Assert.NotNull(e); Assert.NotNull(e);
Assert.Null(e.Data);
paramValidation(e.Message, e.Code); paramValidation(e.Message, e.Code);
}; };
@@ -130,7 +105,7 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility
.Returns(Task.FromResult(0)); .Returns(Task.FromResult(0));
// Add general handler for error event // Add general handler for error event
requestContext.AddErrorHandling((msg, code, obj) => requestContext.AddErrorHandling((msg, code) =>
{ {
receivedEvents.Add(new ReceivedEvent receivedEvents.Add(new ReceivedEvent
{ {

View File

@@ -48,14 +48,14 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility
public static Mock<RequestContext<TResponse>> AddErrorHandling<TResponse>( public static Mock<RequestContext<TResponse>> AddErrorHandling<TResponse>(
this Mock<RequestContext<TResponse>> mock, this Mock<RequestContext<TResponse>> mock,
Action<string, int, object> errorCallback) Action<string, int> errorCallback)
{ {
// Setup the mock for SendError // Setup the mock for SendError
var sendErrorFlow = mock.Setup(rc => rc.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<object>())) var sendErrorFlow = mock.Setup(rc => rc.SendError(It.IsAny<string>(), It.IsAny<int>()))
.Returns(Task.FromResult(0)); .Returns(Task.FromResult(0));
if (errorCallback != null) if (errorCallback != null)
{ {
sendErrorFlow.Callback<string, int, object>(errorCallback); sendErrorFlow.Callback<string, int>(errorCallback);
} }
return mock; return mock;

View File

@@ -40,20 +40,20 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.Utility
public static void VerifyErrorSent<T>(Mock<RequestContext<T>> contextMock) public static void VerifyErrorSent<T>(Mock<RequestContext<T>> contextMock)
{ {
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Never); contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Never);
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<object>()), Times.Once); contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Once);
} }
public static void VerifyResult<T, U>(Mock<RequestContext<T>> contextMock, U expected, U actual) public static void VerifyResult<T, U>(Mock<RequestContext<T>> contextMock, U expected, U actual)
{ {
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once); contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
Assert.Equal(expected, actual); Assert.Equal(expected, actual);
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<object>()), Times.Never); contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Never);
} }
public static void VerifyResult<T>(Mock<RequestContext<T>> contextMock, Action<T> verify, T actual) public static void VerifyResult<T>(Mock<RequestContext<T>> contextMock, Action<T> verify, T actual)
{ {
contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once); contextMock.Verify(c => c.SendResult(It.IsAny<T>()), Times.Once);
contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<object>()), Times.Never); contextMock.Verify(c => c.SendError(It.IsAny<string>(), It.IsAny<int>()), Times.Never);
verify(actual); verify(actual);
} }