예제 #1
0
파일: Program.cs 프로젝트: deepuroy/QDash
        private static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var vstsUrl      = ConfigurationManager.AppSettings["VSTS_URL"];
            var vstsUserName = ConfigurationManager.AppSettings["VSTS_USERNAME"];
            var vstsPassword = ConfigurationManager.AppSettings["VSTS_PASSWORD"];
            var client       = new VsClient(new Uri(vstsUrl), new VssBasicCredential(vstsUserName, vstsPassword));
            var workItems    = new WorkItems(client);
            var result       = workItems.RunQuery(@"SELECT[Id], [Title], [State] FROM workitems WHERE[Work Item Type] = 'Bug'");

            if (result != null)
            {
                foreach (var item in result.WorkItems)
                {
                    Console.WriteLine(item.Id);
                }
            }
        }
예제 #2
0
        public void CL_WorkItemTracking_RecycleBin_GetDeletedItem_Success()
        {
            // arrange
            RecycleBin recycleBin = new RecycleBin(_configuration);
            WorkItems  workItems  = new WorkItems(_configuration);

            // act
            ////create workitem, delete them, get from bin by id
            var item = workItems.CreateWorkItem(_configuration.Project);

            workItems.DeleteWorkItem(Convert.ToInt32(item.Id));

            var result = recycleBin.GetDeletedItem(Convert.ToInt32(item.Id));

            //assert
            Assert.IsNotNull(result);
            Assert.AreEqual(result.Id, item.Id);
        }
예제 #3
0
        public override void DeleteItem()
        {
            List <WorkItem> workItems = WorkItems.ToList();

            foreach (WorkItem workItem in workItems)
            {
                if (workItem.IsResolvedAnyResolution)
                {
                    workItem.CloseItem();
                }
                else if (workItem.IsActive)
                {
                    workItem.DeleteItem();
                }
            }

            base.DeleteItem();
        }
예제 #4
0
        public void WorkItemTracking_WorkItems_AddHyperLink_Success()
        {
            // arrange
            WorkItems workItems = new WorkItems(_configuration);

            // act
            var result = workItems.AddHyperLink(_configuration.WorkItemId);

            // assert
            if (result.ToLower().Contains("relation already exists"))
            {
                Assert.Inconclusive("Link already exists on bug");
            }
            else
            {
                Assert.AreEqual("success", result);
            }
        }
예제 #5
0
 public int UpdateWorkItem(IWorkflowItem entity)
 {
     return(LockExecute <int>(() =>
     {
         if (entity.ItemId >= 10000)
         {
             WorkItemsRead.Remove(entity);
             WorkItemsRead.Add(entity);
             return Dao.Get().Update <WorkflowItemRead>(entity);
         }
         else
         {
             WorkItems.Remove(entity);
             WorkItems.Add(entity);
             return Dao.Get().Update <WorkflowItem>(entity);
         }
     }));
 }
예제 #6
0
        private async Task ExecuteCore()
        {
            DirectoryInfo directory = Directory.CreateDirectory(Path.Combine(OutputDirectory, JobId));

            using (FileStream stream = File.Open(Path.Combine(directory.FullName, MetadataFile), FileMode.Create, FileAccess.Write))
                using (var writer = new StreamWriter(stream))
                {
                    foreach (ITaskItem metadata in MetadataToWrite)
                    {
                        await writer.WriteLineAsync(metadata.GetMetadata("Identity"));
                    }
                }

            ResultsContainer = ResultsContainer.EndsWith("/") ? ResultsContainer : ResultsContainer + "/";
            await Task.WhenAll(WorkItems.Select(wi => DownloadFilesForWorkItem(wi, directory.FullName, _cancellationSource.Token)));

            return;
        }
