@@ -51,38 +51,30 @@ public WitBatchRequest BuildUpdateTestCaseBatchRequest(int id, JsonPatchDocument
51
51
52
52
public IEnumerable < int > GetAllTestCasesIds ( )
53
53
{
54
- var workItemTrackingHttpClient = GetWorkItemTrackingHttpClient ( ) ;
55
-
56
- // wiql - Work Item Query Language
57
- var wiql = new Wiql
58
- {
59
- Query = $@ "Select [{ WorkItemFields . Id } ]
54
+ var query = $@ "Select [{ WorkItemFields . Id } ]
60
55
From WorkItems
61
- Where [System.WorkItemType] = '{ WorkItemTypes . TestCase } '"
62
- } ;
56
+ Where [System.WorkItemType] = '{ WorkItemTypes . TestCase } '
57
+ AND [System.TeamProject] = ' { _azureDevopsSettings . Project } '" ;
63
58
64
- var workItemIds = workItemTrackingHttpClient . QueryByWiqlAsync ( wiql , _azureDevopsSettings . Project ) . Result ;
59
+ var workItems = GetListOfWorkItemsWithQuery ( query ) ;
65
60
66
- return workItemIds . WorkItems . Select ( reference => reference . Id ) ;
61
+ return workItems . Select ( reference => reference . Id ) ;
67
62
}
68
-
63
+
69
64
public IEnumerable < int > GetSyncedTestCasesIds ( )
70
65
{
71
- var workItemTrackingHttpClient = GetWorkItemTrackingHttpClient ( ) ;
72
66
73
- // wiql - Work Item Query Language
74
- var wiql = new Wiql
75
- {
76
- Query = $@ "Select [{ WorkItemFields . Id } ]
67
+ var query = $@ "Select [{ WorkItemFields . Id } ]
77
68
From WorkItems
78
69
Where [System.WorkItemType] = '{ WorkItemTypes . TestCase } '
79
70
AND [{ WorkItemFields . State } ] <> '{ TestCaseState . Closed } '
80
- AND [{ WorkItemFields . Tags } ] Contains '{ Tags . GherkinSyncToolIdTagPrefix + _azureDevopsSettings . GherkinSyncToolId } '"
81
- } ;
71
+ AND [System.TeamProject] = '{ _azureDevopsSettings . Project } '
72
+ AND [{ WorkItemFields . Tags } ]
73
+ Contains '{ Tags . GherkinSyncToolIdTagPrefix + _azureDevopsSettings . GherkinSyncToolId } '" ;
82
74
83
- var workItemIds = workItemTrackingHttpClient . QueryByWiqlAsync ( wiql , _azureDevopsSettings . Project ) . Result ;
75
+ var workItems = GetListOfWorkItemsWithQuery ( query ) ;
84
76
85
- return workItemIds . WorkItems . Select ( reference => reference . Id ) ;
77
+ return workItems . Select ( reference => reference . Id ) ;
86
78
}
87
79
88
80
public List < WorkItem > ExecuteWorkItemBatch ( List < WitBatchRequest > request )
@@ -156,8 +148,10 @@ private List<WorkItem> SendWorkItemBatch(List<WitBatchRequest> request)
156
148
157
149
if ( witBatchResponse . Code != 200 )
158
150
{
159
- Log . Error ( $ "Something went wrong with the test case synchronization. Title: { request [ i ] . GetFields ( ) [ WorkItemFields . Title ] } ") ;
160
- 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 } ") ;
161
155
162
156
_context . IsRunSuccessful = false ;
163
157
continue ;
@@ -205,5 +199,47 @@ private WorkItemTrackingHttpClient GetWorkItemTrackingHttpClient()
205
199
206
200
return workItemTrackingHttpClient ;
207
201
}
202
+
203
+ private IList < WorkItemReference > GetListOfWorkItemsWithQuery ( string query )
204
+ {
205
+ var results = new List < WorkItemReference > ( ) ;
206
+ var workItemTrackingHttpClient = GetWorkItemTrackingHttpClient ( ) ;
207
+ var moreResults = true ;
208
+ var lastIdInList = 0 ;
209
+
210
+ while ( moreResults )
211
+ {
212
+ var wiql = new Wiql ( )
213
+ {
214
+ Query = $@ "{ query }
215
+ And [{ WorkItemFields . Id } ] > { lastIdInList }
216
+ ORDER BY [{ WorkItemFields . Id } ] ASC"
217
+ } ;
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 )
222
+ . Result . WorkItems . ToList ( ) ;
223
+
224
+ var currentResultsLength = currentResults . Count ;
225
+
226
+ if ( currentResultsLength < 19999 )
227
+ {
228
+ moreResults = false ;
229
+ }
230
+
231
+ var lastItemInList = currentResults . LastOrDefault ( ) ;
232
+
233
+ if ( lastItemInList == null )
234
+ {
235
+ break ;
236
+ }
237
+
238
+ lastIdInList = lastItemInList . Id ;
239
+ results . AddRange ( currentResults ) ;
240
+ }
241
+
242
+ return results ;
243
+ }
208
244
}
209
- }
245
+ }
0 commit comments