public async Task RequestsColumnsFromQueryIfNoExpand() { var workitemReferences = new[] { new WorkItemReference(1), new WorkItemReference(2), new WorkItemReference(3) }; var columns = new[] { new ColumnReference("C1", "System.C1"), new ColumnReference("C2", "System.C2") }; var queryResult = new FlatWorkItemsQueryResult { QueryType = "flat", WorkItems = workitemReferences, Columns = columns }; HttpClientMock.Setup(c => c.ExecuteGet <JObject>(It.IsAny <string>(), CancellationToken)) .ReturnsAsync(JObject.FromObject(queryResult)); var workitems = workitemReferences.Select(r => new WorkItem { Id = r.Id }); SetupGetCollectionOf <WorkItem>(url => url.Contains(string.Join(',', columns.Select(c => c.ReferenceName))) && !url.Contains("$expand=All")) .ReturnsAsync(new CollectionResponse <WorkItem> { Value = workitems }); var result = await Client.GetWorkItemsAsync(Guid.NewGuid(), expand : false, cancellationToken : CancellationToken); result.Should().NotBeEmpty(); result.Should().BeEquivalentTo(workitems); HttpClientMock.VerifyAll(); }
public async Task AggregatesWorkitemsFromFlatQuery() { var workitemReferences = new[] { new WorkItemReference(1), new WorkItemReference(2), new WorkItemReference(3) }; var queryResult = new FlatWorkItemsQueryResult { QueryType = "flat", WorkItems = workitemReferences }; HttpClientMock.Setup(c => c.ExecuteGet <JObject>(It.IsAny <string>(), CancellationToken)) .ReturnsAsync(JObject.FromObject(queryResult)); var workitems = workitemReferences.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(); }
public async Task GetWorkItemsShouldComposeCorrectUrlForFlatQueries() { var query = WorkItemsQuery.Get("Dummy query"); var queryResult = new FlatWorkItemsQueryResult { Columns = new[] { new ColumnReference("Id", "System.Id"), new ColumnReference("Title", "System.Title") }, WorkItems = new[] { new WorkItemReference(2), new WorkItemReference(34), new WorkItemReference(56) } }; var fields = queryResult.Columns.Select(c => c.ReferenceName); var ids = queryResult.WorkItems.Select(w => w.Id); var workItems = ids.Select(i => new WorkItem { Id = i }); HttpClientMock.Setup(c => c.ExecutePost <FlatWorkItemsQueryResult>(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(); }
public void ThrowsIfUnknownQueryType() { var queryResult = new FlatWorkItemsQueryResult { QueryType = "3D" }; HttpClientMock.Setup(c => c.ExecuteGet <JObject>(It.IsAny <string>(), CancellationToken)) .ReturnsAsync(JObject.FromObject(queryResult)); Client.Awaiting(c => c.GetWorkItemsAsync(Guid.NewGuid(), false, CancellationToken)) .Should().Throw <UnknownWorkItemQueryTypeException>(); }
public async Task GetWorkItemsShouldReturnEmptyIfNoItemsFound() { var query = WorkItemsQuery.Get("Dummy query"); var queryResult = new FlatWorkItemsQueryResult { Columns = new ColumnReference[0], WorkItems = new WorkItemReference[0] }; HttpClientMock.Setup(c => c.ExecutePost <FlatWorkItemsQueryResult>(It.IsAny <string>(), It.Is <WorkItemsQuery>(q => !q.IsHierarchical), CancellationToken)) .ReturnsAsync(queryResult) .Verifiable(); var result = await Client.GetWorkItemsAsync(query, false, CancellationToken); result.Should().BeEmpty(); HttpClientMock.Verify(); HttpClientMock.Verify(c => c.ExecuteGet <CollectionResponse <WorkItem> >(It.IsAny <string>(), CancellationToken), Times.Never()); }
private async Task RunFlatQuery(Func <Task <WorkItemsQueryResult> > queryExecutor, bool expand) { var workitems = new[] { new WorkItem { Id = 1 }, new WorkItem() { Id = 2 }, new WorkItem { Id = 3 } }; var workitemReferences = workitems.Select(w => new WorkItemReference(w.Id)).ToArray(); var expectedQueryResult = new FlatWorkItemsQueryResult { QueryType = QueryType.Flat, WorkItems = workitemReferences, 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.ExecuteGet <JObject>(It.IsAny <string>(), CancellationToken)) .ReturnsAsync(JObject.FromObject(expectedQueryResult)); HttpClientMock.Setup(c => c.ExecutePost <JObject>(It.IsAny <string>(), It.IsAny <WorkItemsQuery>(), CancellationToken)) .ReturnsAsync(JObject.FromObject(expectedQueryResult)); SetupGetCollectionOf <WorkItem>(url => GetWorkitemsUrlPredicate(url, expand)) .ReturnsAsync(new CollectionResponse <WorkItem> { Value = workitems }); var result = await queryExecutor(); result.Should().BeOfType <FlatWorkItemsQueryResultWithWorkItems>(); var flatQueryResult = result.As <FlatWorkItemsQueryResultWithWorkItems>(); flatQueryResult.WorkItems.Should().BeEquivalentTo(workitems); flatQueryResult.QueryType.Should().Be(expectedQueryResult.QueryType); flatQueryResult.Columns.Should().BeEquivalentTo(expectedQueryResult.Columns); flatQueryResult.SortColumns.Should().BeEquivalentTo(expectedQueryResult.SortColumns); }
private int[] GetWorkitemIdsFromQuery(FlatWorkItemsQueryResult query) { return(query.WorkItems.Select(w => w.Id).ToArray()); }