airbyte-faros-destination 0.22.2 → 0.22.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/lib/converters/azure-tests/common.d.ts +1 -13
- package/lib/converters/azure-tests/common.js +6 -36
- package/lib/converters/azure-tests/common.js.map +1 -1
- package/lib/converters/azure-tests/test_cases.js +6 -3
- package/lib/converters/azure-tests/test_cases.js.map +1 -1
- package/lib/converters/azure-tests/test_results.js +3 -5
- package/lib/converters/azure-tests/test_results.js.map +1 -1
- package/lib/converters/azure-tests/test_runs.d.ts +2 -0
- package/lib/converters/azure-tests/test_runs.js +33 -15
- package/lib/converters/azure-tests/test_runs.js.map +1 -1
- package/lib/converters/azure-tests/test_suites.js +8 -3
- package/lib/converters/azure-tests/test_suites.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { type qa_TestStatus } from '@faros-ai/canonical-models';
|
|
1
2
|
import { AirbyteRecord } from 'faros-airbyte-cdk';
|
|
2
|
-
import { type qa_TestStatus, type qa_TestType } from '@faros-ai/canonical-models';
|
|
3
3
|
import { Converter, StreamContext } from '../converter';
|
|
4
4
|
export declare abstract class AzureTestsConverter extends Converter {
|
|
5
5
|
private qualifiedSourceName;
|
|
@@ -10,18 +10,6 @@ export declare abstract class AzureTestsConverter extends Converter {
|
|
|
10
10
|
protected initializeTaskSource(ctx: StreamContext): void;
|
|
11
11
|
id(record: AirbyteRecord): any;
|
|
12
12
|
protected suiteUid(planId: number, suiteId: number): string;
|
|
13
|
-
protected resultUid(runId: number, resultId: number): string;
|
|
14
13
|
protected convertOutcome(outcome?: string): qa_TestStatus;
|
|
15
|
-
/**
|
|
16
|
-
* Maps an Azure Test suite type to a canonical test type.
|
|
17
|
-
* The category is always Custom (no direct canonical mapping exists),
|
|
18
|
-
* while detail preserves the original source value
|
|
19
|
-
*/
|
|
20
|
-
protected convertSuiteType(suiteType?: string | number): qa_TestType;
|
|
21
|
-
/**
|
|
22
|
-
* Maps Azure's numeric suite type IDs to their string equivalents.
|
|
23
|
-
* https://github.com/microsoft/azure-devops-node-api/blob/master/api/interfaces/TestPlanInterfaces.ts
|
|
24
|
-
*/
|
|
25
|
-
private suiteTypeFromNumber;
|
|
26
14
|
protected getWorkItemField(workItemFields: any[], fieldName: string): any;
|
|
27
15
|
}
|
|
@@ -14,8 +14,8 @@ class AzureTestsConverter extends converter_1.Converter {
|
|
|
14
14
|
return this.source;
|
|
15
15
|
}
|
|
16
16
|
const sourceConfig = ctx.getSourceConfig();
|
|
17
|
-
const
|
|
18
|
-
this.source =
|
|
17
|
+
const instanceId = sourceConfig?.instance_id;
|
|
18
|
+
this.source = instanceId ? `${this.source}_${instanceId}` : this.source;
|
|
19
19
|
this.qualifiedSourceName = true;
|
|
20
20
|
return this.source;
|
|
21
21
|
}
|
|
@@ -37,9 +37,6 @@ class AzureTestsConverter extends converter_1.Converter {
|
|
|
37
37
|
suiteUid(planId, suiteId) {
|
|
38
38
|
return `plan-${planId}_suite-${suiteId}`;
|
|
39
39
|
}
|
|
40
|
-
resultUid(runId, resultId) {
|
|
41
|
-
return `run-${runId}_result-${resultId}`;
|
|
42
|
-
}
|
|
43
40
|
convertOutcome(outcome) {
|
|
44
41
|
switch (outcome?.toLowerCase()) {
|
|
45
42
|
case 'passed':
|
|
@@ -51,37 +48,10 @@ class AzureTestsConverter extends converter_1.Converter {
|
|
|
51
48
|
case 'notapplicable':
|
|
52
49
|
return { category: canonical_models_1.qa_TestStatusCategory.Skipped, detail: outcome };
|
|
53
50
|
default:
|
|
54
|
-
return {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
* Maps an Azure Test suite type to a canonical test type.
|
|
59
|
-
* The category is always Custom (no direct canonical mapping exists),
|
|
60
|
-
* while detail preserves the original source value
|
|
61
|
-
*/
|
|
62
|
-
convertSuiteType(suiteType) {
|
|
63
|
-
const normalized = typeof suiteType === 'number'
|
|
64
|
-
? this.suiteTypeFromNumber(suiteType)
|
|
65
|
-
: suiteType?.toLowerCase();
|
|
66
|
-
switch (normalized) {
|
|
67
|
-
case 'dynamictestsuite':
|
|
68
|
-
case 'statictestsuite':
|
|
69
|
-
case 'requirementtestsuite':
|
|
70
|
-
return { category: canonical_models_1.qa_TestTypeCategory.Custom, detail: String(suiteType) };
|
|
71
|
-
default:
|
|
72
|
-
return { category: canonical_models_1.qa_TestTypeCategory.Custom, detail: String(suiteType ?? 'Unknown') };
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Maps Azure's numeric suite type IDs to their string equivalents.
|
|
77
|
-
* https://github.com/microsoft/azure-devops-node-api/blob/master/api/interfaces/TestPlanInterfaces.ts
|
|
78
|
-
*/
|
|
79
|
-
suiteTypeFromNumber(suiteType) {
|
|
80
|
-
switch (suiteType) {
|
|
81
|
-
case 1: return 'dynamictestsuite';
|
|
82
|
-
case 2: return 'statictestsuite';
|
|
83
|
-
case 3: return 'requirementtestsuite';
|
|
84
|
-
default: return undefined;
|
|
51
|
+
return {
|
|
52
|
+
category: canonical_models_1.qa_TestStatusCategory.Custom,
|
|
53
|
+
detail: outcome ?? 'Unknown',
|
|
54
|
+
};
|
|
85
55
|
}
|
|
86
56
|
}
|
|
87
57
|
getWorkItemField(workItemFields, fieldName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/converters/azure-tests/common.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/converters/azure-tests/common.ts"],"names":[],"mappings":";;;AAAA,iEAGoC;AAGpC,4CAAsD;AAEtD,MAAsB,mBAAoB,SAAQ,qBAAS;IAA3D;;QACU,wBAAmB,GAAG,KAAK,CAAC;QACpC,WAAM,GAAG,aAAa,CAAC;IA6DzB,CAAC;IA3DW,gBAAgB,CAAC,GAAkB;QAC3C,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QACD,MAAM,YAAY,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,YAAY,EAAE,WAAW,CAAC;QAC7C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QACxE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAc,UAAU;QACtB,OAAO,IAAI,CAAC,WAAW,IAAI,iBAAiB,CAAC;IAC/C,CAAC;IAIS,oBAAoB,CAAC,GAAkB;QAC/C,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,MAAM,YAAY,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,YAAY,EAAE,WAAW,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,UAAU;YAC3B,CAAC,CAAC,mBAAmB,UAAU,EAAE;YACjC,CAAC,CAAC,iBAAiB,CAAC;IACxB,CAAC;IAED,EAAE,CAAC,MAAqB;QACtB,OAAO,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;IAClC,CAAC;IAES,QAAQ,CAAC,MAAc,EAAE,OAAe;QAChD,OAAO,QAAQ,MAAM,UAAU,OAAO,EAAE,CAAC;IAC3C,CAAC;IAES,cAAc,CAAC,OAAgB;QACvC,QAAQ,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC;YAC/B,KAAK,QAAQ;gBACX,OAAO,EAAC,QAAQ,EAAE,wCAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;YACpE,KAAK,QAAQ;gBACX,OAAO,EAAC,QAAQ,EAAE,wCAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;YACpE,KAAK,aAAa,CAAC;YACnB,KAAK,SAAS,CAAC;YACf,KAAK,eAAe;gBAClB,OAAO,EAAC,QAAQ,EAAE,wCAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAC,CAAC;YACpE;gBACE,OAAO;oBACL,QAAQ,EAAE,wCAAqB,CAAC,MAAM;oBACtC,MAAM,EAAE,OAAO,IAAI,SAAS;iBAC7B,CAAC;QACN,CAAC;IACH,CAAC;IAES,gBAAgB,CAAC,cAAqB,EAAE,SAAiB;QACjE,IAAI,CAAC,cAAc;YAAE,OAAO,SAAS,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AA/DD,kDA+DC"}
|
|
@@ -19,7 +19,7 @@ class TestCases extends common_1.AzureTestsConverter {
|
|
|
19
19
|
async convert(record, ctx) {
|
|
20
20
|
this.initializeSource(ctx);
|
|
21
21
|
this.initializeTaskSource(ctx);
|
|
22
|
-
const source = this.
|
|
22
|
+
const source = this.source;
|
|
23
23
|
const testCase = record.record.data;
|
|
24
24
|
const workItem = testCase.workItem;
|
|
25
25
|
if (!workItem?.id) {
|
|
@@ -83,9 +83,12 @@ class TestCases extends common_1.AzureTestsConverter {
|
|
|
83
83
|
}
|
|
84
84
|
convertTestCaseType(automationStatus) {
|
|
85
85
|
if (automationStatus?.toLowerCase() === 'not automated') {
|
|
86
|
-
return { category: canonical_models_1.qa_TestTypeCategory.Manual, detail:
|
|
86
|
+
return { category: canonical_models_1.qa_TestTypeCategory.Manual, detail: automationStatus };
|
|
87
87
|
}
|
|
88
|
-
return {
|
|
88
|
+
return {
|
|
89
|
+
category: canonical_models_1.qa_TestTypeCategory.Custom,
|
|
90
|
+
detail: automationStatus ?? 'Unknown',
|
|
91
|
+
};
|
|
89
92
|
}
|
|
90
93
|
}
|
|
91
94
|
exports.TestCases = TestCases;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_cases.js","sourceRoot":"","sources":["../../../src/converters/azure-tests/test_cases.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"test_cases.js","sourceRoot":"","sources":["../../../src/converters/azure-tests/test_cases.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ class TestResults extends common_1.AzureTestsConverter {
|
|
|
12
12
|
}
|
|
13
13
|
async convert(record, ctx) {
|
|
14
14
|
this.initializeSource(ctx);
|
|
15
|
-
const source = this.
|
|
15
|
+
const source = this.source;
|
|
16
16
|
const result = record.record.data;
|
|
17
17
|
const runId = result.testRun?.id;
|
|
18
18
|
const resultId = result.id;
|
|
@@ -21,16 +21,14 @@ class TestResults extends common_1.AzureTestsConverter {
|
|
|
21
21
|
}
|
|
22
22
|
const testCaseId = result.testCase?.id;
|
|
23
23
|
const resultRecord = {
|
|
24
|
-
uid:
|
|
24
|
+
uid: String(resultId),
|
|
25
25
|
description: faros_js_client_1.Utils.cleanAndTruncate([result.testCaseTitle, result.errorMessage, result.comment]
|
|
26
26
|
.filter(Boolean)
|
|
27
27
|
.join(' - ') || null),
|
|
28
28
|
startedAt: faros_js_client_1.Utils.toDate(result.startedDate),
|
|
29
29
|
endedAt: faros_js_client_1.Utils.toDate(result.completedDate),
|
|
30
30
|
status: this.convertOutcome(result.outcome),
|
|
31
|
-
testCase: testCaseId
|
|
32
|
-
? { uid: String(testCaseId), source }
|
|
33
|
-
: undefined,
|
|
31
|
+
testCase: testCaseId ? { uid: String(testCaseId), source } : undefined,
|
|
34
32
|
testExecution: { uid: String(runId), source },
|
|
35
33
|
};
|
|
36
34
|
return [{ model: 'qa_TestCaseResult', record: resultRecord }];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_results.js","sourceRoot":"","sources":["../../../src/converters/azure-tests/test_results.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"test_results.js","sourceRoot":"","sources":["../../../src/converters/azure-tests/test_results.ts"],"names":[],"mappings":";;;AAGA,qDAAsC;AAGtC,qCAA6C;AAE7C,MAAa,WAAY,SAAQ,4BAAmB;IAApD;;QACW,sBAAiB,GAAoC;YAC5D,mBAAmB;SACpB,CAAC;IAkCJ,CAAC;IAhCC,KAAK,CAAC,OAAO,CACX,MAAqB,EACrB,GAAkB;QAElB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAsB,CAAC;QAEpD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QAEvC,MAAM,YAAY,GAA+B;YAC/C,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC;YACrB,WAAW,EAAE,uBAAK,CAAC,gBAAgB,CACjC,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC;iBACxD,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CACvB;YACD,SAAS,EAAE,uBAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YAC3C,OAAO,EAAE,uBAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;YAC3C,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;YAC3C,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAC,CAAC,CAAC,CAAC,SAAS;YACpE,aAAa,EAAE,EAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAC;SAC5C,CAAC;QAEF,OAAO,CAAC,EAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,YAAY,EAAC,CAAC,CAAC;IAC9D,CAAC;CACF;AArCD,kCAqCC"}
|
|
@@ -4,5 +4,7 @@ import { AzureTestsConverter } from './common';
|
|
|
4
4
|
export declare class TestRuns extends AzureTestsConverter {
|
|
5
5
|
readonly destinationModels: ReadonlyArray<DestinationModel>;
|
|
6
6
|
convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
7
|
+
private static readonly FAILURE_OUTCOMES;
|
|
8
|
+
private failedTestsCount;
|
|
7
9
|
private convertRunState;
|
|
8
10
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TestRuns = void 0;
|
|
4
|
+
const canonical_models_1 = require("@faros-ai/canonical-models");
|
|
4
5
|
const faros_js_client_1 = require("faros-js-client");
|
|
6
|
+
const lodash_1 = require("lodash");
|
|
5
7
|
const common_1 = require("./common");
|
|
6
8
|
class TestRuns extends common_1.AzureTestsConverter {
|
|
7
9
|
constructor() {
|
|
@@ -12,18 +14,20 @@ class TestRuns extends common_1.AzureTestsConverter {
|
|
|
12
14
|
}
|
|
13
15
|
async convert(record, ctx) {
|
|
14
16
|
this.initializeSource(ctx);
|
|
15
|
-
const source = this.
|
|
17
|
+
const source = this.source;
|
|
16
18
|
const run = record.record.data;
|
|
17
19
|
if (!run.id) {
|
|
18
20
|
return [];
|
|
19
21
|
}
|
|
22
|
+
const failedTests = this.failedTestsCount(run);
|
|
20
23
|
const testCaseResultsStats = {
|
|
21
|
-
success: run.passedTests
|
|
22
|
-
failure:
|
|
23
|
-
skipped:
|
|
24
|
-
unknown: run.unanalyzedTests
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
success: run.passedTests,
|
|
25
|
+
failure: failedTests,
|
|
26
|
+
skipped: run.notApplicableTests,
|
|
27
|
+
unknown: (0, lodash_1.isNil)(run.unanalyzedTests) && (0, lodash_1.isNil)(run.incompleteTests)
|
|
28
|
+
? undefined
|
|
29
|
+
: (run.unanalyzedTests ?? 0) + (run.incompleteTests ?? 0),
|
|
30
|
+
total: run.totalTests,
|
|
27
31
|
};
|
|
28
32
|
const tags = [];
|
|
29
33
|
if (run.isAutomated !== undefined) {
|
|
@@ -34,7 +38,7 @@ class TestRuns extends common_1.AzureTestsConverter {
|
|
|
34
38
|
name: run.name,
|
|
35
39
|
description: run.webAccessUrl ?? null,
|
|
36
40
|
source,
|
|
37
|
-
status: this.convertRunState(run.state,
|
|
41
|
+
status: this.convertRunState(run.state, failedTests),
|
|
38
42
|
startedAt: faros_js_client_1.Utils.toDate(run.startedDate),
|
|
39
43
|
endedAt: faros_js_client_1.Utils.toDate(run.completedDate),
|
|
40
44
|
testCaseResultsStats,
|
|
@@ -42,24 +46,38 @@ class TestRuns extends common_1.AzureTestsConverter {
|
|
|
42
46
|
};
|
|
43
47
|
return [{ model: 'qa_TestExecution', record: executionRecord }];
|
|
44
48
|
}
|
|
49
|
+
failedTestsCount(run) {
|
|
50
|
+
return (run.runStatistics ?? [])
|
|
51
|
+
.filter((s) => s.outcome && TestRuns.FAILURE_OUTCOMES.has(s.outcome.toLowerCase()))
|
|
52
|
+
.reduce((sum, s) => sum + (s.count ?? 0), 0);
|
|
53
|
+
}
|
|
45
54
|
convertRunState(state, failedTests) {
|
|
46
55
|
switch (state?.toLowerCase()) {
|
|
47
56
|
case 'completed':
|
|
48
|
-
return
|
|
49
|
-
? { category:
|
|
50
|
-
: { category:
|
|
57
|
+
return failedTests
|
|
58
|
+
? { category: canonical_models_1.qa_TestStatusCategory.Failure, detail: state }
|
|
59
|
+
: { category: canonical_models_1.qa_TestStatusCategory.Success, detail: state };
|
|
51
60
|
case 'aborted':
|
|
52
61
|
case 'needsinvestigation':
|
|
53
|
-
return { category:
|
|
62
|
+
return { category: canonical_models_1.qa_TestStatusCategory.Failure, detail: state };
|
|
54
63
|
case 'inprogress':
|
|
55
64
|
case 'waiting':
|
|
56
|
-
return { category: 'Running', detail: state };
|
|
57
65
|
case 'notstarted':
|
|
58
|
-
return { category:
|
|
66
|
+
return { category: canonical_models_1.qa_TestStatusCategory.Unknown, detail: state };
|
|
59
67
|
default:
|
|
60
|
-
return {
|
|
68
|
+
return {
|
|
69
|
+
category: canonical_models_1.qa_TestStatusCategory.Custom,
|
|
70
|
+
detail: state ?? 'Unknown',
|
|
71
|
+
};
|
|
61
72
|
}
|
|
62
73
|
}
|
|
63
74
|
}
|
|
64
75
|
exports.TestRuns = TestRuns;
|
|
76
|
+
// From azure-devops-node-api TestOutcome enum.
|
|
77
|
+
TestRuns.FAILURE_OUTCOMES = new Set([
|
|
78
|
+
'failed',
|
|
79
|
+
'aborted',
|
|
80
|
+
'error',
|
|
81
|
+
'timeout',
|
|
82
|
+
]);
|
|
65
83
|
//# sourceMappingURL=test_runs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_runs.js","sourceRoot":"","sources":["../../../src/converters/azure-tests/test_runs.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"test_runs.js","sourceRoot":"","sources":["../../../src/converters/azure-tests/test_runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TestSuites = void 0;
|
|
4
|
+
const canonical_models_1 = require("@faros-ai/canonical-models");
|
|
5
|
+
const faros_js_client_1 = require("faros-js-client");
|
|
4
6
|
const common_1 = require("./common");
|
|
5
7
|
class TestSuites extends common_1.AzureTestsConverter {
|
|
6
8
|
constructor() {
|
|
@@ -11,7 +13,7 @@ class TestSuites extends common_1.AzureTestsConverter {
|
|
|
11
13
|
}
|
|
12
14
|
async convert(record, ctx) {
|
|
13
15
|
this.initializeSource(ctx);
|
|
14
|
-
const source = this.
|
|
16
|
+
const source = this.source;
|
|
15
17
|
const suite = record.record.data;
|
|
16
18
|
const planId = suite.plan?.id;
|
|
17
19
|
const suiteId = suite.id;
|
|
@@ -26,9 +28,12 @@ class TestSuites extends common_1.AzureTestsConverter {
|
|
|
26
28
|
const suiteRecord = {
|
|
27
29
|
uid: this.suiteUid(planId, suiteId),
|
|
28
30
|
name: suite.name,
|
|
29
|
-
description: suite.queryString
|
|
31
|
+
description: faros_js_client_1.Utils.cleanAndTruncate(suite.queryString),
|
|
30
32
|
source,
|
|
31
|
-
type:
|
|
33
|
+
type: {
|
|
34
|
+
category: canonical_models_1.qa_TestTypeCategory.Custom,
|
|
35
|
+
detail: String(suite.suiteType ?? 'Unknown'),
|
|
36
|
+
},
|
|
32
37
|
tags,
|
|
33
38
|
};
|
|
34
39
|
return [{ model: 'qa_TestSuite', record: suiteRecord }];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_suites.js","sourceRoot":"","sources":["../../../src/converters/azure-tests/test_suites.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"test_suites.js","sourceRoot":"","sources":["../../../src/converters/azure-tests/test_suites.ts"],"names":[],"mappings":";;;AAAA,iEAGoC;AAGpC,qDAAsC;AAGtC,qCAA6C;AAE7C,MAAa,UAAW,SAAQ,4BAAmB;IAAnD;;QACW,sBAAiB,GAAoC;YAC5D,cAAc;SACf,CAAC;IAkCJ,CAAC;IAhCC,KAAK,CAAC,OAAO,CACX,MAAqB,EACrB,GAAkB;QAElB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAiB,CAAC;QAE9C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5E,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE3D,MAAM,WAAW,GAA0B;YACzC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;YACnC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,uBAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC;YACtD,MAAM;YACN,IAAI,EAAE;gBACJ,QAAQ,EAAE,sCAAmB,CAAC,MAAM;gBACpC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC;aAC7C;YACD,IAAI;SACL,CAAC;QAEF,OAAO,CAAC,EAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAC,CAAC,CAAC;IACxD,CAAC;CACF;AArCD,gCAqCC"}
|