Skip to content

Commit 19958af

Browse files
committed
feat: change the logic by using "top" modifier
1 parent 4a08e39 commit 19958af

File tree

1 file changed

+32
-41
lines changed

1 file changed

+32
-41
lines changed

GherkinSyncTool.Synchronizers.AzureDevOps/Client/AzureDevopsClient.cs

Lines changed: 32 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -53,23 +53,25 @@ public IEnumerable<int> GetAllTestCasesIds()
5353
{
5454
var query = $@"Select [{WorkItemFields.Id}]
5555
From WorkItems
56-
Where [System.WorkItemType] = '{WorkItemTypes.TestCase}'";
57-
56+
Where [System.WorkItemType] = '{WorkItemTypes.TestCase}'
57+
AND [System.TeamProject] = '{_azureDevopsSettings.Project}'";
58+
5859
var workItems = GetListOfWorkItemsWithQuery(query);
5960

6061
return workItems.Select(reference => reference.Id);
6162
}
62-
63+
6364
public IEnumerable<int> GetSyncedTestCasesIds()
6465
{
6566

6667
var query = $@"Select [{WorkItemFields.Id}]
6768
From WorkItems
6869
Where [System.WorkItemType] = '{WorkItemTypes.TestCase}'
6970
AND [{WorkItemFields.State}] <> '{TestCaseState.Closed}'
70-
AND [{WorkItemFields.Tags}]
71+
AND [System.TeamProject] = '{_azureDevopsSettings.Project}'
72+
AND [{WorkItemFields.Tags}]
7173
Contains '{Tags.GherkinSyncToolIdTagPrefix + _azureDevopsSettings.GherkinSyncToolId}'";
72-
74+
7375
var workItems = GetListOfWorkItemsWithQuery(query);
7476

7577
return workItems.Select(reference => reference.Id);
@@ -146,8 +148,10 @@ private List<WorkItem> SendWorkItemBatch(List<WitBatchRequest> request)
146148

147149
if (witBatchResponse.Code != 200)
148150
{
149-
Log.Error($"Something went wrong with the test case synchronization. Title: {request[i].GetFields()[WorkItemFields.Title]}");
150-
Log.Error($"Status code: {witBatchResponse.Code}{Environment.NewLine}Body: {witBatchResponse.Body}");
151+
Log.Error(
152+
$"Something went wrong with the test case synchronization. Title: {request[i].GetFields()[WorkItemFields.Title]}");
153+
Log.Error(
154+
$"Status code: {witBatchResponse.Code}{Environment.NewLine}Body: {witBatchResponse.Body}");
151155

152156
_context.IsRunSuccessful = false;
153157
continue;
@@ -200,52 +204,39 @@ private IList<WorkItemReference> GetListOfWorkItemsWithQuery(string query)
200204
{
201205
var results = new List<WorkItemReference>();
202206
var workItemTrackingHttpClient = GetWorkItemTrackingHttpClient();
203-
var counter = 10000;
204207
var moreResults = true;
205-
208+
var lastIdInList = 0;
209+
206210
while (moreResults)
207211
{
208-
// wiql - Work Item Query Language
209-
var wiql = new Wiql
212+
var wiql = new Wiql()
210213
{
211214
Query = $@"{query}
212-
AND [{WorkItemFields.Id}] >= {counter - 10000}
213-
AND [{WorkItemFields.Id}] < {counter}"
215+
And [{WorkItemFields.Id}] > {lastIdInList}
216+
ORDER BY [{WorkItemFields.Id}] ASC"
214217
};
215-
216-
var currentResults = workItemTrackingHttpClient.QueryByWiqlAsync(wiql, _azureDevopsSettings.Project)
218+
219+
//Max number of workItems is 19999, until it gets fixed from the microsoft side
220+
var currentResults = workItemTrackingHttpClient
221+
.QueryByWiqlAsync(wiql, _azureDevopsSettings.Project, top: 19999)
217222
.Result.WorkItems.ToList();
218-
219-
if (!currentResults.Any())
223+
224+
var currentResultsLength = currentResults.Count;
225+
226+
if (currentResultsLength < 19999)
220227
{
221-
try
222-
{
223-
results.AddRange(workItemTrackingHttpClient.QueryByWiqlAsync(new Wiql
224-
{
225-
Query = $@"{query} AND [{WorkItemFields.Id}] >= {counter}"
226-
}).Result.WorkItems.ToList());
227-
228-
moreResults = false;
229-
}
230-
catch(Exception e)
231-
{
232-
if (e.ToString().Contains("VS402337"))
233-
{
234-
// If this exception persists, it means that there are more, than 20000 workItems left,
235-
// so increment and continue
236-
}
237-
else
238-
{
239-
throw;
240-
}
241-
}
228+
moreResults = false;
242229
}
243-
else
230+
231+
var lastItemInList = currentResults.LastOrDefault();
232+
233+
if (lastItemInList == null)
244234
{
245-
results.AddRange(currentResults);
235+
break;
246236
}
247237

248-
counter += 10000;
238+
lastIdInList = lastItemInList.Id;
239+
results.AddRange(currentResults);
249240
}
250241

251242
return results;

0 commit comments

Comments
 (0)