public void TestBuildFailure()
        {
            string testStr = "{\"application\": { \"name\": \"Test Project 1\" },   \"build\": {    \"commit\": {      \"id\": \"" + Guid.NewGuid() + "\", \"message\": \"Implement foo\"  }, \"status\": \"succeeded\" } }";
            var o = JsonConvert.DeserializeObject<Notification>(testStr);

            var db = new TestTweetHarborDbContext();
            var user = UserHelper.ArrangeNewUserDefault();
            db.Users.Add(user);

            var proj = new Project()
            {
                ProjectName = "The Test Project",
                SendPrivateTweetOnFailure = true,
                SendPrivateTweetOnSuccess = true,
                SendPublicTweetOnFailure = false,
                SendPublicTweetOnSuccess = true,
                User = user
            };

            db.Projects.Add(proj);

            user.Projects = new Collection<Project>();
            user.Projects.Add(proj);

            var m = new Mock<ITweetHarborTextMessageService>();

            m.Setup(a => a.SendText("", ""));

            var controller = new NotifyController(db, new TestTweetHarborTwitterService(), m.Object);

            MvcMockHelpers.SetFakeControllerContext(controller);

            var res = controller.New(user.UserName, user.UniqueId, o);

            Assert.IsInstanceOfType(res, typeof(JsonResult));
            Assert.IsInstanceOfType((res as JsonResult).Data, typeof(JsonResultModel));

            Assert.AreEqual(true, ((res as JsonResult).Data as JsonResultModel).Success);
        }
예제 #2
0
 public ActionResult Create(User user, string ProjectName)
 {
     var projects = database.Projects.Where(p => p.ProjectName == ProjectName && p.User.TwitterUserName == user.TwitterUserName);
     if (projects.Count() == 0)
     {
         var project = new Project()
         {
             ProjectName = ProjectName
         };
         user = database.Users.FirstOrDefault(u => u.TwitterUserName == user.TwitterUserName);
         if (null != user)
         {
             user.Projects.Add(project);
         }
         database.SaveChanges();
     }
     return RedirectToAction("Index");
 }
예제 #3
0
        public ActionResult ImportFromAppHarbor()
        {
            var user = database.Users.First(u => u.UserName == HttpContext.User.Identity.Name);
            var appHarborAccount = user.AuthenticationAccounts.FirstOrDefault(a => a.AccountProvider == "appharbor");
            if (appHarborAccount != null)
            {

                var projects = appHarborClient.GetUserProjects(appHarborAccount.OAuthToken);

                foreach (var p in projects)
                {
                    //TODO: Use a UniqueID rather than name because name can change
                    var userProject = user.Projects.FirstOrDefault(pr => pr.ProjectName == p.ProjectName);
                    if (null == userProject)
                    {
                        userProject = new Project()
                            {
                                AppHarborProjectUrl = p.ProjectUrl,
                                ProjectName = p.ProjectName,
                                DateCreated = DateTime.Now
                            };
                        user.Projects.Add(userProject);
                    }
                    else
                    {
                        // Update Url
                        userProject.AppHarborProjectUrl = p.ProjectUrl;
                    }
                    appHarborClient.SetServiceHookUrl(appHarborAccount.OAuthToken, p.ProjectName, "", user.GetServiceHookUrl());
                }

                database.SaveChanges();

                return RedirectToAction("Index", new { Controller = "Account" });
            }
            else
            {
                return RedirectToAction("Authorize", new { Controller = "Account", Client = "AppHarbor", ReturnUrl = "/Projects/ImportFromAppHarbor" });
            }
        }
        public void GlobalNotificationToggle_SendPublicTweet_True_Correct()
        {
            var db = new TestTweetHarborDbContext();
            var user = UserHelper.ArrangeNewUserDefault();

            db.Users.Add(user);

            var proj = new Project()
            {
                ProjectName = "The Test Project",
                SendPrivateTweetOnFailure = true,
                SendPrivateTweetOnSuccess = true,
                SendPublicTweetOnFailure = false,
                SendPublicTweetOnSuccess = true,
                User = user
            };

            db.Projects.Add(proj);
            var ts = new TestTweetHarborTwitterService();

            var auth = new Mock<IFormsAuthenticationWrapper>();

            var controller = new AccountController(db, ts, auth.Object);

            var ident = new GenericIdentity("localtestuser");
            System.Security.Principal.GenericPrincipal c = new System.Security.Principal.GenericPrincipal(ident, new string[] { });

            controller.SetFakeControllerContext(c);

            var res = controller.GlobalNotificationToggle("SendPublicTweet", true);
            Assert.IsInstanceOfType(res.Data, typeof(JsonResultModel));
            var rm = (JsonResultModel)res.Data;
            Assert.IsTrue(rm.Success);
            Assert.IsTrue(rm.Message == "Value has been updated");

            Assert.AreEqual(true, db.Users.FirstOrDefault(u => u.UserName == ident.Name).SendPublicTweet);
        }
