public void SendSms_Invalid(InvalidType validType, string expectedCode, string expectedMessage) { using (var resources = new Resources()) { //Given var requestModel = new SendSmsCommandModel { MessageId = validType == InvalidType.InvalidMessageId ? null : Guid.NewGuid().ToString(), PhoneNumber = validType == InvalidType.InvalidPhone? null : "+27846005192", TextMessage = validType == InvalidType.InvalidMessage ? null : "This is a test SMS Message" }; //setup SmsGateway SendSms resources.SmsGateway.Setup(x => x.SendSms(It.Is <Provider1SmsRequest>(m => m.UniqueId == requestModel.MessageId && m.Phone == requestModel.PhoneNumber && m.Message == requestModel.TextMessage))).Returns(new HttpResponseMessage(System.Net.HttpStatusCode.OK)); //When var result = resources.Controller.SendSms(requestModel) as BadRequestObjectResult; //Then Assert.IsNotNull(result); Assert.IsTrue(result.StatusCode == 400); var validResult = result.Value as ValidationResult; Assert.False(validResult.IsValid); Assert.IsNotEmpty(validResult.Messages); var validationMessage = validResult.Messages[0]; Assert.AreEqual(expectedCode, validationMessage.Code); Assert.AreEqual(expectedMessage, validationMessage.MessageText); //verify no calls were made resources.LogHelper.Verify(x => x.LogMessage(It.Is <string>(m => m == $"SMS sent for messageId: { requestModel.MessageId}")), Times.Never); resources.SmsGateway.Verify(x => x.SendSms(It.Is <Provider1SmsRequest>(m => m.UniqueId == requestModel.MessageId && m.Phone == requestModel.PhoneNumber && m.Message == requestModel.TextMessage)), Times.Never); resources.EventBus.Verify(x => x.PublishEvent(It.Is <SmsSentEvent>(m => m.MessageId == requestModel.MessageId && m.PhoneNumber == requestModel.PhoneNumber && m.TextMessage == requestModel.TextMessage)), Times.Never); resources.LogHelper.VerifyNoOtherCalls(); resources.SmsGateway.VerifyNoOtherCalls(); resources.EventBus.VerifyNoOtherCalls(); } }
public void SendSms_BadRequest() { using (var resources = new Resources()) { //Given var requestModel = new SendSmsCommandModel { MessageId = Guid.NewGuid().ToString(), PhoneNumber = "+27846005192", TextMessage = "This is a test SMS Message" }; //setup SmsGateway SendSms resources.SmsGateway.Setup(x => x.SendSms(It.Is <Provider1SmsRequest>(m => m.UniqueId == requestModel.MessageId && m.Phone == requestModel.PhoneNumber && m.Message == requestModel.TextMessage))).Returns(new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest)); //When var result = resources.Controller.SendSms(requestModel) as BadRequestObjectResult; //Then Assert.IsNotNull(result); Assert.IsTrue(result.StatusCode == 400); var responseMessage = result.Value as HttpResponseMessage; Assert.IsTrue(responseMessage.StatusCode == System.Net.HttpStatusCode.BadRequest); //verify calls resources.SmsGateway.Verify(x => x.SendSms(It.Is <Provider1SmsRequest>(m => m.UniqueId == requestModel.MessageId && m.Phone == requestModel.PhoneNumber && m.Message == requestModel.TextMessage)), Times.Once); //verify no calls were made to log and event bus resources.LogHelper.Verify(x => x.LogMessage(It.Is <string>(m => m == $"SMS sent for messageId: { requestModel.MessageId}")), Times.Never); resources.EventBus.Verify(x => x.PublishEvent(It.Is <SmsSentEvent>(m => m.MessageId == requestModel.MessageId && m.PhoneNumber == requestModel.PhoneNumber && m.TextMessage == requestModel.TextMessage)), Times.Never); resources.SmsGateway.VerifyNoOtherCalls(); resources.LogHelper.VerifyNoOtherCalls(); resources.EventBus.VerifyNoOtherCalls(); } }
public IActionResult SendSms([FromBody] SendSmsCommandModel requestModel) { try { //validate request var validResult = IsSmsValidToSend(requestModel); if (validResult.IsValid) { var smsRequest = new Provider1SmsRequest { Message = requestModel.TextMessage, Phone = requestModel.PhoneNumber, UniqueId = requestModel.MessageId }; //send sms to provider var result = _smsGateway.SendSms(smsRequest); if (result.StatusCode == System.Net.HttpStatusCode.OK) { //publish event _eventBus.PublishEvent(new SmsSentEvent { MessageId = requestModel.MessageId, PhoneNumber = requestModel.PhoneNumber, TextMessage = requestModel.TextMessage }); _logHelper.LogMessage($"SMS sent for messageId: {requestModel.MessageId}"); return(Ok(validResult)); } return(BadRequest(result)); } return(BadRequest(validResult)); } catch (Exception ex) { _logHelper.LogException(ex); return(BadRequest(ex)); } }
private ValidationResult IsSmsValidToSend(SendSmsCommandModel requestModel) { var validationResult = new ValidationResult(); if (string.IsNullOrEmpty(requestModel.MessageId)) { validationResult.Invalidate(Constants.SmsInvalid.SmsInvalid_MessageIdInvalid_Code, Constants.SmsInvalid.SmsInvalid_MessageIdInvalid_Message); } if (string.IsNullOrEmpty(requestModel.PhoneNumber)) { validationResult.Invalidate(Constants.SmsInvalid.SmsInvalid_PhoneNumberInvalid_Code, Constants.SmsInvalid.SmsInvalid_PhoneNumberInvalid_Message); } if (string.IsNullOrEmpty(requestModel.TextMessage)) { validationResult.Invalidate(Constants.SmsInvalid.SmsInvalid_TextMessageInvalid_Code, Constants.SmsInvalid.SmsInvalid_TextMessageInvalid_Message); } return(validationResult); }