Beispiel #1
0
        public TwiMLResult Index(SmsRequest incomingMessage)
        {
            var messagingResponse = new MessagingResponse();

            if (incomingMessage.From != null)
            {
                var db            = CMSDataContext.Create(HttpContext);
                var model         = new IncomingSmsModel(db, incomingMessage);
                var returnMessage = model.ProcessAndRespond();
                if (returnMessage.HasValue())
                {
                    messagingResponse.Message(returnMessage);
                }
            }
            return(TwiML(messagingResponse));
        }
Beispiel #2
0
        public void ProcessIncomingTextMessage(string word, string field = null, object value = null)
        {
            var from       = "+19014888888";
            var tonumber   = "+12055836839";
            var meetingdt  = DateTime.Today.AddDays(-1).AddHours(10);
            var smeetingdt = meetingdt.FormatDateTm();

            CleanDatabase();
            PrepareDatabase();

            switch (word.ToUpper())
            {
            case "YES":
                TestActionShouldBe($"David Carroll has been marked as Attending to App Testing Org for {smeetingdt}");
                break;

            case "NO":
                TestActionShouldBe(field == null
                        ? $"David Carroll has been marked as Regrets to App Testing Org for {smeetingdt}"
                        : $"No Meeting on action Regrets, meetingid {value} not found");
                break;

            case "JOIN":
                TestActionShouldBe(field == null
                        ? "David Carroll has been added to App Testing Org"
                        : "Org not found on action AddToOrg, orgid 123456789 not found");
                break;

            case "FLOWERS":
                TestActionShouldBe(field == null
                        ? "David Carroll has been added to Flowers group for App Testing Org"
                        : "SmallGroup is null");
                break;
            }
            // cleanup
            CleanDatabase();

            void PrepareDatabase()
            {
                var cell       = from.Substring(2);
                var replywords = ReplyWordsJson();

                db.Connection.Execute(@"
insert SmsGroups (Name, Description,ReplyWords) values ('TestGroup', '', @replywords);
declare @gid int = @@Identity;
insert SmsGroupMembers (GroupId, UserId) values (@gid, 1);
insert SmsGroupMembers (GroupId, UserId) values (@gid, 2);
insert SmsNumbers (GroupID,Number,LastUpdated) Values (@gid, @number, @meetingdt)
", new { number = tonumber, meetingdt, replywords });
                db.Connection.Execute("UPDATE dbo.People SET CellPhone = @cell WHERE PeopleId = 2", new { cell });
            }

            string ReplyWordsJson()
            {
                var    meeting = CmsData.Meeting.FetchOrCreateMeeting(db, 36, meetingdt);
                string json    = Encoding.Default.GetString(CMSWebTestsResources.SmsReplyWords);

                return(json.Replace("{meetingid}", meeting.MeetingId.ToString()));
            }

            void CleanDatabase()
            {
                db.Connection.Execute(@"
delete dbo.SmsItems;
delete dbo.SmsList;
delete dbo.SmsReceived;
delete dbo.SMSNumbers;
delete dbo.SMSGroupMembers
delete dbo.SMSGroups;
delete dbo.Attend where OrganizationId = 36
delete dbo.Meetings where OrganizationId = 36

delete dbo.OrgMemMemTags
from dbo.OrgMemMemTags mt
join dbo.MemberTags t on t.Id = mt.MemberTagId and t.OrgId = mt.OrgId
where mt.OrgId = 36 and t.Name = 'flowers'

delete dbo.MemberTags where Name = 'flowers' and OrgId = 36
");
            }

            void TestActionShouldBe(string correctmessage)
            {
                var request = new SmsRequest {
                    To = tonumber, From = from, Body = word
                };
                var incoming = new IncomingSmsModel(db, request);
                var model    = incoming.FindGroup();

                if (field != null)
                {
                    var action = model.Actions.Find(vv => vv.Word == word);
                    switch (field)
                    {
                    case "MeetingId":
                        action.MeetingId = (int?)value;
                        break;

                    case "OrgId":
                        action.OrgId = (int?)value;
                        break;

                    case "SmallGroup":
                        action.SmallGroup = (string)value;
                        break;
                    }
                    model.Save();
                }
                var actualmessage = incoming.ProcessAndRespond();

                actualmessage.ShouldBe(correctmessage);
            }
        }