예제 #5
0
 public static string DeTokenizeString(string input, Project project, Notification notification)
 {
     return input.Replace("{application:name}", project.ProjectName)
                     .Replace("{build:commit:message}", notification.build.commit.message)
                     .Replace("{build:commit:id}", notification.build.commit.id.Substring(0, 7));
 }
예제 #6
0
 private void SendSmsMessages(Project project, string update)
 {
     if (null != project.TextMessageRecipients && project.TextMessageRecipients.Count > 0)
     {
         foreach (var r in project.TextMessageRecipients)
         {
             try
             {
                 OutboundNotification n = new OutboundNotification()
                 {
                     DateCreated = DateTime.Now,
                     Message = update,
                     NotificationType = "SMS",
                     Recipient = r.PhoneNumber,
                     SentSuccessfully = false,
                     DateSent = DateTime.MaxValue
                 };
                 project.OutboundNotifications.Add(n);
                 database.SaveChanges();
                 try
                 {
                     textMessageService.SendText(r.PhoneNumber, update);
                     n.SentSuccessfully = true;
                     n.DateSent = DateTime.Now;
                 }
                 catch (Exception sx)
                 {
                     n.SentSuccessfully = false;
                 }
                 database.SaveChanges();
             }
             catch (Exception e)
             {
                 //TODO: Log this
                 throw e;
             }
         }
     }
 }
예제 #7
0
 private void SendDirectMessages(Project project, string update)
 {
     foreach (var r in project.MessageRecipients)
     {
         try
         {
             OutboundNotification n = new OutboundNotification()
             {
                 DateCreated = DateTime.Now,
                 Message = update,
                 NotificationType = "Twitter",
                 Recipient = r.ScreenName,
                 SentSuccessfully = false,
                 DateSent = DateTime.MaxValue
             };
             project.OutboundNotifications.Add(n);
             database.SaveChanges();
             try
             {
                 twitter.SendDirectMessage(r.ScreenName, update);
                 n.SentSuccessfully = true;
                 n.DateSent = DateTime.Now;
             }
             catch (Exception sx)
             {
                 n.SentSuccessfully = false;
             }
             database.SaveChanges();
         }
         catch (Exception e)
         {
             //TODO: Log this
         }
     }
 }
예제 #8
0
 private void SaveNotification(Notification notification, Project project)
 {
     ProjectNotification projNotification = new ProjectNotification();
     projNotification.NotificationDate = DateTime.Now;
     projNotification.Build = notification.build;
     project.ProjectNotifications.Add(projNotification);
     database.SaveChanges();
 }
예제 #9
0
 private Project CreateProjectIfNecessary(Notification notification, Models.User user)
 {
     var project = user.Projects.FirstOrDefault(p => p.ProjectName == notification.application.name);
     if (null == project)
     {
         project = new Project()
         {
             ProjectName = notification.application.name,
             FailureTemplate = "",
             SuccessTemplate = "",
             User = user
         };
         user.Projects.Add(project);
         //TODO: Add logging to prevent these errors from being swallowed
         database.SaveChanges();
     }
     return project;
 }