예제 #7
0
        public void CL_WorkItemTracking_WorkItems_GetWorkItemsWithLinksAndAttachments_Success()
        {
            // arrange
            WorkItems workItems = new WorkItems(_configuration);
            var       split     = _configuration.WorkItemIds.Split(',');
            var       ids       = new List <int>();

            foreach (string item in split)
            {
                ids.Add(Convert.ToInt32(item));
            }

            // act
            var result = workItems.GetWorkItemsWithLinksAndAttachments(ids);

            //assert
            Assert.IsNotNull(result);
        }
예제 #8
0
        private async Task <IEnumerable <CodeHubWorkItem> > SearchWorkItems(string searchText)
        {
            if (CodeHubMode)
            {
                return(GetCodeHubWorkItems());
            }

            searchText ??= "".ToLower();

            return(await Task.FromResult(WorkItems.Where(item => item.Id.ToString().Contains(searchText, StringComparison.InvariantCultureIgnoreCase) ||
                                                         item.Title != null && item.Title.ToLower().Contains(searchText, StringComparison.InvariantCultureIgnoreCase) ||
                                                         item.AssignedTo != null && item.AssignedTo.ToLower().Contains(searchText, StringComparison.InvariantCultureIgnoreCase) ||
                                                         item.WorkItemType != null && item.WorkItemType.ToLower().Contains(searchText, StringComparison.InvariantCultureIgnoreCase) ||
                                                         item.Project != null && item.Project.ToLower().Contains(searchText, StringComparison.InvariantCultureIgnoreCase) ||
                                                         item.State != null && item.State.ToLower().Contains(searchText, StringComparison.InvariantCultureIgnoreCase) ||
                                                         (item.ProviderType == StaticWorkProviderTypes.DevOps && item.Parent != null && item.Parent.Title.Contains(searchText, StringComparison.InvariantCultureIgnoreCase)) ||
                                                         (item.ProviderType == StaticWorkProviderTypes.DevOps && item.Parent?.Parent != null && item.Parent.Parent.Title.Contains(searchText, StringComparison.InvariantCultureIgnoreCase))
                                                         ).OrderByDescending(s => s.ChangedDate).ToList()));
        }
예제 #9
0
        public void WorkItemTracking_RecycleBin_GetDeletedItem_Success()
        {
            // arrange
            WorkItems  workItemsRequest  = new WorkItems(_configuration);
            RecycleBin recyclebinRequest = new RecycleBin(_configuration);

            // act
            WorkItemPatchResponse.WorkItem         createResponse         = workItemsRequest.CreateWorkItem(_configuration.Project);
            WorkItemPatchResponse.WorkItem         deleteResponse         = workItemsRequest.DeleteWorkItem(createResponse.id.ToString());
            GetItemFromRecycleBinResponse.WorkItem getDeletedItemResponse = recyclebinRequest.GetDeletedItem(_configuration.Project, createResponse.id.ToString());

            //assert
            Assert.AreEqual(HttpStatusCode.OK, createResponse.HttpStatusCode);
            Assert.AreEqual(HttpStatusCode.OK, deleteResponse.HttpStatusCode);
            Assert.AreEqual(HttpStatusCode.OK, getDeletedItemResponse.HttpStatusCode);

            workItemsRequest  = null;
            recyclebinRequest = null;
        }
예제 #10
0
        public void CL_WorkItemTracking_WorkItems_UpdateWorkItemUpdateLink_Success()
        {
            // arrange
            WorkItems workItems = new WorkItems(_configuration);

            // act
            var createOneResult = workItems.CreateWorkItem(_configuration.Project);
            var createTwoResult = workItems.CreateWorkItem(_configuration.Project);
            var id       = createOneResult.Id ?? default(int);
            var linkToId = createTwoResult.Id ?? default(int);

            var updateLinkResult = workItems.UpdateWorkItemAddLink(id, linkToId);
            var updateResult     = workItems.UpdateWorkItemUpdateLink(id);

            //assert
            Assert.IsNotNull(createOneResult);
            Assert.IsNotNull(createTwoResult);
            Assert.IsNotNull(updateResult);
        }
