public static async Task Main() { var options = new AzureDevOpsClientOptions(); var workItemIds = new HashSet <int>(); #if DEBUG if (TryReadSettings(out var settings)) { options.Organization = settings.GetValueOrDefault("Organization", () => string.Empty); options.PersonalAccessToken = settings.GetValueOrDefault("PersonalAccessToken", () => string.Empty); options.Project = settings.GetValueOrDefault("Project", () => string.Empty); workItemIds = settings.GetValueOrDefault("WorkItemIds", () => string.Empty) .Split(new[] { ' ', ',', ';' }, StringSplitOptions.RemoveEmptyEntries) .Select(int.Parse) .ToHashSet(); } #endif var includeWorkItemTypes = new HashSet <WorkItemType> { WorkItemType.Epic, WorkItemType.Feature, WorkItemType.PBI }; var client = new AzureDevOpsClient(options); var crawler = new DirectLinksCrawler(client); var data = await crawler.GetData(workItemIds, includeWorkItemTypes, includeFinishedWorkItems : false); var graph = new GraphGenerator().GenerateGraph(data, workItemIds, "LR"); // http://magjac.com/graphviz-visual-editor/ can be used to test the graph System.Console.WriteLine(graph); }
public async Task ShouldCrawl() { var crawler = new DirectLinksCrawler(TestClient.Create()); var collection = await crawler.GetData(new HashSet <int> { 2 }, new HashSet <WorkItemType> { WorkItemType.Feature }, false); collection.Links.ShouldContain(x => x.FromWorkItemId == 1 && x.ToWorkItemId == 2); collection.Links.ShouldContain(x => x.FromWorkItemId == 2 && x.ToWorkItemId == 3); collection.Links.ShouldContain(x => x.FromWorkItemId == 3 && x.ToWorkItemId == 4); collection.Links.Count.ShouldBe(3); collection.WorkItems.Select(x => x.Id).OrderBy(x => x).ShouldBe(new[] { 1, 2, 3, 4 }); }