// GET: http://www.qcue.me/api/incoming_sms?to=447860033153&from=441234567890&content=Hello+World&msg_id=AB_12345 public HttpResponseMessage Get([FromUri] IncomingSmsMessage message) { Trace.TraceInformation("Message: {0}", message); /* * if (this.ModelState.IsValid) * { * Trace.TraceInformation("Message: {0}", message); * return Request.CreateResponse(HttpStatusCode.BadRequest, this.ModelState); * } */ var qbase = new QBase("https://qcue-live.firebaseio.com"); var user = qbase.GetUserByMobile(message.From); // this.EnsureUserIsKnown(message, user); if (this.IsUpdateUserMessage(message)) { this.UpdateUser(message, qbase, user); } else { this.QueueUser(message, qbase, user); } var response = this.Request.CreateResponse(HttpStatusCode.OK); return(response); }
public void Perform_RealAdmin_ExistingIdea() { Add_Accessor target = new Add_Accessor(); // TODO: Initialize to an appropriate value IDataStore store = DataStore.GetInstance(); DailyIdea idea = new DailyIdea { Idea = "This is the added message", }; store.Save(idea); Assert.AreNotEqual(0, idea.Id); IncomingSmsMessage message = new IncomingSmsMessage { From = Configuration.GetInstance().AdminNumber, Message = string.Format(CultureInfo.InvariantCulture, "add {0}", idea.Idea), }; target.Perform(message); Assert.AreEqual(1, store.DailyIdeas.Count(i => i.Idea == idea.Idea)); OutgoingSmsMessage response = store.OutgoingMessages.Where(o => o.Message == SmsResponseStrings.Add_Failed_ExistingIdea(idea.Id)).First(); Assert.AreEqual(Configuration.GetInstance().AdminNumber, response.Destination); }
public void Perform_MissingUser_BetaFull_Sorry() { Join_Accessor target = new Join_Accessor(); // TODO: Initialize to an appropriate value IDataStore store = DataStore.GetInstance(); IConfiguration config = Configuration.GetInstance(); int count = 0; while (store.Subscriptions.Count() < config.BetaLimit) { store.Save(new Subscription { Next = DateTime.UtcNow, Phone = string.Format(CultureInfo.InvariantCulture, "+1111222{0}", count++), }); } IncomingSmsMessage message = new IncomingSmsMessage { From = base.NonSubscriberPhone, Message = target.Action, }; Assert.AreEqual(config.BetaLimit, store.Subscriptions.Count()); target.PerformAdmin(message); Assert.AreEqual(config.BetaLimit, store.Subscriptions.Count()); base.OutgoingMessageExists(message.From, SmsResponseStrings.Join_SorryBetaFull()); base.OutgoingMessageExists(config.AdminNumber, SmsResponseStrings.Join_AdminBetaReject()); }
private void UpdateUser(IncomingSmsMessage message, QBase qbase, User user) { string fullName = message.Content.Substring(NameTag.Length).Trim(); user.fullName = fullName; user.status = "registered"; qbase.UpdateUser(user); Trace.TraceInformation( "Updated user.fulName for \"{0}\" to \"{1}\"", user.userId, user.fullName); }
private static string GetCommand(IncomingSmsMessage message) { if (message == null) { return(string.Empty); } if (string.IsNullOrWhiteSpace(message.Message)) { return(string.Empty); } string[] parts = message.Message.Split(new char[] { ' ' }, 2, StringSplitOptions.RemoveEmptyEntries); return(parts[0]); }
public void Perform_Subscriber() { IDataStore store = DataStore.GetInstance(); Add_Accessor target = new Add_Accessor(); // TODO: Initialize to an appropriate value IncomingSmsMessage message = new IncomingSmsMessage { From = ExistingSubscriberPhone, Message = "add This is the added message", }; target.Perform(message); Assert.IsFalse(store.DailyIdeas.Any()); OutgoingMessageExists(ExistingSubscriberPhone, SmsResponseStrings.PublicHelp()); }
private void EnsureQueueIsKnown(IncomingSmsMessage message, Q q) { if (q == null) { string errorMessage = String.Format( "No such queue: \"{0}\".", message.Content); var response = new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent(errorMessage), ReasonPhrase = errorMessage }; Trace.TraceError(errorMessage); throw new HttpResponseException(response); } }
private void ProcessReceivedMessage(IncomingSmsMessage message) { if (NumberBlocker.IsBlocked(message.From)) { LogManager.Log.Info("SMS received from blocked number {0}. Message: {1}", message.From, message.Message); // skip it entirely return; } string command = GetCommand(message); ClientAction action = GetActionOrHelp(command); action.Perform(message); }
public void Perform_MissingUser() { Quit_Accessor target = new Quit_Accessor(); // TODO: Initialize to an appropriate value IncomingSmsMessage message = new IncomingSmsMessage { From = "+11112223333", Message = target.Action, }; target.Perform(message); IDataStore store = DataStore.GetInstance(); OutgoingMessageExists(message.From, SmsResponseStrings.Quit_AllRemoved(message.From)); }
private void EnsureUserIsKnown(IncomingSmsMessage message, Models.User user) { if (user == null) { string errorMessage = String.Format( "No such user: \"{0}\".", message.From); var response = new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent(errorMessage), ReasonPhrase = errorMessage }; Trace.TraceError(errorMessage); throw new HttpResponseException(response); } }
public void Perform_ExistingUser() { Quit_Accessor target = new Quit_Accessor(); // TODO: Initialize to an appropriate value IncomingSmsMessage message = new IncomingSmsMessage { From = ExistingSubscriberPhone, Message = target.Action, }; Assert.AreEqual(1, base.SubscriptionForNumber(message.From).Count); target.Perform(message); OutgoingMessageExists(base.ExistingSubscriberPhone, SmsResponseStrings.Quit_AllRemoved(base.ExistingSubscriberPhone)); Assert.AreEqual(0, base.SubscriptionForNumber(message.From).Count); }
public void Perform_ExistingUser_Skip() { Join_Accessor target = new Join_Accessor(); // TODO: Initialize to an appropriate value IncomingSmsMessage message = new IncomingSmsMessage { From = base.ExistingSubscriberPhone, Message = target.Action, }; Assert.AreEqual(1, SubscriptionForNumber(message.From).Count); target.PerformAdmin(message); Assert.AreEqual(1, SubscriptionForNumber(message.From).Count); base.OutgoingMessageExists(message.From, SmsResponseStrings.Join_AlreadyExists()); }
public void Perform_RealAdmin_Help() { string destination = Configuration.GetInstance().AdminNumber; Add_Accessor target = new Add_Accessor(); // TODO: Initialize to an appropriate value IncomingSmsMessage message = new IncomingSmsMessage { From = destination, Message = "add", }; target.Perform(message); IDataStore store = DataStore.GetInstance(); Assert.AreEqual(0, store.DailyIdeas.Count()); OutgoingMessageExists(destination, SmsResponseStrings.Add_Help()); }
public void Perform(IncomingSmsMessage message) { if (message.From == _Configuration.AdminNumber) { PerformAdmin(message); return; } IDataStore store = DataStore.GetInstance(); if (store.Subscriptions.Any(s => s.Phone == message.From)) { PerformSubscriber(message); return; } PerformUnknownUser(message); }
public void Perform_RealAdmin() { Add_Accessor target = new Add_Accessor(); // TODO: Initialize to an appropriate value IncomingSmsMessage message = new IncomingSmsMessage { From = Configuration.GetInstance().AdminNumber, Message = "add This is the added message", }; target.Perform(message); IDataStore store = DataStore.GetInstance(); DailyIdea addedIdea = store.DailyIdeas.Where(i => i.Idea == "This is the added message").First(); OutgoingSmsMessage response = store.OutgoingMessages.Where(o => o.Message == SmsResponseStrings.Add_Success_AddedNewIdea(addedIdea.Id)).First(); Assert.AreEqual(Configuration.GetInstance().AdminNumber, response.Destination); }
public void Perform_UnknownUser() { string destinationNumber = "+11112223333"; Add_Accessor target = new Add_Accessor(); // TODO: Initialize to an appropriate value IncomingSmsMessage message = new IncomingSmsMessage { From = destinationNumber, Message = "add This is the added message", }; target.Perform(message); IDataStore store = DataStore.GetInstance(); Assert.IsFalse(store.DailyIdeas.Any()); OutgoingSmsMessage response = store.OutgoingMessages.Where(o => o.Message == SmsResponseStrings.PublicHelp()).First(); Assert.AreEqual(destinationNumber, response.Destination); }
public void Perform_ExistingUser_QueuedMessagesRemoved() { Quit_Accessor target = new Quit_Accessor(); // TODO: Initialize to an appropriate value IDataStore store = DataStore.GetInstance(); // add an existing outgoing message - this should be removed when the quit is done store.Save(new OutgoingSmsMessage { Destination = ExistingSubscriberPhone, Message = "Does not matter", }); // add an existing outgoing message - this should be removed when the quit is done store.Save(new OutgoingSmsMessage { Destination = ExistingSubscriberPhone, Message = "Also does not matter", }); Assert.AreEqual(2, store.OutgoingMessages.Count()); IncomingSmsMessage message = new IncomingSmsMessage { From = ExistingSubscriberPhone, Message = target.Action, }; Assert.AreEqual(1, base.SubscriptionForNumber(message.From).Count); target.Perform(message); // there should be only one message in the outgoing queue Assert.AreEqual(1, store.OutgoingMessages.Count()); // and it should be this one... OutgoingMessageExists(base.ExistingSubscriberPhone, SmsResponseStrings.Quit_AllRemoved(base.ExistingSubscriberPhone)); Assert.AreEqual(0, store.Subscriptions.Count()); }
private void QueueUser(IncomingSmsMessage message, QBase qbase, User user) { var q = qbase.GetQueueByShortCode(message.Content); this.EnsureQueueIsKnown(message, q); string status = null; if (user == null) { user = qbase.AddAnonymousUser(message.From); // TODO: status = "registering"; status = "joined"; } else { /* * var usersInQueue = qbase.GetUsersInQueue(q.queueId); * * if (usersInQueue.Count(each => each.userId == user.userId) != 0) * { * string warningMessage = String.Format( * "User \"{0}\" is already in queue \"{1}\". User will not be added again.", * user.userId, * q.queueId); * * Trace.TraceWarning(warningMessage); * return; * } */ status = "joined"; } qbase.AddUserToQueue(q.queueId, new QUser { userId = user.userId, status = status }); }
public void User_Full_Name_Is_Updated() { // Arrange. var controller = new Incoming_SmsController(); controller.Request = new HttpRequestMessage(); controller.ModelState.Clear(); var incomingSmsMessage = new IncomingSmsMessage { From = "4455523456789", To = "447860033153", Msg_Id = Convert.ToString(Guid.NewGuid()), Content = "NAME Alice Bong" }; // Act. var response = controller.Get(incomingSmsMessage); // Assert. Assert.IsTrue(response.IsSuccessStatusCode); }
public void Receives_Sms_And_Adds_User_To_Queue() { // Arrange. var controller = new Incoming_SmsController(); controller.Request = new HttpRequestMessage(); controller.ModelState.Clear(); var incomingSmsMessage = new IncomingSmsMessage { From = "4455523456789", To = "447860033153", Msg_Id = Convert.ToString(Guid.NewGuid()), Content = "HELI" }; // Act. var response = controller.Get(incomingSmsMessage); // Assert. Assert.IsTrue(response.IsSuccessStatusCode); }
protected virtual void PerformAdmin(IncomingSmsMessage message) { GeneralHelp(message); }
protected void GeneralHelp(IncomingSmsMessage message) { Say(message.From, SmsResponseStrings.PublicHelp()); }
protected virtual void PerformSubscriber(IncomingSmsMessage message) { GeneralHelp(message); }
public void Add(IncomingSmsMessage message) { _messageProcessor.Add(message); }
private void ReceivedMessageComplete(IncomingSmsMessage message) { // nothing to do just yet }
private void ReceivedMessageFailed(IncomingSmsMessage message, Exception ex) { LogManager.Log.Error(string.Format(CultureInfo.InvariantCulture, "Error processing message ({0} - {1})", message.From, message.Message), ex); }
protected virtual void PerformUnknownUser(IncomingSmsMessage message) { GeneralHelp(message); }
private bool IsUpdateUserMessage(IncomingSmsMessage message) { return(message.Content.ToUpper().StartsWith(NameTag)); }