public void GetFieldOrNull_ShouldReturnField_WhenFieldIsInCoreFieldsOrChangedFields()
 {
     var changedEvent = new WorkItemChangedEvent()
         {
             CoreFields = new FieldGroup()
                 {
                     StringFields = new[] {new Field {Name = "coreString"}},
                     IntegerFields = new[] {new Field {Name = "coreInt"}},
                 },
             ChangedFields = new FieldGroup()
                 {
                     StringFields = new[] {new Field {Name = "changedString"}},
                     IntegerFields = new[] {new Field {Name = "changedInt"}},
                 }
         };
     Assert.Null(changedEvent.GetFieldOrNull("notAField"));
     Assert.NotNull(changedEvent.GetFieldOrNull("coreString"));
     Assert.NotNull(changedEvent.GetFieldOrNull("coreInt"));
     Assert.NotNull(changedEvent.GetFieldOrNull("changedString"));
     Assert.NotNull(changedEvent.GetFieldOrNull("changedInt"));
 }
Esempio n. 2
0
        public void HandleWorkItemChanged(WorkItemChangedEvent changedEvent)
        {
            var teamProjectMapping = FindTeamProjectMapping(changedEvent.PortfolioProject);

            if (teamProjectMapping == null)
            {
                _logger.Trace("Ignoring project {0}", changedEvent.PortfolioProject);
                return;
            }

            var workItemTypeField = changedEvent.GetFieldOrNull("Work Item Type");
            if (workItemTypeField == null)
            {
                _logger.Warn("Could not find field 'Work Item Type'");
                return;
            }

            if (changedEvent.ChangeType == "Change")
            {
                if (workItemTypeField.NewValue == "Task")
                {
                    if (!IsNotificationSubscribedTo(teamProjectMapping, Notification.TaskWorkChange))
                    {
                        return;
                    }

                    var stateChangedField = changedEvent.GetChangedFieldOrNull("State");
                    if (stateChangedField != null)
                    {
                        _hipChatNotifier.SendTaskStateChangedNotification(
                            changedEvent, teamProjectMapping.HipChatRoomId);
                    }

                    var stateField = changedEvent.GetFieldOrNull("State");
                    var remainingWorkChangedField = changedEvent.GetChangedFieldOrNull("Remaining Work");
                    if (remainingWorkChangedField != null
                        && stateField.NewValue == "In Progress")
                    {
                        _hipChatNotifier.SendTaskChangedRemainingNotification(
                            changedEvent, teamProjectMapping.HipChatRoomId);
                    }

                    var assignedToField = changedEvent.GetChangedFieldOrNull("Assigned To");
                    if (assignedToField != null
                        && assignedToField.NewValue != assignedToField.OldValue
                        && stateField.NewValue == "In Progress")
                    {
                        _hipChatNotifier.SendTaskOwnerChangedNotification(
                            changedEvent, teamProjectMapping.HipChatRoomId);
                    }

                    var historyField = changedEvent.GetTextFieldOrNull("History");
                    if (historyField != null)
                    {
                        if (!historyField.Value.StartsWith("Associated with changeset") &&
                            !historyField.Value.Contains(
                                "The Fixed In field was updated as part of associating work items with the build."))
                        {
                            _hipChatNotifier.SendTaskHistoryCommentNotification(changedEvent,
                                                                                teamProjectMapping.HipChatRoomId);
                        }
                    }
                }
                else
                {
                    _logger.Info(string.Format("Ignoring unhandled field type: {0}", workItemTypeField.NewValue));
                    return;
                }
            }
            else if (changedEvent.ChangeType == "New")
            {
                _logger.Trace("Ignoring new work item event");
                return;
            }
        }
