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); }
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); }
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); }
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); }
/// <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); }
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); } }