예제 #1
0
        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();
            }
        }
예제 #2
0
        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();
            }
        }
예제 #3
0
        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));
            }
        }
예제 #4
0
        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);
        }