예제 #11
0
        public void CL_WorkItemTracking_RecycleBin_RestoreItem_Success()
        {
            // arrange
            RecycleBin recycleBin = new RecycleBin(_configuration);
            WorkItems  workItems  = new WorkItems(_configuration);

            // act
            ////create workitem, delete it, restore it, get it
            var item = workItems.CreateWorkItem(_configuration.Project);

            workItems.DeleteWorkItem(Convert.ToInt32(item.Id));

            var restoreResult = recycleBin.RestoreItem(Convert.ToInt32(item.Id));
            var getResult     = workItems.GetWorkItem(Convert.ToInt32(item.Id));

            //assert
            Assert.IsNotNull(getResult);
            Assert.AreEqual(getResult.Id, item.Id);
        }
예제 #12
0
        public void CL_WorkItemTracking_WorkItems_GetWorkItemsAsOfDate_Success()
        {
            // arrange
            WorkItems workItems = new WorkItems(_configuration);
            var       asOfDate  = new DateTime().AddDays(-30);
            var       split     = _configuration.WorkItemIds.Split(',');
            var       ids       = new List <int>();

            foreach (string item in split)
            {
                ids.Add(Convert.ToInt32(item));
            }

            // act
            var result = workItems.GetWorkItemsAsOfDate(ids, asOfDate);

            //assert
            Assert.IsNotNull(result);
        }
예제 #13
0
        internal static async Task <Tuple <WorkItems, string> > GetWorkItemData(string queryId, List <Tuple <string, string, string> > filters)
        {
            string query = await GetQueryWiql(queryId);

            if (filters != null)
            {
                foreach (var item in filters)
                {
                    if (item != null && !string.IsNullOrEmpty(item.Item1) && !string.IsNullOrEmpty(item.Item1))
                    {
                        query = query.Replace("where", string.Format(@"where [{0}] {1} ""{2}"" and", item.Item1, item.Item2, item.Item3));
                    }
                }
            }

            var wiqlClass = new QueryWiql {
                query = query
            };
            string queryClass      = JsonConvert.SerializeObject(wiqlClass, Formatting.None);
            string workItemsString = await HttpProvider.PostHttpRequest("Enterprise/_apis/wit/wiql?api-version=2.2", queryClass);

            var    workItems = (JObject)JsonConvert.DeserializeObject(workItemsString);
            string queryType = workItems["queryType"].Value <string>();

            WorkItems workItemsData = default(WorkItems);

            switch (queryType)
            {
            case "flat":
                workItemsData = JsonConvert.DeserializeObject <Flat>(workItemsString);
                break;

            case "OneHop":
                workItemsData = JsonConvert.DeserializeObject <OneHop>(workItemsString);
                break;

            case default(string):
                break;
            }

            return(new Tuple <WorkItems, string>(workItemsData, query));
        }
예제 #14
0
        public void WorkItemTracking_WorkItems_AddCommitLink_Success()
        {
            // arrange
            WorkItems request = new WorkItems(_configuration);

            // act
            WorkItemPatchResponse.WorkItem response = request.UpdateWorkItemAddCommitLink("3045");

            // assert
            if (response.Message.ToLower().Contains("relation already exists"))
            {
                Assert.Inconclusive("Commit link already exists on bug");
            }
            else
            {
                Assert.AreEqual(HttpStatusCode.OK, response.HttpStatusCode);
            }

            request = null;
        }
예제 #15
0
        public void CL_WorkItemTracking_WorkItems_UpdateWorkItemRemoveLink_Success()
        {
            // arrange
            WorkItems workItems = new WorkItems(_configuration);

            // act
            var createOneResult = workItems.CreateWorkItem(_configuration.Project); //create wi 1
            var createTwoResult = workItems.CreateWorkItem(_configuration.Project); //creaet wi 2
            var id       = createOneResult.Id ?? default(int);
            var linkToId = createTwoResult.Id ?? default(int);

            var updateResult = workItems.UpdateWorkItemAddLink(id, linkToId); //link on wi #1 to wi #2
            var removeResult = workItems.UpdateWorkItemRemoveLink(id);        //remove link from wi #1

            //assert
            Assert.IsNotNull(createOneResult);
            Assert.IsNotNull(createTwoResult);
            Assert.IsNotNull(updateResult);
            Assert.IsNotNull(removeResult);
        }
