ado-sync 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/azure/test-cases.d.ts +16 -3
- package/dist/azure/test-cases.js +258 -19
- package/dist/azure/test-cases.js.map +1 -1
- package/dist/cli.js +23 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.js +50 -2
- package/dist/config.js.map +1 -1
- package/dist/parsers/gherkin.d.ts +9 -14
- package/dist/parsers/gherkin.js +94 -34
- package/dist/parsers/gherkin.js.map +1 -1
- package/dist/parsers/markdown.d.ts +7 -6
- package/dist/parsers/markdown.js +30 -9
- package/dist/parsers/markdown.js.map +1 -1
- package/dist/parsers/shared.d.ts +20 -0
- package/dist/parsers/shared.js +81 -0
- package/dist/parsers/shared.js.map +1 -0
- package/dist/sync/cache.d.ts +24 -0
- package/dist/sync/cache.js +83 -0
- package/dist/sync/cache.js.map +1 -0
- package/dist/sync/engine.d.ts +0 -2
- package/dist/sync/engine.js +200 -30
- package/dist/sync/engine.js.map +1 -1
- package/dist/types.d.ts +57 -2
- package/package.json +1 -1
|
@@ -12,11 +12,24 @@
|
|
|
12
12
|
* <description/>
|
|
13
13
|
* </step>
|
|
14
14
|
* </steps>
|
|
15
|
+
*
|
|
16
|
+
* For Scenario Outlines, parameter data is stored in:
|
|
17
|
+
* Microsoft.VSTS.TCM.LocalDataSource (NewDataSet XML)
|
|
15
18
|
*/
|
|
16
19
|
import { AzureTestCase, ParsedTest, SyncConfig } from '../types';
|
|
17
20
|
import { AzureClient } from './client';
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Get or create a nested suite matching the folder path of the given file.
|
|
23
|
+
* Uses suiteCache (Map<relPath, suiteId>) to avoid redundant API calls.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getOrCreateSuiteForFile(client: AzureClient, config: SyncConfig, filePath: string, configDir: string, suiteCache: Map<string, number>): Promise<number>;
|
|
26
|
+
export declare function getTestCase(client: AzureClient, id: number, titleField?: string): Promise<AzureTestCase | null>;
|
|
27
|
+
export declare function createTestCase(client: AzureClient, test: ParsedTest, config: SyncConfig, suiteIdOverride?: number): Promise<number>;
|
|
20
28
|
export declare function updateTestCase(client: AzureClient, id: number, test: ParsedTest, config: SyncConfig): Promise<void>;
|
|
21
|
-
export declare function updateLocalFromAzure(client: AzureClient, id: number): Promise<AzureTestCase | null>;
|
|
29
|
+
export declare function updateLocalFromAzure(client: AzureClient, id: number, titleField?: string): Promise<AzureTestCase | null>;
|
|
30
|
+
/**
|
|
31
|
+
* Tag an orphaned Azure TC with 'ado-sync:removed' so teams can review and
|
|
32
|
+
* manually delete it. Does nothing if the tag is already present.
|
|
33
|
+
*/
|
|
34
|
+
export declare function tagTestCaseAsRemoved(client: AzureClient, id: number, removedTag?: string): Promise<void>;
|
|
22
35
|
export declare function getTestCasesInSuite(client: AzureClient, config: SyncConfig, suiteId?: number): Promise<AzureTestCase[]>;
|
package/dist/azure/test-cases.js
CHANGED
|
@@ -13,14 +13,53 @@
|
|
|
13
13
|
* <description/>
|
|
14
14
|
* </step>
|
|
15
15
|
* </steps>
|
|
16
|
+
*
|
|
17
|
+
* For Scenario Outlines, parameter data is stored in:
|
|
18
|
+
* Microsoft.VSTS.TCM.LocalDataSource (NewDataSet XML)
|
|
16
19
|
*/
|
|
20
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
23
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
24
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
25
|
+
}
|
|
26
|
+
Object.defineProperty(o, k2, desc);
|
|
27
|
+
}) : (function(o, m, k, k2) {
|
|
28
|
+
if (k2 === undefined) k2 = k;
|
|
29
|
+
o[k2] = m[k];
|
|
30
|
+
}));
|
|
31
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
32
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
33
|
+
}) : function(o, v) {
|
|
34
|
+
o["default"] = v;
|
|
35
|
+
});
|
|
36
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
37
|
+
var ownKeys = function(o) {
|
|
38
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
39
|
+
var ar = [];
|
|
40
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
41
|
+
return ar;
|
|
42
|
+
};
|
|
43
|
+
return ownKeys(o);
|
|
44
|
+
};
|
|
45
|
+
return function (mod) {
|
|
46
|
+
if (mod && mod.__esModule) return mod;
|
|
47
|
+
var result = {};
|
|
48
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
49
|
+
__setModuleDefault(result, mod);
|
|
50
|
+
return result;
|
|
51
|
+
};
|
|
52
|
+
})();
|
|
17
53
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
+
exports.getOrCreateSuiteForFile = getOrCreateSuiteForFile;
|
|
18
55
|
exports.getTestCase = getTestCase;
|
|
19
56
|
exports.createTestCase = createTestCase;
|
|
20
57
|
exports.updateTestCase = updateTestCase;
|
|
21
58
|
exports.updateLocalFromAzure = updateLocalFromAzure;
|
|
59
|
+
exports.tagTestCaseAsRemoved = tagTestCaseAsRemoved;
|
|
22
60
|
exports.getTestCasesInSuite = getTestCasesInSuite;
|
|
23
61
|
const fast_xml_parser_1 = require("fast-xml-parser");
|
|
62
|
+
const path = __importStar(require("path"));
|
|
24
63
|
// ─── XML helpers ─────────────────────────────────────────────────────────────
|
|
25
64
|
function escapeHtml(str) {
|
|
26
65
|
return str
|
|
@@ -86,6 +125,27 @@ function parseStepsXml(xml) {
|
|
|
86
125
|
};
|
|
87
126
|
});
|
|
88
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Build the NewDataSet XML for Microsoft.VSTS.TCM.LocalDataSource.
|
|
130
|
+
* Used for Scenario Outline / parametrized test cases.
|
|
131
|
+
*/
|
|
132
|
+
function buildParameterDataXml(headers, rows) {
|
|
133
|
+
if (!headers.length || !rows.length)
|
|
134
|
+
return '';
|
|
135
|
+
const rowsXml = rows
|
|
136
|
+
.map((row) => {
|
|
137
|
+
const cells = headers
|
|
138
|
+
.map((h, i) => `<${escapeXmlName(h)}>${escapeHtml(row[i] ?? '')}</${escapeXmlName(h)}>`)
|
|
139
|
+
.join('');
|
|
140
|
+
return `<Table1>${cells}</Table1>`;
|
|
141
|
+
})
|
|
142
|
+
.join('');
|
|
143
|
+
return `<NewDataSet>${rowsXml}</NewDataSet>`;
|
|
144
|
+
}
|
|
145
|
+
/** Make a column name safe for XML element names (spaces → underscores). */
|
|
146
|
+
function escapeXmlName(name) {
|
|
147
|
+
return name.replace(/\s+/g, '_').replace(/[^a-zA-Z0-9_\-.]/g, '');
|
|
148
|
+
}
|
|
89
149
|
// ─── Tag helpers ─────────────────────────────────────────────────────────────
|
|
90
150
|
function tagsFromString(raw) {
|
|
91
151
|
if (!raw)
|
|
@@ -95,11 +155,157 @@ function tagsFromString(raw) {
|
|
|
95
155
|
.map((t) => t.trim())
|
|
96
156
|
.filter(Boolean);
|
|
97
157
|
}
|
|
158
|
+
// ─── Work item relation helpers ───────────────────────────────────────────────
|
|
159
|
+
function workItemUrl(orgUrl, id) {
|
|
160
|
+
return `${orgUrl.replace(/\/$/, '')}/_apis/wit/workItems/${id}`;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Fetch existing work item relations from a TC.
|
|
164
|
+
* Returns relations that match any of the configured link relationship types.
|
|
165
|
+
*/
|
|
166
|
+
async function fetchManagedRelations(client, tcId, linkConfigs) {
|
|
167
|
+
const wit = await client.getWitApi();
|
|
168
|
+
let wi;
|
|
169
|
+
try {
|
|
170
|
+
wi = await wit.getWorkItem(tcId, undefined, undefined, 4 /* WorkItemExpand.Relations */);
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
if (!wi?.relations)
|
|
176
|
+
return [];
|
|
177
|
+
const configuredRels = new Set(linkConfigs.map((c) => c.relationship ?? 'System.LinkTypes.Related'));
|
|
178
|
+
const managed = [];
|
|
179
|
+
for (const rel of wi.relations) {
|
|
180
|
+
if (!configuredRels.has(rel.rel))
|
|
181
|
+
continue;
|
|
182
|
+
const urlParts = rel.url.split('/');
|
|
183
|
+
const wiId = parseInt(urlParts[urlParts.length - 1], 10);
|
|
184
|
+
if (!isNaN(wiId))
|
|
185
|
+
managed.push({ rel: rel.rel, url: rel.url, wiId });
|
|
186
|
+
}
|
|
187
|
+
return managed;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Build add patches for new link relations.
|
|
191
|
+
* On update, stale relations (present in Azure but absent from local tags) are
|
|
192
|
+
* removed via a separate updateWorkItem call before this patch is applied.
|
|
193
|
+
*/
|
|
194
|
+
async function applyLinkRelations(client, tcId, test, config, isCreate) {
|
|
195
|
+
const linkConfigs = config.sync?.links;
|
|
196
|
+
if (!linkConfigs?.length)
|
|
197
|
+
return [];
|
|
198
|
+
const desired = test.linkRefs ?? [];
|
|
199
|
+
const patches = [];
|
|
200
|
+
if (isCreate) {
|
|
201
|
+
for (const ref of desired) {
|
|
202
|
+
const cfg = linkConfigs.find((c) => c.prefix === ref.prefix);
|
|
203
|
+
patches.push({
|
|
204
|
+
op: 'add',
|
|
205
|
+
path: '/relations/-',
|
|
206
|
+
value: {
|
|
207
|
+
rel: cfg?.relationship ?? 'System.LinkTypes.Related',
|
|
208
|
+
url: workItemUrl(config.orgUrl, ref.id),
|
|
209
|
+
attributes: { comment: `ado-sync:${ref.prefix}` },
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
return patches;
|
|
214
|
+
}
|
|
215
|
+
// Update: remove stale, add new
|
|
216
|
+
const existing = await fetchManagedRelations(client, tcId, linkConfigs);
|
|
217
|
+
const desiredIds = new Set(desired.map((r) => r.id));
|
|
218
|
+
const existingIds = new Set(existing.map((r) => r.wiId));
|
|
219
|
+
// Remove stale relations: need separate API call with the relation index
|
|
220
|
+
const staleUrls = existing.filter((r) => !desiredIds.has(r.wiId)).map((r) => r.url);
|
|
221
|
+
if (staleUrls.length) {
|
|
222
|
+
const wit = await client.getWitApi();
|
|
223
|
+
// Fetch full WI to get relation indices
|
|
224
|
+
let fullWi;
|
|
225
|
+
try {
|
|
226
|
+
fullWi = await wit.getWorkItem(tcId, undefined, undefined, 4);
|
|
227
|
+
}
|
|
228
|
+
catch { /* skip removal on error */ }
|
|
229
|
+
if (fullWi?.relations) {
|
|
230
|
+
const staleUrlSet = new Set(staleUrls);
|
|
231
|
+
const removePatches = fullWi.relations
|
|
232
|
+
.map((r, idx) => ({ url: r.url, idx }))
|
|
233
|
+
.filter(({ url }) => staleUrlSet.has(url))
|
|
234
|
+
.sort((a, b) => b.idx - a.idx) // remove from highest index first
|
|
235
|
+
.map(({ idx }) => ({ op: 'remove', path: `/relations/${idx}` }));
|
|
236
|
+
if (removePatches.length) {
|
|
237
|
+
await wit.updateWorkItem({}, removePatches, tcId);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Add new relations
|
|
242
|
+
for (const ref of desired) {
|
|
243
|
+
if (!existingIds.has(ref.id)) {
|
|
244
|
+
const cfg = linkConfigs.find((c) => c.prefix === ref.prefix);
|
|
245
|
+
patches.push({
|
|
246
|
+
op: 'add',
|
|
247
|
+
path: '/relations/-',
|
|
248
|
+
value: {
|
|
249
|
+
rel: cfg?.relationship ?? 'System.LinkTypes.Related',
|
|
250
|
+
url: workItemUrl(config.orgUrl, ref.id),
|
|
251
|
+
attributes: { comment: `ado-sync:${ref.prefix}` },
|
|
252
|
+
},
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return patches;
|
|
257
|
+
}
|
|
258
|
+
// ─── Suite hierarchy helpers ──────────────────────────────────────────────────
|
|
259
|
+
async function resolveRootSuiteId(client, config) {
|
|
260
|
+
if (config.testPlan.suiteId)
|
|
261
|
+
return config.testPlan.suiteId;
|
|
262
|
+
const api = await client.getTestPlanApi();
|
|
263
|
+
const plan = await api.getTestPlanById(config.project, config.testPlan.id);
|
|
264
|
+
return plan?.rootSuite?.id ?? 0;
|
|
265
|
+
}
|
|
266
|
+
async function getOrCreateChildSuite(client, config, parentSuiteId, suiteName) {
|
|
267
|
+
const api = await client.getTestPlanApi();
|
|
268
|
+
const suites = await api.getTestSuitesForPlan(config.project, config.testPlan.id);
|
|
269
|
+
const existing = (suites ?? []).find((s) => s.parentSuite?.id === parentSuiteId && s.name === suiteName);
|
|
270
|
+
if (existing?.id)
|
|
271
|
+
return existing.id;
|
|
272
|
+
const created = await api.createTestSuite({
|
|
273
|
+
suiteType: 'StaticTestSuite',
|
|
274
|
+
name: suiteName,
|
|
275
|
+
parentSuite: { id: parentSuiteId },
|
|
276
|
+
}, config.project, config.testPlan.id);
|
|
277
|
+
return created?.id ?? parentSuiteId;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get or create a nested suite matching the folder path of the given file.
|
|
281
|
+
* Uses suiteCache (Map<relPath, suiteId>) to avoid redundant API calls.
|
|
282
|
+
*/
|
|
283
|
+
async function getOrCreateSuiteForFile(client, config, filePath, configDir, suiteCache) {
|
|
284
|
+
const rootSuiteId = await resolveRootSuiteId(client, config);
|
|
285
|
+
const relFile = path.relative(configDir, filePath);
|
|
286
|
+
const segments = relFile.split(path.sep).slice(0, -1);
|
|
287
|
+
const cleanSegments = segments.map((s) => s.replace(/^@/, '')).filter(Boolean);
|
|
288
|
+
if (!cleanSegments.length)
|
|
289
|
+
return rootSuiteId;
|
|
290
|
+
let parentId = rootSuiteId;
|
|
291
|
+
let cacheKey = '';
|
|
292
|
+
for (const seg of cleanSegments) {
|
|
293
|
+
cacheKey = cacheKey ? `${cacheKey}/${seg}` : seg;
|
|
294
|
+
if (suiteCache.has(cacheKey)) {
|
|
295
|
+
parentId = suiteCache.get(cacheKey);
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
parentId = await getOrCreateChildSuite(client, config, parentId, seg);
|
|
299
|
+
suiteCache.set(cacheKey, parentId);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return parentId;
|
|
303
|
+
}
|
|
98
304
|
// ─── API layer ───────────────────────────────────────────────────────────────
|
|
99
|
-
async function getTestCase(client, id) {
|
|
305
|
+
async function getTestCase(client, id, titleField = 'System.Title') {
|
|
100
306
|
const wit = await client.getWitApi();
|
|
101
307
|
const fields = [
|
|
102
|
-
|
|
308
|
+
titleField,
|
|
103
309
|
'System.Description',
|
|
104
310
|
'Microsoft.VSTS.TCM.Steps',
|
|
105
311
|
'System.Tags',
|
|
@@ -119,7 +325,7 @@ async function getTestCase(client, id) {
|
|
|
119
325
|
const f = wi.fields ?? {};
|
|
120
326
|
return {
|
|
121
327
|
id,
|
|
122
|
-
title: f[
|
|
328
|
+
title: f[titleField] ?? '',
|
|
123
329
|
description: f['System.Description'] ?? '',
|
|
124
330
|
steps: parseStepsXml(f['Microsoft.VSTS.TCM.Steps'] ?? ''),
|
|
125
331
|
tags: tagsFromString(f['System.Tags']),
|
|
@@ -128,20 +334,27 @@ async function getTestCase(client, id) {
|
|
|
128
334
|
iterationPath: f['System.IterationPath'],
|
|
129
335
|
};
|
|
130
336
|
}
|
|
131
|
-
async function createTestCase(client, test, config) {
|
|
337
|
+
async function createTestCase(client, test, config, suiteIdOverride) {
|
|
132
338
|
const wit = await client.getWitApi();
|
|
339
|
+
const syncCfg = config.sync ?? {};
|
|
340
|
+
const titleField = syncCfg.titleField ?? 'System.Title';
|
|
133
341
|
const steps = test.steps.map((s) => ({
|
|
134
342
|
action: `${s.keyword} ${s.text}`.trim(),
|
|
135
343
|
expected: s.expected ?? '',
|
|
136
344
|
}));
|
|
137
|
-
const syncCfg = config.sync ?? {};
|
|
138
345
|
const patchDoc = [
|
|
139
|
-
{ op: 'add', path:
|
|
346
|
+
{ op: 'add', path: `/fields/${titleField}`, value: test.title },
|
|
140
347
|
{ op: 'add', path: '/fields/Microsoft.VSTS.TCM.Steps', value: buildStepsXml(steps) },
|
|
141
348
|
];
|
|
142
349
|
if (test.description) {
|
|
143
350
|
patchDoc.push({ op: 'add', path: '/fields/System.Description', value: test.description });
|
|
144
351
|
}
|
|
352
|
+
if (test.outlineParameters) {
|
|
353
|
+
const paramXml = buildParameterDataXml(test.outlineParameters.headers, test.outlineParameters.rows);
|
|
354
|
+
if (paramXml) {
|
|
355
|
+
patchDoc.push({ op: 'add', path: '/fields/Microsoft.VSTS.TCM.LocalDataSource', value: paramXml });
|
|
356
|
+
}
|
|
357
|
+
}
|
|
145
358
|
const filteredTags = test.tags
|
|
146
359
|
.filter((t) => !t.startsWith(syncCfg.tagPrefix + ':'))
|
|
147
360
|
.join('; ');
|
|
@@ -154,13 +367,14 @@ async function createTestCase(client, test, config) {
|
|
|
154
367
|
if (syncCfg.iterationPath) {
|
|
155
368
|
patchDoc.push({ op: 'add', path: '/fields/System.IterationPath', value: syncCfg.iterationPath });
|
|
156
369
|
}
|
|
370
|
+
const relationPatches = await applyLinkRelations(client, 0, test, config, true);
|
|
371
|
+
patchDoc.push(...relationPatches);
|
|
157
372
|
const wi = await wit.createWorkItem({}, patchDoc, config.project, 'Test Case');
|
|
158
373
|
if (!wi?.id)
|
|
159
374
|
throw new Error(`Failed to create test case for: ${test.title}`);
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
await addTestCaseToSuite(client, config, wi.id, suiteId);
|
|
375
|
+
const resolvedSuiteId = suiteIdOverride ?? config.testPlan.suiteId;
|
|
376
|
+
if (resolvedSuiteId) {
|
|
377
|
+
await addTestCaseToSuite(client, config, wi.id, resolvedSuiteId);
|
|
164
378
|
}
|
|
165
379
|
else {
|
|
166
380
|
await addTestCaseToRootSuite(client, config, wi.id);
|
|
@@ -169,33 +383,58 @@ async function createTestCase(client, test, config) {
|
|
|
169
383
|
}
|
|
170
384
|
async function updateTestCase(client, id, test, config) {
|
|
171
385
|
const wit = await client.getWitApi();
|
|
386
|
+
const syncCfg = config.sync ?? {};
|
|
387
|
+
const titleField = syncCfg.titleField ?? 'System.Title';
|
|
172
388
|
const steps = test.steps.map((s) => ({
|
|
173
389
|
action: `${s.keyword} ${s.text}`.trim(),
|
|
174
390
|
expected: s.expected ?? '',
|
|
175
391
|
}));
|
|
176
|
-
const syncCfg = config.sync ?? {};
|
|
177
392
|
const filteredTags = test.tags
|
|
178
393
|
.filter((t) => !t.startsWith(syncCfg.tagPrefix + ':'))
|
|
179
394
|
.join('; ');
|
|
180
395
|
const patchDoc = [
|
|
181
|
-
{ op: 'replace', path:
|
|
396
|
+
{ op: 'replace', path: `/fields/${titleField}`, value: test.title },
|
|
182
397
|
{ op: 'replace', path: '/fields/Microsoft.VSTS.TCM.Steps', value: buildStepsXml(steps) },
|
|
183
398
|
{ op: 'replace', path: '/fields/System.Tags', value: filteredTags },
|
|
184
399
|
];
|
|
185
|
-
if (test.description) {
|
|
400
|
+
if (test.description !== undefined) {
|
|
186
401
|
patchDoc.push({ op: 'replace', path: '/fields/System.Description', value: test.description });
|
|
187
402
|
}
|
|
403
|
+
if (test.outlineParameters) {
|
|
404
|
+
const paramXml = buildParameterDataXml(test.outlineParameters.headers, test.outlineParameters.rows);
|
|
405
|
+
if (paramXml) {
|
|
406
|
+
patchDoc.push({ op: 'replace', path: '/fields/Microsoft.VSTS.TCM.LocalDataSource', value: paramXml });
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
// Relations: remove stale first (inside applyLinkRelations), then add patches
|
|
410
|
+
const relationPatches = await applyLinkRelations(client, id, test, config, false);
|
|
411
|
+
patchDoc.push(...relationPatches);
|
|
188
412
|
await wit.updateWorkItem({}, patchDoc, id);
|
|
189
413
|
}
|
|
190
|
-
async function updateLocalFromAzure(client, id) {
|
|
191
|
-
return getTestCase(client, id);
|
|
414
|
+
async function updateLocalFromAzure(client, id, titleField) {
|
|
415
|
+
return getTestCase(client, id, titleField);
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Tag an orphaned Azure TC with 'ado-sync:removed' so teams can review and
|
|
419
|
+
* manually delete it. Does nothing if the tag is already present.
|
|
420
|
+
*/
|
|
421
|
+
async function tagTestCaseAsRemoved(client, id, removedTag = 'ado-sync:removed') {
|
|
422
|
+
const wit = await client.getWitApi();
|
|
423
|
+
const wi = await wit.getWorkItem(id, ['System.Tags']);
|
|
424
|
+
const existing = wi?.fields?.['System.Tags'] ?? '';
|
|
425
|
+
const currentTags = tagsFromString(existing);
|
|
426
|
+
if (currentTags.includes(removedTag))
|
|
427
|
+
return;
|
|
428
|
+
const newTags = [...currentTags, removedTag].join('; ');
|
|
429
|
+
await wit.updateWorkItem({}, [
|
|
430
|
+
{ op: 'replace', path: '/fields/System.Tags', value: newTags },
|
|
431
|
+
], id);
|
|
192
432
|
}
|
|
193
433
|
async function addTestCaseToSuite(client, config, testCaseId, suiteId) {
|
|
194
434
|
const api = await client.getTestPlanApi();
|
|
195
435
|
await api.addTestCasesToSuite([{ workItem: { id: testCaseId } }], config.project, config.testPlan.id, suiteId);
|
|
196
436
|
}
|
|
197
437
|
async function addTestCaseToRootSuite(client, config, testCaseId) {
|
|
198
|
-
// Fetch the plan to get its root suite id
|
|
199
438
|
const api = await client.getTestPlanApi();
|
|
200
439
|
const plan = await api.getTestPlanById(config.project, config.testPlan.id);
|
|
201
440
|
const rootSuiteId = plan?.rootSuite?.id;
|
|
@@ -206,7 +445,7 @@ async function addTestCaseToRootSuite(client, config, testCaseId) {
|
|
|
206
445
|
async function getTestCasesInSuite(client, config, suiteId) {
|
|
207
446
|
const api = await client.getTestPlanApi();
|
|
208
447
|
const wit = await client.getWitApi();
|
|
209
|
-
|
|
448
|
+
const titleField = config.sync?.titleField ?? 'System.Title';
|
|
210
449
|
let resolvedSuiteId = suiteId ?? config.testPlan.suiteId;
|
|
211
450
|
if (!resolvedSuiteId) {
|
|
212
451
|
const plan = await api.getTestPlanById(config.project, config.testPlan.id);
|
|
@@ -218,7 +457,7 @@ async function getTestCasesInSuite(client, config, suiteId) {
|
|
|
218
457
|
if (!suiteTestCases?.length)
|
|
219
458
|
return [];
|
|
220
459
|
const fields = [
|
|
221
|
-
|
|
460
|
+
titleField,
|
|
222
461
|
'System.Description',
|
|
223
462
|
'Microsoft.VSTS.TCM.Steps',
|
|
224
463
|
'System.Tags',
|
|
@@ -234,7 +473,7 @@ async function getTestCasesInSuite(client, config, suiteId) {
|
|
|
234
473
|
const f = wi.fields ?? {};
|
|
235
474
|
return {
|
|
236
475
|
id: wi.id,
|
|
237
|
-
title: f[
|
|
476
|
+
title: f[titleField] ?? '',
|
|
238
477
|
description: f['System.Description'] ?? '',
|
|
239
478
|
steps: parseStepsXml(f['Microsoft.VSTS.TCM.Steps'] ?? ''),
|
|
240
479
|
tags: tagsFromString(f['System.Tags']),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-cases.js","sourceRoot":"","sources":["../../src/azure/test-cases.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"test-cases.js","sourceRoot":"","sources":["../../src/azure/test-cases.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -52,6 +52,10 @@ program
|
|
|
52
52
|
.version('0.1.0');
|
|
53
53
|
// Global option: --config / -c
|
|
54
54
|
program.option('-c, --config <path>', 'Path to config file (default: ado-sync.json)');
|
|
55
|
+
/** Collect repeatable option values into an array. */
|
|
56
|
+
function collect(value, previous) {
|
|
57
|
+
return [...previous, value];
|
|
58
|
+
}
|
|
55
59
|
// ─── init ─────────────────────────────────────────────────────────────────────
|
|
56
60
|
program
|
|
57
61
|
.command('init')
|
|
@@ -75,11 +79,14 @@ program
|
|
|
75
79
|
.description('Push local test specs to Azure DevOps (create or update test cases)')
|
|
76
80
|
.option('--dry-run', 'Show what would change without making any modifications')
|
|
77
81
|
.option('--tags <expression>', 'Only sync scenarios matching this tag expression (e.g. "@smoke and not @wip")')
|
|
82
|
+
.option('--config-override <path=value>', 'Override a config value (repeatable, e.g. --config-override sync.tagPrefix=mytag)', collect, [])
|
|
78
83
|
.action(async (opts) => {
|
|
79
84
|
const globalOpts = program.opts();
|
|
80
85
|
try {
|
|
81
86
|
const configPath = (0, config_1.resolveConfigPath)(globalOpts.config);
|
|
82
87
|
const config = (0, config_1.loadConfig)(configPath);
|
|
88
|
+
if (opts.configOverride?.length)
|
|
89
|
+
(0, config_1.applyOverrides)(config, opts.configOverride);
|
|
83
90
|
const configDir = path.dirname(configPath);
|
|
84
91
|
console.log(chalk_1.default.bold('ado-sync push'));
|
|
85
92
|
console.log(chalk_1.default.dim(`Config: ${configPath}`));
|
|
@@ -89,6 +96,8 @@ program
|
|
|
89
96
|
console.log(chalk_1.default.yellow('Dry run — no changes will be made'));
|
|
90
97
|
if (opts.tags)
|
|
91
98
|
console.log(chalk_1.default.dim(`Tags: ${opts.tags}`));
|
|
99
|
+
if (opts.configOverride?.length)
|
|
100
|
+
console.log(chalk_1.default.dim(`Overrides: ${opts.configOverride.join(', ')}`));
|
|
92
101
|
console.log('');
|
|
93
102
|
const results = await (0, engine_1.push)(config, configDir, { dryRun: opts.dryRun, tags: opts.tags });
|
|
94
103
|
printResults(results);
|
|
@@ -104,11 +113,14 @@ program
|
|
|
104
113
|
.description('Pull updates from Azure DevOps into local spec files')
|
|
105
114
|
.option('--dry-run', 'Show what would change without modifying local files')
|
|
106
115
|
.option('--tags <expression>', 'Only sync scenarios matching this tag expression (e.g. "@smoke and not @wip")')
|
|
116
|
+
.option('--config-override <path=value>', 'Override a config value (repeatable)', collect, [])
|
|
107
117
|
.action(async (opts) => {
|
|
108
118
|
const globalOpts = program.opts();
|
|
109
119
|
try {
|
|
110
120
|
const configPath = (0, config_1.resolveConfigPath)(globalOpts.config);
|
|
111
121
|
const config = (0, config_1.loadConfig)(configPath);
|
|
122
|
+
if (opts.configOverride?.length)
|
|
123
|
+
(0, config_1.applyOverrides)(config, opts.configOverride);
|
|
112
124
|
const configDir = path.dirname(configPath);
|
|
113
125
|
console.log(chalk_1.default.bold('ado-sync pull'));
|
|
114
126
|
console.log(chalk_1.default.dim(`Config: ${configPath}`));
|
|
@@ -130,11 +142,14 @@ program
|
|
|
130
142
|
.command('status')
|
|
131
143
|
.description('Show diff between local specs and Azure DevOps without making changes')
|
|
132
144
|
.option('--tags <expression>', 'Only check scenarios matching this tag expression')
|
|
145
|
+
.option('--config-override <path=value>', 'Override a config value (repeatable)', collect, [])
|
|
133
146
|
.action(async (opts) => {
|
|
134
147
|
const globalOpts = program.opts();
|
|
135
148
|
try {
|
|
136
149
|
const configPath = (0, config_1.resolveConfigPath)(globalOpts.config);
|
|
137
150
|
const config = (0, config_1.loadConfig)(configPath);
|
|
151
|
+
if (opts.configOverride?.length)
|
|
152
|
+
(0, config_1.applyOverrides)(config, opts.configOverride);
|
|
138
153
|
const configDir = path.dirname(configPath);
|
|
139
154
|
console.log(chalk_1.default.bold('ado-sync status'));
|
|
140
155
|
console.log(chalk_1.default.dim(`Config: ${configPath}`));
|
|
@@ -151,12 +166,14 @@ program
|
|
|
151
166
|
});
|
|
152
167
|
// ─── Output helpers ───────────────────────────────────────────────────────────
|
|
153
168
|
function printResults(results) {
|
|
154
|
-
const counts = { created: 0, updated: 0, pulled: 0, skipped: 0, conflict: 0, error: 0 };
|
|
169
|
+
const counts = { created: 0, updated: 0, pulled: 0, skipped: 0, conflict: 0, removed: 0, error: 0 };
|
|
155
170
|
for (const r of results) {
|
|
156
171
|
counts[r.action]++;
|
|
157
172
|
const idStr = r.azureId ? chalk_1.default.dim(` [#${r.azureId}]`) : '';
|
|
158
173
|
const detailStr = r.detail ? chalk_1.default.dim(` — ${r.detail}`) : '';
|
|
159
|
-
const filePart =
|
|
174
|
+
const filePart = r.filePath
|
|
175
|
+
? chalk_1.default.dim(path.relative(process.cwd(), r.filePath) + ':')
|
|
176
|
+
: chalk_1.default.dim('(azure):');
|
|
160
177
|
switch (r.action) {
|
|
161
178
|
case 'created':
|
|
162
179
|
console.log(`${chalk_1.default.green('+')} ${filePart} ${r.title}${idStr}`);
|
|
@@ -173,6 +190,9 @@ function printResults(results) {
|
|
|
173
190
|
case 'conflict':
|
|
174
191
|
console.log(`${chalk_1.default.yellow('!')} ${filePart} ${r.title}${idStr}${detailStr}`);
|
|
175
192
|
break;
|
|
193
|
+
case 'removed':
|
|
194
|
+
console.log(`${chalk_1.default.magenta('−')} ${filePart} ${r.title}${idStr}${detailStr}`);
|
|
195
|
+
break;
|
|
176
196
|
case 'error':
|
|
177
197
|
console.log(`${chalk_1.default.red('✗')} ${filePart} ${r.title}${idStr}${chalk_1.default.red(detailStr)}`);
|
|
178
198
|
break;
|
|
@@ -185,6 +205,7 @@ function printResults(results) {
|
|
|
185
205
|
counts.pulled && chalk_1.default.cyan(`${counts.pulled} pulled`),
|
|
186
206
|
counts.skipped && chalk_1.default.dim(`${counts.skipped} skipped`),
|
|
187
207
|
counts.conflict && chalk_1.default.yellow(`${counts.conflict} conflicts`),
|
|
208
|
+
counts.removed && chalk_1.default.magenta(`${counts.removed} removed`),
|
|
188
209
|
counts.error && chalk_1.default.red(`${counts.error} errors`),
|
|
189
210
|
].filter(Boolean).join(chalk_1.default.dim(' '));
|
|
190
211
|
console.log(summary || chalk_1.default.dim('Nothing to sync.'));
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yBAAuB;AAEvB,kDAA0B;AAC1B,yCAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAE7B,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { SyncConfig } from './types';
|
|
2
2
|
export declare function resolveConfigPath(explicitPath?: string): string;
|
|
3
3
|
export declare function loadConfig(configPath: string): SyncConfig;
|
|
4
|
+
/**
|
|
5
|
+
* Apply CLI --config-override values to a loaded config.
|
|
6
|
+
* Each override is a string like "sync.tagPrefix=mytag" or "testPlan.id=42".
|
|
7
|
+
* Dot-path navigation sets nested values. Numbers are coerced automatically.
|
|
8
|
+
*/
|
|
9
|
+
export declare function applyOverrides(cfg: SyncConfig, overrides: string[]): void;
|
|
4
10
|
export declare const CONFIG_TEMPLATE_JSON: string;
|