public void ValidCountryConfigUpdatesNumberSendsMessageReturnsToDetails()
        {
            var bus = MockRepository.GenerateMock<IBus>();
            var ravenDocStore = MockRepository.GenerateMock<IRavenDocStore>();
            var docStore = MockRepository.GenerateMock<IDocumentStore>();
            var docSession = MockRepository.GenerateMock<IDocumentSession>();

            ravenDocStore.Expect(r => r.GetStore()).Return(docStore);
            docStore.Expect(d => d.OpenSession("Configuration")).Return(docSession);
            docSession.Expect(d => d.Load<CountryCodeReplacement>("CountryCodeConfig")).Return(new CountryCodeReplacement { CountryCode = "+61", LeadingNumberToReplace = "n"});

            var sentMessage = new SendOneMessageNow();
            bus.Expect(b => b.Send(Arg<SendOneMessageNow>.Is.NotNull))
                .WhenCalled(a => sentMessage = ((SendOneMessageNow)((object[])a.Arguments[0])[0]));

            var controller = new SendNowController { ControllerContext = new ControllerContext(), Bus = bus, RavenDocStore = ravenDocStore };
            var sendNowModel = new SendNowModel { MessageBody = "asdflj", Number = "number" , ConfirmationEmail = "sdakflj" };
            var result = (RedirectToRouteResult)controller.Create(sendNowModel);

            Assert.That(result.RouteValues["action"], Is.EqualTo("Details"));
            Assert.That(sentMessage.SmsData.Mobile, Is.EqualTo("+61umber"));
            Assert.That(sentMessage.SmsData.Message, Is.EqualTo(sendNowModel.MessageBody));
            Assert.That(sentMessage.ConfirmationEmailAddress, Is.EqualTo(sendNowModel.ConfirmationEmail));
            bus.VerifyAllExpectations();
        }
 public ActionResult Create(SendNowModel model)
 {
     var isValid = TryValidateModel(model);
     if(isValid)
     {
         model.MessageId = Guid.NewGuid();
         if (model.MessageBody.Length > 160)
             model.MessageBody = model.MessageBody.Substring(0, 160);
         CountryCodeReplacement countryCodeReplacement;
         using (var session = RavenDocStore.GetStore().OpenSession("Configuration"))
         {
             countryCodeReplacement = session.Load<CountryCodeReplacement>("CountryCodeConfig");
         }
         var cleanInternationalNumber = countryCodeReplacement != null ? countryCodeReplacement.CleanAndInternationaliseNumber(model.Number) : model.Number.Trim();
         var sendOneMessageNow = new SendOneMessageNow
         {
             CorrelationId = model.MessageId,
             SmsData = new SmsData(cleanInternationalNumber, model.MessageBody),
             ConfirmationEmailAddress = model.ConfirmationEmail,
             SmsMetaData = new SmsMetaData
             {
                 Tags = string.IsNullOrEmpty(model.Tags) ? null : model.Tags.Split(',').ToList().Select(t => t.Trim()).ToList(),
                 Topic = model.Topic
             }
         };
         Bus.Send(sendOneMessageNow);
         return RedirectToAction("Details", "SendNow", new { requestId = model.MessageId.ToString()});
     }
     return View("Create", model);
 }
        public void InvalidNumberReturnsToCreatePageWithValidation()
        {
            var controller = new SendNowController { ControllerContext = new ControllerContext() };
            var sendNowModel = new SendNowModel { MessageBody = "asdflj" };
            var result = (ViewResult)controller.Create(sendNowModel);

            Assert.That(result.ViewName, Is.EqualTo("Create"));
        }
        public void ValidSendsMessageReturnsToDetails()
        {
            var bus = MockRepository.GenerateMock<IBus>();

            var sentMessage = new SendOneMessageNow();
            bus.Expect(b => b.Send(Arg<SendOneMessageNow>.Is.NotNull))
                .WhenCalled(a => sentMessage = ((SendOneMessageNow)((object[])a.Arguments[0])[0]));

            var controller = new SendNowController { ControllerContext = new ControllerContext(), Bus = bus };
            var sendNowModel = new SendNowModel { MessageBody = "asdflj", Number = "number" , ConfirmationEmail = "sdakflj" };
            var result = (RedirectToRouteResult)controller.Create(sendNowModel);

            Assert.That(result.RouteValues["action"], Is.EqualTo("Details"));
            Assert.That(sentMessage.SmsData.Mobile, Is.EqualTo(sendNowModel.Number));
            Assert.That(sentMessage.SmsData.Message, Is.EqualTo(sendNowModel.MessageBody));
            Assert.That(sentMessage.ConfirmationEmailAddress, Is.EqualTo(sendNowModel.ConfirmationEmail));
            bus.VerifyAllExpectations();
        }
 public ActionResult Create(SendNowModel model)
 {
     var isValid = TryValidateModel(model);
     if(isValid)
     {
         model.MessageId = Guid.NewGuid();
         if (model.MessageBody.Length > 160)
             model.MessageBody = model.MessageBody.Substring(0, 160);
         var sendOneMessageNow = new SendOneMessageNow
         {
             CorrelationId = model.MessageId,
             SmsData = new SmsData(model.Number, model.MessageBody),
             ConfirmationEmailAddress = model.ConfirmationEmail,
             SmsMetaData = new SmsMetaData
             {
                 Tags = string.IsNullOrEmpty(model.Tags) ? null : model.Tags.Split(',').ToList().Select(t => t.Trim()).ToList(),
                 Topic = model.Topic
             }
         };
         Bus.Send(sendOneMessageNow);
         return RedirectToAction("Details", "SendNow", new { requestId = model.MessageId.ToString()});
     }
     return View("Create", model);
 }