/// <inheritdoc/> public void UpdateWorkItem(NamespacedName namespacedName, UpdateWorkItem <TResource> update) { if (update is null) { throw new ArgumentNullException(nameof(update)); } lock (_workItemsSync) { if (_workItems.TryGetValue(namespacedName, out var workItem)) { // alter an existing entry workItem = update(workItem); if (workItem.IsEmpty) { // remove if result has no information _workItems.Remove(namespacedName); } else { // otherwise update struct in dictionary _workItems[namespacedName] = workItem; } } else { workItem = update(OperatorCacheWorkItem <TResource> .Empty); if (workItem.IsEmpty == false) { // add if result has information _workItems.Add(namespacedName, workItem); } } } }
public void Test_UpdateIsFalse_When_TypeDoesNotHaveIntegratedInField() { using (var context = ShimsContext.Create()) { var args = GetWorkflowArgs(false, true); var activity = new UpdateWorkItem(); IDictionary<string, object> outputs; var result = WorkflowInvoker.Invoke(activity, args, out outputs, TimeSpan.FromMinutes(1)); Assert.IsFalse(result); Assert.IsTrue(outputs["WarningMessage"].ToString().Contains("TF42093")); } }
public void Test_UpdateIsFalse_When_TypeDoesNotHaveIntegratedInField() { using (var context = ShimsContext.Create()) { var args = GetWorkflowArgs(false, true); var activity = new UpdateWorkItem(); IDictionary <string, object> outputs; var result = WorkflowInvoker.Invoke(activity, args, out outputs, TimeSpan.FromMinutes(1)); Assert.IsFalse(result); Assert.IsTrue(outputs["WarningMessage"].ToString().Contains("TF42093")); } }
private async Task <UpdateWorkItem> mergeUpdatedWorkItemWithOriginal(WorkItem workItem) { var originalWorkItems = await _repository.GetWorkItemsAsync(new[] { workItem.Id }); var originalWorkItem = originalWorkItems.FirstOrDefault(); if (originalWorkItem == null) { throw new VisualStudioOnlineApiException("Could not find original work item!"); } var updateWorkItem = new UpdateWorkItem { Id = workItem.Id, Revision = workItem.Revision, }; // Find all fields that need to be updated var modifiedFields = (from originalField in originalWorkItem.Fields let newField = workItem[originalField.ReferenceName] where newField != null && newField.Value != originalField.Value select new UpdateWorkItemField { Metadata = new UpdateWorkItemFieldMetadata { ReferenceName = newField.ReferenceName }, Value = newField.Value }); updateWorkItem.Fields.AddRange(modifiedFields); // Find new fields var newFields = workItem.Fields.Where(newField => originalWorkItem[newField.ReferenceName] == null) .Select(newField => new UpdateWorkItemField { Metadata = new UpdateWorkItemFieldMetadata { ReferenceName = newField.ReferenceName }, Value = newField.Value }); updateWorkItem.Fields.AddRange(newFields); return(updateWorkItem); }
public async Task <WorkItem> UpdateWorkItemAsync(UpdateWorkItem workItem) { var item = await _visualStudioOnlineConnector.GetApiRequestAsync <WorkItem>("wit/workitems/" + workItem.Id, request => { // HttpMethod doesn't support "patch", so we're implementing this hack request.Method = HttpMethod.Post; request.AddHeader("X-HTTP-Method-Override", "PATCH"); request.ContentType = ContentTypes.Json; request.AddParameter(workItem); }); return(item); }