예제 #1
0
        public async Task AggregatesWorkitemsFromHierarchicalQuery()
        {
            var workitemLinks = new[]
            {
                new WorkItemLink(new WorkItemReference(1), new WorkItemReference(2), "forward"),
                new WorkItemLink(new WorkItemReference(1), new WorkItemReference(3), "forward"),
                new WorkItemLink(new WorkItemReference(2), new WorkItemReference(4), "forward"),
                new WorkItemLink(new WorkItemReference(5), new WorkItemReference(6), "forward"),
            };
            var queryResult = new HierarchicalWorkItemsQueryResult {
                QueryType = "tree", WorkItemRelations = workitemLinks
            };

            HttpClientMock.Setup(c => c.ExecuteGet <JObject>(It.IsAny <string>(), CancellationToken))
            .ReturnsAsync(JObject.FromObject(queryResult));

            var workitems = workitemLinks.SelectMany(l => new[] { l.Source, l.Target })
                            .Distinct()
                            .Select(r => new WorkItem {
                Id = r.Id
            });

            SetupGetCollectionOf <WorkItem>(url => url.Contains("$expand=All"))
            .ReturnsAsync(new CollectionResponse <WorkItem> {
                Value = workitems
            });

            var result = await Client.GetWorkItemsAsync(Guid.NewGuid(), true, CancellationToken);

            result.Should().NotBeEmpty();
            result.Should().BeEquivalentTo(workitems);

            HttpClientMock.VerifyAll();
        }
예제 #2
0
 private int[] GetWorkitemIdsFromQuery(HierarchicalWorkItemsQueryResult query)
 {
     var targetIds = query.WorkItemRelations.Select(w => w.Target.Id);
     var sourceIds = query.WorkItemRelations.Select(w => w.Source.Id);
     return sourceIds.Union(targetIds)
         .Distinct()
         .ToArray();
 }
예제 #3
0
        private async Task RunHierarchicalQuery(Func <Task <WorkItemsQueryResult> > queryExecutor, bool expand)
        {
            var workitems = new[] { new WorkItem {
                                        Id = 1
                                    }, new WorkItem()
                                    {
                                        Id = 2
                                    }, new WorkItem {
                                        Id = 3
                                    } };
            var workitemLinks = new[]
            {
                new WorkItemLink(new WorkItemReference(1), new WorkItemReference(2), "Parent"),
                new WorkItemLink(new WorkItemReference(2), new WorkItemReference(3), "Parent"),
                new WorkItemLink(new WorkItemReference(1), new WorkItemReference(3), "Related")
            };
            var expectedQueryResult = new HierarchicalWorkItemsQueryResult
            {
                QueryType         = QueryType.Tree,
                WorkItemRelations = workitemLinks,
                Columns           = new[] { new ColumnReference("Id", "System.Id"), new ColumnReference("Title", "System.Title") },
                SortColumns       = new[] { new SortColumn {
                                                Field = new ColumnReference("Title", "System.Title")
                                            } }
            };

            HttpClientMock.Setup(c => c.ExecutePost <JObject>(It.IsAny <string>(), It.IsAny <WorkItemsQuery>(), CancellationToken))
            .ReturnsAsync(JObject.FromObject(expectedQueryResult));
            HttpClientMock.Setup(c => c.ExecuteGet <JObject>(It.IsAny <string>(), CancellationToken))
            .ReturnsAsync(JObject.FromObject(expectedQueryResult));
            SetupGetCollectionOf <WorkItem>(url => GetWorkitemsUrlPredicate(url, expand))
            .ReturnsAsync(new CollectionResponse <WorkItem> {
                Value = workitems
            });

            var result = await queryExecutor();

            result.Should().BeOfType <HierarchicalWorkItemsQueryResultWithWorkItems>();
            var hierarchicalQueryResult = result.As <HierarchicalWorkItemsQueryResultWithWorkItems>();

            hierarchicalQueryResult.WorkItems.Should().BeEquivalentTo(workitems);
            hierarchicalQueryResult.WorkItemRelations.Should().BeEquivalentTo(workitemLinks);
            hierarchicalQueryResult.QueryType.Should().Be(expectedQueryResult.QueryType);
            hierarchicalQueryResult.Columns.Should().BeEquivalentTo(expectedQueryResult.Columns);
            hierarchicalQueryResult.SortColumns.Should().BeEquivalentTo(expectedQueryResult.SortColumns);
        }
예제 #4
0
        public async Task GetWorkItemsShouldComposeCorrectUrlForTreeQueries()
        {
            var query       = WorkItemsQuery.Get("Dummy query", isHierarchical: true);
            var queryResult = new HierarchicalWorkItemsQueryResult
            {
                Columns           = new[] { new ColumnReference("Id", "System.Id"), new ColumnReference("Title", "System.Title") },
                WorkItemRelations = new[]
                {
                    new WorkItemLink(new WorkItemReference(2), new WorkItemReference(34), "foo"),
                    new WorkItemLink(new WorkItemReference(2), new WorkItemReference(2), "foo"),
                    new WorkItemLink(new WorkItemReference(2), new WorkItemReference(56), "foo")
                }
            };
            var fields = queryResult.Columns.Select(c => c.ReferenceName);
            var ids    = queryResult.WorkItemRelations.Select(w => w.Source.Id)
                         .Union(queryResult.WorkItemRelations.Select(w => w.Target.Id))
                         .Distinct()
                         .ToArray();
            var workItems = ids.Select(i => new WorkItem {
                Id = i
            });

            HttpClientMock.Setup(c => c.ExecutePost <HierarchicalWorkItemsQueryResult>(It.IsAny <string>(), It.Is <WorkItemsQuery>(q => q.IsHierarchical), CancellationToken))
            .ReturnsAsync(queryResult)
            .Verifiable();

            HttpClientMock.Setup(c => c.ExecuteGet <CollectionResponse <WorkItem> >(It.Is <string>(u => VerifyWorkItemsUrl(u, fields, ids)), CancellationToken))
            .ReturnsAsync(new CollectionResponse <WorkItem> {
                Value = workItems
            })
            .Verifiable();

            var result = await Client.GetWorkItemsAsync(query, false, CancellationToken);

            result.Should().HaveCount(workItems.Count());
            result.Should().BeEquivalentTo(workItems);

            HttpClientMock.Verify();
        }