예제 #10
0
        public void TestSendSmsMessages_OutboundNotificationCreated()
        {
            string testStr = "{\"application\": { \"name\": \"Test Project 1\" },   \"build\": {    \"commit\": {      \"id\": \"" + Guid.NewGuid() + "\", \"message\": \"Implement foo\"  }, \"status\": \"succeeded\" } }";
            var o = JsonConvert.DeserializeObject<Notification>(testStr);

            TestTweetHarborDbContext db = new TestTweetHarborDbContext();

            var m = new Mock<ITweetHarborTextMessageService>();
            m.Setup(a => a.SendText("", ""));

            var user = new User()
            {
                EmailAddress = "*****@*****.**",
                OAuthToken = "<FakeOauthToken>",
                OAuthTokenSecret = "<FakeOauthTokenSecret>",
                UniqueId = "db7a3a64156d0b33beae93fe99ca599e",
                SendPrivateTweet = true,
                SendPublicTweet = false,
                TwitterUserName = "******",
                SendSMS = true
            };
            db.Users.Add(user);

            var proj = new Project()
                {
                    ProjectName = o.application.name,
                    SendPrivateTweetOnFailure = true,
                    SendPrivateTweetOnSuccess = true,
                    SendPublicTweetOnFailure = false,
                    SendPublicTweetOnSuccess = true,
                    SendTextOnSuccess = true,
                    SendTextOnFailure = false,
                    User = user
                };
            user.Projects.Add(proj);
            db.Projects.Add(proj);
            var tmr = new TextMessageRecipient()
            {
                Name = "App Test",
                PhoneNumber = "5201235678",
            };
            proj.TextMessageRecipients.Add(tmr);

            var dmr = new TwitterMessageRecipient()
            {
                ScreenName = "testuser",
            };

            proj.MessageRecipients.Add(dmr);

            var controller = new NotifyController(db, new TestTweetHarborTwitterService(), m.Object);

            var res = controller.New(user.TwitterUserName, user.UniqueId, o);

            Assert.IsInstanceOfType(res, typeof(JsonResult));
            Assert.IsInstanceOfType((res as JsonResult).Data, typeof(JsonResultModel));

            Assert.AreEqual(true, ((res as JsonResult).Data as JsonResultModel).Success);

            Assert.AreNotEqual(0, proj.OutboundNotifications.Count);
            Assert.AreNotEqual(0, proj.OutboundNotifications.First().Message.Length);
            Assert.AreEqual(2, proj.OutboundNotifications.Count);

            var nots = proj.OutboundNotifications.OrderBy(pj => pj.NotificationType);

            Assert.AreEqual("SMS", nots.First().NotificationType);
            Assert.AreEqual("5201235678", nots.First().Recipient);

            Assert.AreEqual("Twitter", nots.ElementAt(1).NotificationType);
            Assert.AreEqual(dmr.ScreenName, nots.ElementAt(1).Recipient);
        }
예제 #11
0
        public void TestDeTokenizeString()
        {
            string Input = "{application:name} is being tested on @TweetHarbor 'cause it rocks the {build:commit:id} magic {build:commit:message}";
            Notification n = new Notification()
            {
                application = new Application()
                {
                    name = "TestApp",
                },
                build = new Build()
                {
                    BuildId = 10,
                    commit = new Commit()
                    {
                        id = Guid.NewGuid().ToString(),
                        message = "Some testin' goin' on"
                    },
                    status = "succeeded"
                }
            };

            Project p = new Project()
            {
                DateCreated = DateTime.Now.AddDays(-1),
                ProjectName = "TestApp"
            };

            var result = NotifyController.DeTokenizeString(Input, p, n);

            Assert.AreEqual("TestApp is being tested on @TweetHarbor 'cause it rocks the " + n.build.commit.id.Substring(0, 7) + " magic Some testin' goin' on", result);
        }
예제 #12
0
        public void TestBuildSuccess()
        {
            string testStr = "{\"application\": { \"name\": \"Test Project 1\" },   \"build\": {    \"commit\": {      \"id\": \"" + Guid.NewGuid() + "\", \"message\": \"Implement foo\"  }, \"status\": \"succeeded\" } }";
            var o = JsonConvert.DeserializeObject<Notification>(testStr);

            var db = new TestTweetHarborDbContext();
            var user = new User()
            {
                EmailAddress = "*****@*****.**",
                OAuthToken = "<FakeOauthToken>",
                OAuthTokenSecret = "<FakeOauthTokenSecret>",
                UniqueId = "db7a3a64156d0b33beae93fe99ca599e",
                SendPrivateTweet = true,
                SendPublicTweet = false,
                TwitterUserName = "******"
            };
            db.Users.Add(user);

            var proj = new Project()
                {
                    ProjectName = "The Test Project",
                    SendPrivateTweetOnFailure = true,
                    SendPrivateTweetOnSuccess = true,
                    SendPublicTweetOnFailure = false,
                    SendPublicTweetOnSuccess = true,
                    User = user
                };

            db.Projects.Add(proj);

            proj.MessageRecipients.Add(new TwitterMessageRecipient() { ScreenName = "sethwebster" });

            user.Projects = new Collection<Project>();
            user.Projects.Add(proj);

            var m = new Mock<ITweetHarborTextMessageService>();

            m.Setup(a => a.SendText("", ""));

            var controller = new NotifyController(db, new TestTweetHarborTwitterService(), m.Object);
            MvcMockHelpers.SetFakeControllerContext(controller);

            var res = controller.New(user.TwitterUserName, user.UniqueId, o);

            Assert.IsInstanceOfType(res, typeof(JsonResult));
            Assert.IsInstanceOfType((res as JsonResult).Data, typeof(JsonResultModel));

            Assert.AreEqual(true, ((res as JsonResult).Data as JsonResultModel).Success);
        }