예제 #16
0
 internal string GetStatus()
 {
     if (WorkItems.All(wi => wi.State == StateEnum.Completed))
     {
         return("Completed");
     }
     if (WorkItems.Any(wi => wi.State == StateEnum.Active))
     {
         return("Active");
     }
     if (WorkItems.All(wi => wi.State == StateEnum.Waiting))
     {
         return("Waiting");
     }
     if (WorkItems.All(wi => wi.State == StateEnum.Cancelled))
     {
         return("Cancelled");
     }
     return("Unknown");
 }
예제 #17
0
        private void BuildBacklogItemsList(IConfiguration configuration)
        {
            List <String> backlogItemTypes = configuration.BacklogItems;

            if (!String.IsNullOrEmpty(configuration.SortFieldName))
            {
                if (configuration.SortDirection == SortDirection.Ascending)
                {
                    BackLogItems = WorkItems.Cast <WorkItem>().Where(item => backlogItemTypes.Contains(item.Type.Name) && item.Fields.Contains(configuration.SortFieldName)).OrderBy(b => b.Fields[configuration.SortFieldName].Value).ToList();
                }
                else
                {
                    BackLogItems = WorkItems.Cast <WorkItem>().Where(item => backlogItemTypes.Contains(item.Type.Name) && item.Fields.Contains(configuration.SortFieldName)).OrderByDescending(b => b.Fields[configuration.SortFieldName].Value).ToList();
                }
            }
            else
            {
                BackLogItems = WorkItems.Cast <WorkItem>().Where(item => backlogItemTypes.Contains(item.Type.Name)).ToList();
            }
        }
예제 #18
0
        public void WorkItemTracking_WorkItems_GetWorkItemFullyExpanded_Success()
        {
            // arrange
            WorkItems request = new WorkItems(_configuration);

            // act
            var response = request.GetWorkItemFullyExpanded(_configuration.WorkItemId);

            // assert
            if (response.HttpStatusCode == HttpStatusCode.NotFound)
            {
                Assert.Inconclusive("work item '" + _configuration.WorkItemId + "' not found");
            }
            else
            {
                Assert.AreEqual(HttpStatusCode.OK, response.HttpStatusCode);
            }

            request = null;
        }
예제 #19
0
        public void WorkItemTracking_WorkItems_GetWorkItemsWithLinksAndAttachments_Success()
        {
            // arrange
            WorkItems request = new WorkItems(_configuration);

            // act
            GetWorkItemsWithLinksAndAttachmentsResponse.WorkItems response = request.GetWorkItemsWithLinksAndAttachments(_configuration.WorkItemIds);

            // assert
            if (response.HttpStatusCode == HttpStatusCode.NotFound)
            {
                Assert.Inconclusive("work items '" + _configuration.WorkItemIds + "' not found");
            }
            else
            {
                Assert.AreEqual(HttpStatusCode.OK, response.HttpStatusCode);
            }

            request = null;
        }
예제 #20
0
        public void WorkItemTracking_WorkItems_GetDefaultValues_Success()
        {
            // arrange
            WorkItems request = new WorkItems(_configuration);

            // act
            var response = request.GetDefaultValues("Task", _configuration.Project);

            // assert
            if (response.HttpStatusCode == HttpStatusCode.NotFound)
            {
                Assert.Inconclusive("work item type not found");
            }
            else
            {
                Assert.AreEqual(HttpStatusCode.OK, response.HttpStatusCode);
            }

            request = null;
        }
