public void ValidateWorkOrderAckShouldReturnFalseIfAckIsNull() { string validationMessage = string.Empty; ValidationService validationService = new ValidationService(); WorkOrderAck workOrderAck = null; string errorMessage; string expectedMessage = "Service Bus Queue message is null"; bool isValid = validationService.IsValidWorkOrder(workOrderAck, out errorMessage); Assert.Equal(expectedMessage, errorMessage); Assert.False(isValid); }
public async Task Run([ServiceBusTrigger("%WorkOrderCreateQueueName%", Connection = "ServiceBusConnection")] Message queueMessage, ILogger log) { WorkOrderAck workOrderAck = null; string messageContents = null; try { if (queueMessage != null) { // Deserialize message contents into work order ack class messageContents = Encoding.UTF8.GetString(queueMessage.Body); workOrderAck = JsonConvert.DeserializeObject <WorkOrderAck>(messageContents); log.LogInformation( "Recieved work order acknowledgment message for work order ID {workOrderId}, related to FaultName '{faultName}' with FaultActiveTime of '{faultActiveTime}' and AssetPath of '{assetPath}'. Message content: {messageContent}", workOrderAck.WorkOrderId, workOrderAck.FaultName, workOrderAck.FaultActiveTime, workOrderAck.AssetPath, messageContents); } } catch (JsonException je) { log.LogError( "Exception while processing message, {queueMessageContent}. Exception: {exceptionMessage}", messageContents, je.Message); await this.errorQueueService.SendMessageToErrorQueueAsync(messageContents, je.Message).ConfigureAwait(false); return; } // validate work order ack properties if (!this.validationService.IsValidWorkOrder(workOrderAck, out string validationMessage)) { log.LogError( "Work Order ack data failed validation. Validation Message: {validationMessage}", validationMessage); await this.errorQueueService.SendMessageToErrorQueueAsync(messageContents, validationMessage).ConfigureAwait(false); } else { // Serialize message contents var sendMessage = JsonConvert.SerializeObject(workOrderAck); // Send Message to IoTHub await this.iconicsService.SendWorkOrderMessageAsync(sendMessage).ConfigureAwait(false); } }
public void ValidateWorkOrderAckShouldReturnMessageIfInvalidWorkOrderUrl() { ValidationService validationService = new ValidationService(); WorkOrderAck workOrderAck = new WorkOrderAck() { AssetPath = "AssetPath", FaultActiveTime = "FaultActiveTime", FaultName = "FaultName", WorkOrderStatus = "WorkOrderStatus", }; string errorMessage; bool isValid = validationService.IsValidWorkOrder(workOrderAck, out errorMessage); string expectedMessage = $"One or more required fields were not provided. Asset Path: {workOrderAck.AssetPath}. Fault Active Time: {workOrderAck.FaultActiveTime}. Fault Name: {workOrderAck.FaultName}. Work Order Status: {workOrderAck.WorkOrderStatus}. Work Order ID: {workOrderAck.WorkOrderId} . Work Order Url: {workOrderAck.WorkOrderUrl}."; Assert.Equal(expectedMessage, errorMessage); Assert.False(isValid); }
public void ValidateWorkOrderAckShouldReturnNullIfValid() { ValidationService validationService = new ValidationService(); WorkOrderAck workOrderAck = new WorkOrderAck() { AssetPath = "AssetPath", FaultActiveTime = "FaultActiveTime", FaultName = "FaultName", WorkOrderStatus = "WorkOrderStatus", WorkOrderId = "WorkOrderId", WorkOrderUrl = "WorkOrderUrl", }; string errorMessage; bool isValid = validationService.IsValidWorkOrder(workOrderAck, out errorMessage); Assert.True(isValid); }
/// <summary> /// Method definition to check if Work Order Acknowledgment Data is valid. Returns true if valid. /// </summary> /// <param name="ack">Work Order Acknowledgment Data.</param> /// <param name="validationMessage">Validation Message content.</param> /// <returns>Returns true or false indicating the status of the validation.</returns> public bool IsValidWorkOrder(WorkOrderAck ack, out string validationMessage) { bool isValid = true; validationMessage = string.Empty; if (ack != null) { if (string.IsNullOrEmpty(ack.AssetPath) || string.IsNullOrEmpty(ack.FaultActiveTime) || string.IsNullOrEmpty(ack.FaultName) || string.IsNullOrEmpty(ack.WorkOrderStatus) || string.IsNullOrEmpty(ack.WorkOrderId) || string.IsNullOrEmpty(ack.WorkOrderUrl)) { validationMessage = $"One or more required fields were not provided. Asset Path: {ack.AssetPath}. Fault Active Time: {ack.FaultActiveTime}. Fault Name: {ack.FaultName}. Work Order Status: {ack.WorkOrderStatus}. Work Order ID: {ack.WorkOrderId} . Work Order Url: {ack.WorkOrderUrl}."; isValid = false; } } else { validationMessage = Resources.SBQueueMsgNull; isValid = false; } return(isValid); }
public async void ShouldRunUnsuccessfullyOnInvalidAck() { // mock calls to return true string validationMessage; this.validationServiceMock.Setup(service => service.IsValidWorkOrder(It.IsAny <WorkOrderAck>(), out validationMessage)).Returns(false); // create message to pass to Run method WorkOrderAck workOrderAck = new WorkOrderAck() { AssetPath = "AssetPath", FaultActiveTime = "FaultActiveTime", FaultName = "FaultName", WorkOrderStatus = "WorkOrderStatus", WorkOrderId = "WorkOrderId", WorkOrderUrl = "WorkOrderUrl", WorkOrderCreatedOn = "WorkOrderCreatedOn", WorkOrderModifiedOn = "WorkOrderModifiedOn", }; string messageBody = JsonConvert.SerializeObject(workOrderAck); Message message = new Message(Encoding.UTF8.GetBytes(messageBody)); // set actualMessageContents equal to the first parameter passed into the SendMessageToErrorQueue method which should be called within the Run method string actualMessageContents = null; this.errorQueueServiceMock.Setup(service => service.SendMessageToErrorQueueAsync(It.IsAny <string>(), It.IsAny <string>())).Callback <string, string>((messageContents, validationMessage) => actualMessageContents = messageContents); // instantiate function class and run function SendWorkOrderAck function = new SendWorkOrderAck(this.iconicsServiceMock.Object, this.validationServiceMock.Object, this.errorQueueServiceMock.Object); await function.Run(message, this.logger).ConfigureAwait(false); // verify that SendMessageToErrorQueue was called and received the correct messageContents parameter string expectedErrorText = "Work Order ack data failed validation. Validation Message:"; this.errorQueueServiceMock.Verify(service => service.SendMessageToErrorQueueAsync(It.IsAny <string>(), It.IsAny <string>()), Times.Once); Assert.Equal(Encoding.UTF8.GetString(message.Body), actualMessageContents); Assert.Contains(expectedErrorText, this.logger.Logs[1], System.StringComparison.OrdinalIgnoreCase); }