Esempio n. 3
0
        public void SendTaskChangedRemainingNotification(WorkItemChangedEvent changedEvent, int roomId)
        {
            var title = changedEvent.GetFieldOrNull("Title").NewValue;
            var remaining = changedEvent.GetFieldOrNull("Remaining Work");
            var message = string.Format("<a href='{0}'>{1}</a> hours changed: {2} &#8658; {3}",
                                        changedEvent.DisplayUrl,
                                        title,
                                        remaining.OldValue,
                                        remaining.NewValue);
            var userName = GetAssignedToOrNull(changedEvent) ?? GetChangedByOrNull(changedEvent);
            if (userName != null)
            {
                message = string.Format("{0} - {1}", userName, message);
            }

            _hipChatClient.From = GetFromValue("Task");
            _hipChatClient.RoomId = roomId;
            _hipChatClient.SendMessage(message, HipChatClient.BackgroundColor.yellow);
        }
Esempio n. 4
0
 private static string GetChangedByOrNull(WorkItemChangedEvent workItemChangedEvent)
 {
     var changedByField = workItemChangedEvent.GetFieldOrNull("Changed By");
     if (changedByField != null && !string.IsNullOrEmpty(changedByField.NewValue))
     {
         return changedByField.NewValue;
     }
     return null;
 }
Esempio n. 5
0
 private static string GetAssignedToOrNull(WorkItemChangedEvent workItemChangedEvent)
 {
     var assignedToField = workItemChangedEvent.GetFieldOrNull("Assigned To");
     if (assignedToField != null && !string.IsNullOrEmpty(assignedToField.NewValue))
     {
         return assignedToField.NewValue;
     }
     return null;
 }
Esempio n. 6
0
 public void SendTaskStateChangedNotification(WorkItemChangedEvent changedEvent, int roomId)
 {
     var title = changedEvent.GetFieldOrNull("Title").NewValue;
     var state = changedEvent.GetFieldOrNull("State").NewValue;
     var message = string.Format("<a href='{0}'>{1}</a> is <i>{2}</i>",
         changedEvent.DisplayUrl,
         title,
         state);
     var userName = GetAssignedToOrNull(changedEvent) ?? GetChangedByOrNull(changedEvent);
     if (userName != null)
     {
         message = string.Format("{0} - {1}", userName, message);
     }
     _hipChatClient.From = GetFromValue("Task");
     _hipChatClient.RoomId = roomId;
     _hipChatClient.SendMessage(message, HipChatClient.BackgroundColor.yellow);
 }
Esempio n. 7
0
 public void SendTaskOwnerChangedNotification(WorkItemChangedEvent changedEvent, int roomId)
 {
     var title = changedEvent.GetFieldOrNull("Title").NewValue;
     var assignedTo = changedEvent.GetFieldOrNull("Assigned To").NewValue;
     var message = string.Format("<a href='{0}'>{1}</a> assigned to <i>{2}</i>",
         changedEvent.DisplayUrl,
         title,
         assignedTo);
     _hipChatClient.From = GetFromValue("Task");
     _hipChatClient.RoomId = roomId;
     _hipChatClient.SendMessage(message, HipChatClient.BackgroundColor.yellow);
 }
Esempio n. 8
0
 public void SendTaskHistoryCommentNotification(WorkItemChangedEvent changedEvent, int roomId)
 {
     var shortTitle = Shorten(changedEvent.GetFieldOrNull("Title").NewValue, 25);
     var userName = GetChangedByOrNull(changedEvent) ?? GetAssignedToOrNull(changedEvent);
     var comment = Shorten(changedEvent.GetTextFieldOrNull("History").Value, 250);
     var message = string.Format("<a href='{0}'>{1}</a> comment: <i>{2}</i>",
                                 changedEvent.DisplayUrl,
                                 shortTitle,
                                 comment);
     if (userName != null)
     {
         message = string.Format("{0} - {1}", userName, message);
     }
     _hipChatClient.From = GetFromValue("Task");
     _hipChatClient.RoomId = roomId;
     _hipChatClient.SendMessage(message, HipChatClient.BackgroundColor.purple);
 }