예제 #21
0
        public void WorkItemTracking_WorkItems_MoveWorkItem_Success()
        {
            // arrange
            WorkItems request       = new WorkItems(_configuration);
            string    areaPath      = _configuration.MoveToProject; // user project name for root area path
            string    iterationPath = _configuration.MoveToProject; // use project name for root iteration path

            // act
            WorkItemPatchResponse.WorkItem response = request.MoveWorkItem(_configuration.WorkItemId, _configuration.MoveToProject, areaPath, iterationPath);

            // assert
            Assert.AreEqual(HttpStatusCode.OK, response.HttpStatusCode);
            Assert.AreEqual(response.fields.SystemAreaPath, areaPath);
            Assert.AreEqual(response.fields.SystemIterationPath, iterationPath);

            // move back
            WorkItemPatchResponse.WorkItem movebackResponse = request.MoveWorkItem(_configuration.WorkItemId, _configuration.Project, _configuration.Project, _configuration.Project);
            Assert.AreEqual(HttpStatusCode.OK, movebackResponse.HttpStatusCode);

            request = null;
        }
예제 #22
0
        private void button1_Click(object sender, EventArgs e)
        {
            var item = new WorkItems()
            {
                Title       = textBox1.Text,
                Description = textBox2.Text,
                //AssigneeId = (int)comboBox1.SelectedValue
            };
            var result = workItemservice.CreateWorkItem(item);

            if (result.Item1)
            {
                Refreshworkitems();
                ResetForm();
                //comboBox1.SelectedIndex = 0;
            }
            else
            {
                MessageBox.Show(result.Item2);
            }
        }
예제 #23
0
 public void ResetWorkItemTimesForMonthView()
 {
     WorkItems.Clear();
     TempDragItems.ForEach(wi =>
     {
         WorkScheduleItem temp = new WorkScheduleItem
         {
             Id                 = wi.Id,
             Color              = wi.Color,
             Department         = wi.Department,
             From               = wi.From,
             To                 = wi.From + (wi.OriginalEndDate - wi.OriginalStartDate),
             ItemName           = wi.ItemName,
             FromTime           = wi.FromTime,
             ToTime             = wi.ToTime,
             Description        = wi.Description,
             IsAllDay           = wi.IsAllDay,
             EstimatedBoardFeet = wi.EstimatedBoardFeet
         };
         WorkItems.Add(temp);
     });
 }
예제 #24
0
        private async void Refresh(object sender, RoutedEventArgs e)
        {
            foreach (var item in WorkItems)
            {
                item.PropertyChanged -= new PropertyChangedEventHandler(OnWorkItemCostingPropertyChanged);
            }
            WorkItems.Clear();
            CompletedWorkItems.Clear();

            var result = _lastResult = await Logic.GetWorkItemsByQuery();

            if (result != null)
            {
                // Combine both source lists into a single WorkItems list

                foreach (var item in result.WorkItems)
                {
                    WorkItems.Add(item);

                    item.PropertyChanged += new PropertyChangedEventHandler(OnWorkItemCostingPropertyChanged);
                }
                foreach (var item in result.CompletedWorkItems)
                {
                    WorkItems.Add(item);

                    item.PropertyChanged += new PropertyChangedEventHandler(OnWorkItemCostingPropertyChanged);
                }

                AuditIssues.Clear();
                foreach (var issue in result.AuditIssues)
                {
                    AuditIssues.Add(issue);
                }
            }

            UpdateCosts();
            Regroup();
            UpdateDirty();
        }
예제 #25
0
        private void ObterWorkItems()
        {
            // Recupera os últimos work items de um projeto específico no azure devops e grava no banco de dados.
            var ultimoId = _repository.ObterUltimoIdWorkItem();

            var workItems = _azureDevOpsService.ObterWorkItems(ultimoId);

            foreach(var item in workItems)
            {
                var workItem = new WorkItems
                {
                    Id = item.Id,
                    Tipo = item.Tipo,
                    Titulo = item.Titulo,
                    Data = item.Data
                };

                _repository.IncluirWorkItem(workItem);
            }

            var works = _repository.ListarWorkitems();
        }