예제 #13
0
        public void GlobalNotificationToggle_SendPublicTweet_False_UserDoesNotExist()
        {
            var db = new TestTweetHarborDbContext();
            var user = new User()
            {
                EmailAddress = "*****@*****.**",
                OAuthToken = "<FakeOauthToken>",
                OAuthTokenSecret = "<FakeOauthTokenSecret>",
                UniqueId = "db7a3a64156d0b33beae93fe99ca599e",
                SendPrivateTweet = true,
                SendPublicTweet = true,
                TwitterUserName = "******"
            };
            db.Users.Add(user);

            var proj = new Project()
            {
                ProjectName = "The Test Project",
                SendPrivateTweetOnFailure = true,
                SendPrivateTweetOnSuccess = true,
                SendPublicTweetOnFailure = false,
                SendPublicTweetOnSuccess = true,
                User = user
            };

            db.Projects.Add(proj);
            var ts = new TestTweetHarborTwitterService();

            var auth = new Mock<IFormsAuthenticationWrapper>();

            var controller = new AccountController(db, ts, auth.Object);

            var ident = new GenericIdentity("localtestusermissing");
            System.Security.Principal.GenericPrincipal c = new System.Security.Principal.GenericPrincipal(ident, new string[] { });

            controller.SetFakeControllerContext(c);

            var res = controller.GlobalNotificationToggle("SendPublicTweet", true);
            Assert.IsInstanceOfType(res.Data, typeof(JsonResultModel));
            var rm = (JsonResultModel)res.Data;
            Assert.IsFalse(rm.Success);
            Assert.IsTrue(rm.Error == "User Not Found");
        }
        public void TestSendSmsMessages_InboundNotificationCreated()
        {
            string testStr = "{\"application\": { \"name\": \"Test Project 1\" },   \"build\": {    \"commit\": {      \"id\": \"" + Guid.NewGuid() + "\", \"message\": \"Implement foo\"  }, \"status\": \"succeeded\" } }";
            var o = JsonConvert.DeserializeObject<Notification>(testStr);

            TestTweetHarborDbContext db = new TestTweetHarborDbContext();

            var m = new Mock<ITweetHarborTextMessageService>();
            m.Setup(a => a.SendText("", ""));

            var user = UserHelper.ArrangeNewUserDefault();
            db.Users.Add(user);

            var proj = new Project()
            {
                ProjectName = o.application.name,
                SendPrivateTweetOnFailure = true,
                SendPrivateTweetOnSuccess = true,
                SendPublicTweetOnFailure = false,
                SendPublicTweetOnSuccess = true,
                SendTextOnSuccess = true,
                SendTextOnFailure = false,
                User = user
            };
            user.Projects.Add(proj);
            db.Projects.Add(proj);
            var tmr = new TextMessageRecipient()
            {
                Name = "App Test",
                PhoneNumber = "5201235678",
            };
            proj.TextMessageRecipients.Add(tmr);

            var controller = new NotifyController(db, new TestTweetHarborTwitterService(), m.Object);

            var res = controller.New(user.UserName, user.UniqueId, o);

            Assert.IsInstanceOfType(res, typeof(JsonResult));
            Assert.IsInstanceOfType((res as JsonResult).Data, typeof(JsonResultModel));

            Assert.AreEqual(true, ((res as JsonResult).Data as JsonResultModel).Success);

            Assert.AreNotEqual(0, proj.ProjectNotifications.Count);
            Assert.AreNotEqual(0, proj.ProjectNotifications.First().Build.commit.message.Length);
        }