public void Can_read_who_changed_the_workitem_from_alert_json_block() { // Arrange var alertMessage = ServiceHookTestData.GetEventJson("workitem.updated"); var provider = new Providers.JsonDataProvider(alertMessage); // act var actual = provider.GetWorkItemDetails().ChangedBy; // assert Assert.AreEqual("Jamal Hartnett", actual); }
public void Can_get_the_workitem_id() { // Arrange var alertMessage = ServiceHookTestData.GetEventJson("workitem.updated"); var provider = new Providers.JsonDataProvider(alertMessage); // act var actual = provider.GetWorkItemDetails().Id; // assert Assert.AreEqual(5, actual); }
public void Can_read_the_changed_fields_from_created_alert_json_block() { // Arrange var alertMessage = ServiceHookTestData.GetEventJson("workitem.created"); var provider = new Providers.JsonDataProvider(alertMessage); // act var actual = provider.GetWorkItemDetails().ChangedAlertFields; // assert Assert.AreEqual(13, actual.Count); Assert.AreEqual("System.TeamProject", actual[1].ReferenceName); Assert.AreEqual(string.Empty, actual[1].OldValue); Assert.AreEqual("FabrikamCloud", actual[1].NewValue); }
public void Can_read_the_changed_fields_from_changed_alert_json_block() { // Arrange var alertMessage = ServiceHookTestData.GetEventJson("workitem.updated"); var provider = new Providers.JsonDataProvider(alertMessage); // act var actual = provider.GetWorkItemDetails().ChangedAlertFields; // assert Assert.AreEqual(9, actual.Count); Assert.AreEqual("System.AuthorizedDate", actual[1].ReferenceName); Assert.AreEqual("15/07/2014 04:48:44 PM", DateTime.Parse(actual[1].OldValue).ToString("dd/MM/yyyy hh:mm:ss tt")); Assert.AreEqual("15/07/2014 05:42:44 PM", DateTime.Parse(actual[1].NewValue).ToString("dd/MM/yyyy hh:mm:ss tt")); }
public void Can_read_changed_fields_when_value_set_to_null() { // Arrange var alertMessage = ServiceHookTestData.GetEventJson("workitem.updated"); var provider = new Providers.JsonDataProvider(alertMessage); // act var actual = provider.GetWorkItemDetails().ChangedAlertFields; // assert Assert.AreEqual(9, actual.Count); Assert.AreEqual("System.AssignedTo", actual[5].ReferenceName); Assert.AreEqual(string.Empty, actual[5].OldValue); Assert.AreEqual("Jamal Hartnet", actual[5].NewValue); }
[Authorize] // Require some form of authentication public HttpResponseMessage Post([FromBody] JObject jsondata) { try { if (ConfigHelper.ParseOrDefault(Microsoft.Azure.CloudConfigurationManager.GetSetting("LogEventsToFile")) == true) { var logPath = ConfigHelper.GetLoggingPath(); logger.Info(string.Format("Post: Event being logged to [{0}]", logPath)); LoggingHelper.DumpEventToDisk(jsondata, logPath); } var dataProvider = new Providers.JsonDataProvider(jsondata); var uri = dataProvider.GetServerUrl(); var locationpat = ConfigHelper.GetPersonalAccessToken(uri); logger.Info($"Post: Using a {uri}"); if (string.IsNullOrEmpty(locationpat.Item2) == false) { logger.Info($"Post: Using a PAT token and obtained from {locationpat.Item1}"); this.iAzureDevOpsProvider = new Providers.AzureDevOpsProvider(uri, locationpat.Item2); } else { logger.Info(string.Format("Post: Using default credentials and url {0}", uri)); this.iAzureDevOpsProvider = new Providers.AzureDevOpsProvider(uri); } // work out the event type var eventType = dataProvider.GetEventType(); // work out the subscription ID var subscriptionID = dataProvider.GetSubsriptionID(); string[] argItems = null; switch (eventType) { case "workitem.updated": case "workitem.created": case "workitem.deleted": case "workitem.restored": case "workitem.commented": var workItemId = dataProvider.GetWorkItemDetails().Id; if (workItemId > 0) { argItems = new[] { eventType, workItemId.ToString() }; logger.Info( string.Format("Post: {1} Event being processed for WI:{0}", workItemId, eventType)); } else { logger.Error( string.Format("Post: {0} Event cannot find workitem ID", eventType)); return(new HttpResponseMessage(HttpStatusCode.BadRequest)); } break; case "build.complete": var buildDetails = dataProvider.GetBuildDetails(); argItems = new[] { eventType, buildDetails.Id.ToString() }; logger.Info(string.Format( "Post: Event being processed for Build:{0}", buildDetails.BuildUri)); break; case "ms.vss-release.deployment-approval-completed-event": case "ms.vss-release.deployment-approval-pending-event": case "ms.vss-release.deployment-completed-event": case "ms.vss-release.deployment-started-event": case "ms.vss-release.release-abandoned-event": case "ms.vss-release.release-created-event": var releaseDetails = dataProvider.GetReleaseDetails(); argItems = new[] { eventType, releaseDetails.Id.ToString() }; logger.Info(string.Format( "Post: Event being processed for Release:{0}", releaseDetails.Id)); break; case "tfvc.checkin": var checkInDetails = dataProvider.GetCheckInDetails(); argItems = new[] { eventType, checkInDetails.Changeset.ToString() }; logger.Info( string.Format( "Post: Event being processed for Checkin:{0}", checkInDetails.Changeset)); break; case "message.posted": var messagePostDetails = dataProvider.GetMessagePostDetails(); argItems = new[] { eventType, messagePostDetails.PostRoomId.ToString() }; logger.Info( string.Format( "Post: Event being processed for Meesage Post in Room:{0}", messagePostDetails.PostRoomId)); break; case "git.push": var pushDetails = dataProvider.GetPushDetails(); argItems = new[] { eventType, pushDetails.Repo, pushDetails.PushId.ToString() }; logger.Info( string.Format( "Post: Event being processed for Push:{0}", pushDetails.PushId)); break; case "git.pullrequest.created": case "git.pullrequest.merged": case "git.pullrequest.updated": var pullDetails = dataProvider.GetPullDetails(); argItems = new[] { eventType, pullDetails.Repo, pullDetails.PullId.ToString() }; logger.Info( string.Format( "Post: Event being processed for Pull:{0}", pullDetails.PullId)); break; default: logger.Info(string.Format("Post: Unhandled event cannot processed:{0}", eventType)); return(new HttpResponseMessage(HttpStatusCode.BadRequest)); } var args = new Dictionary <string, object> { { "Arguments", argItems }, }; var engine = new AzureDevOpsEventsProcessor.Dsl.DslProcessor(redirectScriptEngineOutputtoLogging); engine.RunScript( this.dslFolder, this.scriptFolder, FolderHelper.GetScriptName( eventType, subscriptionID, this.scriptFile, this.useSubscriptionID), args, this.iAzureDevOpsProvider, this.iEmailProvider, dataProvider); return(new HttpResponseMessage(HttpStatusCode.OK)); } catch (Exception ex) { // using a global exception catch to make sure we don't block any threads LoggingHelper.DumpException(logger, ex); return(new HttpResponseMessage(HttpStatusCode.BadRequest)); } }