예제 #1
0
        static SendMessageResult GetSmsOptions(MessageTemplate messageTemplate, MessageInfo message, string smsTag, IEnumerable <string> mobiles, bool asynchronously, out SendSmsOptions sendSmsOptions)
        {
            sendSmsOptions = null;
            if (messageTemplate == null)
            {
                throw new ArgumentNullException(nameof(MessageTemplate));
            }
            if (message == null)
            {
                throw new ArgumentNullException(nameof(MessageInfo));
            }
            if (string.IsNullOrWhiteSpace(messageTemplate.Content))
            {
                throw new Exception("The message template content is null or empty");
            }
            if (mobiles.IsNullOrEmpty())
            {
                throw new Exception("The mobiles is null or empty");
            }
            var parameterDict = message.Parameters?.ObjectToStringDcitionary();
            Dictionary <string, string> templateParameters = GetTemplateParameters(parameterDict);
            //content
            var contentResolveResult = ResolveTemplate(messageTemplate.Content, templateParameters);

            if (!contentResolveResult.Item1 || string.IsNullOrWhiteSpace(contentResolveResult.Item3))
            {
                if (!string.IsNullOrWhiteSpace(contentResolveResult.Item2))
                {
                    return(SendMessageResult.NoParameter($"Not set '{contentResolveResult.Item2}' value in the sms body template"));
                }
                return(SendMessageResult.MessageIsNullOrEmpty($"The sms body is null or empty"));
            }

            //Send sms
            sendSmsOptions = new SendSmsOptions()
            {
                Tag            = smsTag,
                Content        = contentResolveResult.Item3,
                Parameters     = parameterDict,
                Asynchronously = asynchronously,
                Mobiles        = mobiles,
            };
            sendSmsOptions.AddWorkId(message.WorkId);
            sendSmsOptions.AddTemplateMessageId(message.Id);
            return(SendMessageResult.SendSuccess());
        }
예제 #2
0
        public void SendSmsOverload_PassesToGeneratedOne(PhoneNumber expectedFrom, PhoneNumber expectedTo, string expectedMessage, SendSmsOptions expectedOptions)
        {
            Mock <SmsClient> mockClient = new Mock <SmsClient>()
            {
                CallBase = true
            };
            Response <SendSmsResponse>?expectedResponse  = default;
            CancellationToken          cancellationToken = new CancellationTokenSource().Token;
            var callExpression = BuildExpression(x => x.Send(It.IsAny <PhoneNumber>(), It.IsAny <IEnumerable <PhoneNumber> >(), It.IsAny <string>(), It.IsAny <SendSmsOptions>(), It.IsAny <CancellationToken>()));

            mockClient
            .Setup(callExpression)
            .Returns((PhoneNumber from, IEnumerable <PhoneNumber> to, string message, SendSmsOptions options, CancellationToken token) =>
            {
                Assert.AreEqual(expectedFrom, from);
                Assert.AreEqual(expectedTo, to.Single());
                Assert.AreEqual(expectedMessage, message);
                Assert.AreEqual(cancellationToken, token);
                Assert.AreEqual(expectedOptions, options);
                return(expectedResponse = new Mock <Response <SendSmsResponse> >().Object);
            });

            Response <SendSmsResponse> actualResponse = mockClient.Object.Send(expectedFrom, expectedTo, expectedMessage, expectedOptions, cancellationToken);

            mockClient.Verify(callExpression, Times.Once());
            Assert.AreEqual(expectedResponse, actualResponse);
        }