예제 #26
0
        private void button1_Click(object sender, EventArgs e)
        {
            var item = new WorkItems()
            {
                Title       = textBox1.Text,
                Description = textBox2.Text,
            };

            var result = workItemService.CreateWorkItem(item);

            if (result.Item1)
            {
                //success message
                RefreshWorkITems();
                ResetForm();
                //comboBox1.SelectedIndex = 0;
            }
            else
            {
                MessageBox.Show(result.Item2);
            }
        }
예제 #27
0
        public void CL_WorkItemTracking_WorkItems_UpdateWorkItemAddAttachment_Success()
        {
            string filePath = @"D:\Temp\Test.txt";

            if (!File.Exists(filePath))
            {
                Assert.Inconclusive("File path '" + filePath + "' not found");
            }

            // arrange
            WorkItems workItems = new WorkItems(_configuration);

            // act
            var createOneResult = workItems.CreateWorkItem(_configuration.Project);
            var id = createOneResult.Id ?? default(int);

            var updateResult = workItems.UpdateWorkItemAddAttachment(id, @"D:\Temp\Test.txt");

            //assert
            Assert.IsNotNull(createOneResult);
            Assert.IsNotNull(updateResult);
        }
예제 #28
0
 public int UpdateWorkItem(IList <IWorkflowItem> entities)
 {
     return(LockExecute <int>(() =>
     {
         int effectCount = 0;
         foreach (var entity in entities)
         {
             if (entity.ItemId >= 10000)
             {
                 WorkItemsRead.Remove(entity);
                 WorkItemsRead.Add(entity);
                 effectCount += Dao.Get().Update <WorkflowItemRead>(entity);
             }
             else
             {
                 WorkItems.Remove(entity);
                 WorkItems.Add(entity);
                 effectCount += Dao.Get().Update <WorkflowItem>(entity);
             }
         }
         return effectCount;
     }));
 }
예제 #29
0
        public List <string> GetLevelCode(string levelCodePrefix, int count)
        {
            return(LockExecute <List <string> >(() =>
            {
                List <string> returnValue = new List <string>();
                var allItem = WorkItems.OrderByDescending(o => o.ItemId); //这里获取的结果是对TASKID从大到小排
                int result = 0;
                foreach (var item in allItem)
                {
                    if (item.LevelCode.StartsWith(levelCodePrefix))
                    {
                        result = int.Parse(item.LevelCode.Substring(levelCodePrefix.Length));
                        break;
                    }
                }

                for (int i = 1; i <= count; i++)
                {
                    returnValue.Add(levelCodePrefix + (result + i).ToString().PadLeft(2, '0'));
                }
                return returnValue;
            }));
        }
예제 #30
0
        public void WorkItemTracking_WorkItems_UpdateWorkItemRemoveAttachment_Success()
        {
            // arrange
            WorkItems   request            = new WorkItems(_configuration);
            Attachments attachmentsRequest = new Attachments(_configuration);

            // act
            //upload attachment
            var attachmentReference = attachmentsRequest.UploadAttachmentBinaryFile(_configuration.FilePath);

            //create work item then add attachment to that work item
            WorkItemPatchResponse.WorkItem createResponse           = request.CreateWorkItem(_configuration.Project);
            WorkItemPatchResponse.WorkItem addAttachmentResponse    = request.UpdateWorkItemAddAttachment(createResponse.id.ToString(), attachmentReference.url);
            WorkItemPatchResponse.WorkItem removeAttachmentResponse = request.UpdateWorkItemRemoveAttachment(createResponse.id.ToString());

            // assert
            Assert.AreEqual(HttpStatusCode.OK, createResponse.HttpStatusCode);
            Assert.AreEqual(HttpStatusCode.OK, addAttachmentResponse.HttpStatusCode);
            Assert.AreEqual(HttpStatusCode.OK, removeAttachmentResponse.HttpStatusCode);

            request            = null;
            attachmentsRequest = null;
        }