Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        public void Can_get_the_base_url()
        {
            // Arrange
            var alertMessage = ServiceHookTestData.GetEventJson("workitem.updated");
            var provider     = new Providers.JsonDataProvider(alertMessage);

            // act
            var actual = provider.GetServerUrl();

            // assert
            Assert.AreEqual("http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection", actual.ToString());
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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"));
        }
Ejemplo n.º 6
0
        public void Can_read_the_changed_files_from_alert_json_block()
        {
            // Arrange
            var alertMessage = ServiceHookTestData.GetEventJson("tfvc.checkin");
            var dataProvider = new Providers.JsonDataProvider(alertMessage);

            // act
            var actual = dataProvider.GetCheckInDetails();

            // assert
            Assert.AreEqual(18, actual.Changeset);
            Assert.AreEqual(@"Dropping in new Java sample", actual.Comment);
            Assert.AreEqual("Normal Paulk checked in changeset 18: Dropping in new Java sample", actual.Summary);
            Assert.AreEqual(@"Normal Paulk", actual.Committer);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        public void Can_read_the_build_fields_from_alert_json_block()
        {
            // Arrange
            var alertMessage = ServiceHookTestData.GetEventJson("build.complete");
            var dataProvider = new Providers.JsonDataProvider(alertMessage);

            // act
            var actual = dataProvider.GetBuildDetails();

            // assert
            Assert.AreEqual("vstfs:///Build/Build/2", actual.BuildUri.ToString());
            Assert.AreEqual(2, actual.Id);
            Assert.AreEqual("ConsumerAddressModule_20150407.1", actual.Summary);
            Assert.AreEqual("succeeded", actual.Status);
            Assert.AreEqual("https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/71777fbc-1cf2-4bd1-9540-128c1c71f766/_apis/build/Builds/2", actual.BuildUrl.ToString());
        }
Ejemplo n.º 9
0
        [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));
            }
        }