예제 #1
0
        public void Can_read_who_changed_the_workitem_from_alert_xml_block()
        {
            // Arrange
            var alertMessage = TestData.DummyWorkItemChangedAlertXml();

            // act
            var actual = EventXmlHelper.GetChangedBy(alertMessage);

            // assert
            Assert.AreEqual("Administrator", actual);
        }
예제 #2
0
        public void Can_read_the_changed_fields_from_alert_xml_block()
        {
            // Arrange
            var alertMessage = TestData.DummyBuildStatusChangedAlertXmlWithQualityChange();

            // act
            var actual = EventXmlHelper.GetBuildStatusChangedAlertFields(alertMessage);

            // assert
            Assert.AreEqual("vstfs:///Build/Build/49", actual.BuildUri.ToString());
            Assert.AreEqual("Helpdesk Build CallTracker Dev_20100317.2 Quality Changed To Initial Test Passed", actual.Summary);
            Assert.AreEqual("Initial Test Passed", actual.NewQuality);
        }
예제 #3
0
        public void Can_read_changed_fields_when_value_set_to_null()
        {
            // Arrange
            var alertMessage = TestData.DummyAlertXmlWithNullFieldValue();

            // act
            var actual = EventXmlHelper.GetWorkItemChangedAlertFields(alertMessage);

            // assert
            Assert.AreEqual(1, actual.Count);
            Assert.AreEqual("Bm.CustomField1", actual[0].ReferenceName);
            Assert.AreEqual("s1", actual[0].OldValue);
            Assert.AreEqual(string.Empty, actual[0].NewValue);
        }
예제 #4
0
        public void Can_read_the_changed_fields_from_alert_xml_block()
        {
            // Arrange
            var alertMessage = TestData.DummyWorkItemChangedAlertXml();

            // act
            var actual = EventXmlHelper.GetWorkItemChangedAlertFields(alertMessage);

            // assert
            Assert.AreEqual(4, actual.Count);
            Assert.AreEqual("Microsoft.VSTS.Common.StackRank", actual[1].ReferenceName);
            Assert.AreEqual(string.Empty, actual[1].OldValue);
            Assert.AreEqual("1", actual[1].NewValue);
        }
예제 #5
0
        /// <summary>
        /// Sends an email based on a template
        /// </summary>
        /// <param name="workItemId">The work item ID</param>
        /// <param name="templatePath">Path to the email template</param>
        /// <param name="dumpAllWorkItemFields">If true appends all work item fields to the email</param>
        /// <param name="dumpAllAlertFields">If true appends all alert fields to the email</param>
        /// <param name="showMissingFieldNames">If true adds error messages for incorrect field names</param>
        public void SendEmail(int workItemId, string templatePath, bool dumpAllWorkItemFields, bool dumpAllAlertFields, bool showMissingFieldNames)
        {
            // Get this list of changes
            var alertItems = EventXmlHelper.GetWorkItemChangedAlertFields(this.eventXml);
            var changedBy  = EventXmlHelper.GetChangedBy(this.eventXml);

            // Create a new Tfs helper
            var fieldLookupProvider = new TfsFieldLookupProvider(
                this.iTfsProvider.GetWorkItem(workItemId),
                alertItems,
                changedBy,
                showMissingFieldNames);

            // Process the email using a template
            this.iEmailProvider.SendEmailAlert(
                fieldLookupProvider,
                templatePath,
                dumpAllWorkItemFields,
                dumpAllAlertFields);
        }
        public void Can_read_the_changed_fields_from_alert_xml_block()
        {
            // Arrange
            var alertMessage = TestData.DummyCheckInAlertXml();

            // act
            var actual = EventXmlHelper.GetCheckInDetails(alertMessage);

            // assert
            Assert.AreEqual("Scrum (TFVC) Changeset 62: The comment", actual.Summary);
            Assert.AreEqual(@"TYPHOONTFS\Richard", actual.Committer);
            Assert.AreEqual(@"Scrum (TFVC)", actual.TeamProject);
            Assert.AreEqual(@"The comment", actual.Comment);
            Assert.AreEqual(1, actual.FilesAdded.Count);
            Assert.AreEqual("NextClass.cs", actual.FilesAdded[0]);
            Assert.AreEqual(2, actual.FilesEdited.Count);
            Assert.AreEqual("ClassLibrary1.csproj", actual.FilesEdited[0]);
            Assert.AreEqual(1, actual.FilesDeleted.Count);
            Assert.AreEqual("Class1.cs", actual.FilesDeleted[0]);
            Assert.AreEqual(62, actual.Changeset);
        }
예제 #7
0
        public void Notify(string eventXml, string tfsIdentityXml)
        {
            try
            {
                if (ConfigHelper.ParseOrDefault(System.Configuration.ConfigurationManager.AppSettings["LogEventsToFile"]) == true)
                {
                    var logPath = ConfigHelper.GetLoggingPath();
                    logger.Info(string.Format("TFSEventsProcessor: DslScriptService Event being logged to [{0}]", logPath));
                    LoggingHelper.DumpEventToDisk(eventXml, logPath);
                }

                // Create a new Tfs helper
                this.iTfsProvider.UnpackIdentity(tfsIdentityXml);

                // work out the event type
                string[] argItems = null;
                try
                {
                    var buildDetails = EventXmlHelper.GetBuildStatusChangedAlertFields(eventXml);
                    argItems = new[] { EventTypes.BuildEvent.ToString(), buildDetails.BuildUri.ToString() };
                    logger.Info(string.Format(
                                    "TFSEventsProcessor: DslScriptService Event being processed for Build:{0}",
                                    buildDetails.BuildUri));
                }
                catch (NullReferenceException)
                {
                    // if it not build must be work item
                    // Extract the required information out of the eventXml
                    var workItemId = EventXmlHelper.GetWorkItemValue <int>(
                        eventXml,
                        EventXmlHelper.FieldSection.CoreFields,
                        EventXmlHelper.FieldType.IntegerField,
                        EventXmlHelper.ValueType.NewValue,
                        "System.Id");
                    if (workItemId > 0)
                    {
                        argItems = new[] { EventTypes.WorkItemEvent.ToString(), workItemId.ToString() };
                        logger.Info(
                            string.Format("TFSEventsProcessor: DslScriptService Event being processed for WI:{0}", workItemId));
                    }
                    else
                    {
                        try
                        {
                            var checkInDetails = EventXmlHelper.GetCheckInDetails(eventXml);
                            argItems = new[] { EventTypes.CheckInEvent.ToString(), checkInDetails.Changeset.ToString() };
                            logger.Info(
                                string.Format(
                                    "TFSEventsProcessor: DslScriptService Event being processed for Checkin:{0}",
                                    checkInDetails.Changeset));
                        }
                        catch (NullReferenceException)
                        {
                            // other event type
                        }
                    }
                }
                var args = new Dictionary <string, object>
                {
                    { "Arguments", argItems },
                };

                var engine = new TFSEventsProcessor.Dsl.DslProcessor();
                engine.RunScript(
                    this.dslFolder,
                    this.scriptFolder,
                    GetScriptName(argItems[0], this.scriptFile),
                    args,
                    this.iTfsProvider,
                    this.iEmailProvider,
                    eventXml);
            }
            catch (Exception ex)
            {
                // using a global exception catch to make sure we don't block any threads
                this.DumpException(ex);
            }
        }