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); }
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"); }
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); }
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)); }
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; } } } }
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 } } }
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(); }
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; }
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); }
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); }
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); }
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); }