@mcp-abap-adt/adt-clients 3.5.0 → 3.7.0

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.
@@ -20,6 +20,7 @@ import type { IInterfaceConfig, IInterfaceState } from '../core/interface';
20
20
  import type { IPackageConfig, IPackageState } from '../core/package';
21
21
  import type { IProgramConfig, IProgramState } from '../core/program';
22
22
  import type { AdtUtils } from '../core/shared/AdtUtils';
23
+ import type { IUnitTestConfig, IUnitTestState } from '../core/unitTest';
23
24
  import type { IViewConfig, IViewState } from '../core/view';
24
25
  import { AdtClient, type IAdtClientOptions } from './AdtClient';
25
26
  export declare class AdtClientLegacy extends AdtClient {
@@ -31,6 +32,7 @@ export declare class AdtClientLegacy extends AdtClient {
31
32
  getFunctionModule(): IAdtObject<IFunctionModuleConfig, IFunctionModuleState>;
32
33
  getPackage(): IAdtObject<IPackageConfig, IPackageState>;
33
34
  getView(): IAdtObject<IViewConfig, IViewState>;
35
+ getUnitTest(): IAdtObject<IUnitTestConfig, IUnitTestState>;
34
36
  getUtils(): AdtUtils;
35
37
  getDomain(): never;
36
38
  getDataElement(): never;
@@ -1 +1 @@
1
- {"version":3,"file":"AdtClientLegacy.d.ts","sourceRoot":"","sources":["../../src/clients/AdtClientLegacy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,OAAO,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAehE,qBAAa,eAAgB,SAAQ,SAAS;gBAE1C,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,iBAAiB;IAWpB,UAAU,IAAI,UAAU,CAAC,cAAc,EAAE,aAAa,CAAC;IASvD,QAAQ,IAAI,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC;IASjD,YAAY,IAAI,UAAU,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAS7D,gBAAgB,IAAI,UAAU,CACrC,oBAAoB,EACpB,mBAAmB,CACpB;IASQ,iBAAiB,IAAI,UAAU,CACtC,qBAAqB,EACrB,oBAAoB,CACrB;IASQ,UAAU,IAAI,UAAU,CAAC,cAAc,EAAE,aAAa,CAAC;IAQvD,OAAO,IAAI,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC;IAM9C,QAAQ,IAAI,QAAQ;IAMpB,SAAS,IAAI,KAAK;IAIlB,cAAc,IAAI,KAAK;IAMvB,YAAY,IAAI,KAAK;IAMrB,QAAQ,IAAI,KAAK;IAIjB,YAAY,IAAI,KAAK;IAMrB,gBAAgB,IAAI,KAAK;IAMzB,oBAAoB,IAAI,KAAK;IAM7B,iBAAiB,IAAI,KAAK;IAS1B,UAAU,IAAI,KAAK;IASnB,qBAAqB,IAAI,KAAK;IAS9B,yBAAyB,IAAI,KAAK;IASlC,oBAAoB,IAAI,KAAK;IAM7B,cAAc,IAAI,KAAK;CAQjC"}
1
+ {"version":3,"file":"AdtClientLegacy.d.ts","sourceRoot":"","sources":["../../src/clients/AdtClientLegacy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,OAAO,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAehE,qBAAa,eAAgB,SAAQ,SAAS;gBAE1C,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,iBAAiB;IAWpB,UAAU,IAAI,UAAU,CAAC,cAAc,EAAE,aAAa,CAAC;IASvD,QAAQ,IAAI,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC;IASjD,YAAY,IAAI,UAAU,CAAC,gBAAgB,EAAE,eAAe,CAAC;IAS7D,gBAAgB,IAAI,UAAU,CACrC,oBAAoB,EACpB,mBAAmB,CACpB;IASQ,iBAAiB,IAAI,UAAU,CACtC,qBAAqB,EACrB,oBAAoB,CACrB;IASQ,UAAU,IAAI,UAAU,CAAC,cAAc,EAAE,aAAa,CAAC;IAQvD,OAAO,IAAI,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC;IAM9C,WAAW,IAAI,UAAU,CAAC,eAAe,EAAE,cAAc,CAAC;IAM1D,QAAQ,IAAI,QAAQ;IAMpB,SAAS,IAAI,KAAK;IAIlB,cAAc,IAAI,KAAK;IAMvB,YAAY,IAAI,KAAK;IAMrB,QAAQ,IAAI,KAAK;IAIjB,YAAY,IAAI,KAAK;IAMrB,gBAAgB,IAAI,KAAK;IAMzB,oBAAoB,IAAI,KAAK;IAM7B,iBAAiB,IAAI,KAAK;IAS1B,UAAU,IAAI,KAAK;IASnB,qBAAqB,IAAI,KAAK;IAS9B,yBAAyB,IAAI,KAAK;IASlC,oBAAoB,IAAI,KAAK;IAM7B,cAAc,IAAI,KAAK;CAKjC"}
@@ -23,6 +23,7 @@ const AdtPackageLegacy_1 = require("../core/package/AdtPackageLegacy");
23
23
  const AdtProgramLegacy_1 = require("../core/program/AdtProgramLegacy");
24
24
  const AdtUtilsLegacy_1 = require("../core/shared/AdtUtilsLegacy");
25
25
  const contentTypes_1 = require("../core/shared/contentTypes");
26
+ const AdtUnitTestLegacy_1 = require("../core/unitTest/AdtUnitTestLegacy");
26
27
  const AdtViewLegacy_1 = require("../core/view/AdtViewLegacy");
27
28
  const AdtClient_1 = require("./AdtClient");
28
29
  /**
@@ -64,6 +65,10 @@ class AdtClientLegacy extends AdtClient_1.AdtClient {
64
65
  getView() {
65
66
  return new AdtViewLegacy_1.AdtViewLegacy(this.connection, this.logger, this.systemContext);
66
67
  }
68
+ // --- Unit tests with legacy endpoints ---
69
+ getUnitTest() {
70
+ return new AdtUnitTestLegacy_1.AdtUnitTestLegacy(this.connection, this.logger);
71
+ }
67
72
  // --- Utilities with legacy restrictions ---
68
73
  getUtils() {
69
74
  return new AdtUtilsLegacy_1.AdtUtilsLegacy(this.connection, this.logger);
@@ -0,0 +1,44 @@
1
+ /**
2
+ * AdtUnitTestLegacy - Unit test operations for legacy SAP systems (BASIS < 7.50)
3
+ *
4
+ * Extends AdtUnitTest and overrides run/status/result to use legacy endpoints:
5
+ * - /sap/bc/adt/abapunit/testruns instead of /sap/bc/adt/abapunit/runs
6
+ * - application/xml content types instead of versioned vnd.sap.adt.api.abapunit.* types
7
+ *
8
+ * Key difference: Legacy systems return results synchronously (aunit:runResult)
9
+ * from the POST to /testruns — no run ID, no async polling needed.
10
+ */
11
+ import type { IAdtResponse as AxiosResponse, IAbapConnection, IAdtOperationOptions, ILogger } from '@mcp-abap-adt/interfaces';
12
+ import { AdtUnitTest } from './AdtUnitTest';
13
+ import type { IClassUnitTestDefinition, IClassUnitTestRunOptions, IUnitTestConfig, IUnitTestState } from './types';
14
+ export declare class AdtUnitTestLegacy extends AdtUnitTest {
15
+ constructor(connection: IAbapConnection, logger?: ILogger);
16
+ /**
17
+ * Create unit test run using legacy endpoint.
18
+ * Legacy returns results synchronously — no run ID or polling needed.
19
+ */
20
+ create(config: IUnitTestConfig, _options?: IAdtOperationOptions): Promise<IUnitTestState>;
21
+ /**
22
+ * Run unit tests — legacy returns results synchronously.
23
+ */
24
+ run(tests: IClassUnitTestDefinition[], options?: IClassUnitTestRunOptions): Promise<string>;
25
+ /**
26
+ * Get unit test status — legacy returns results synchronously,
27
+ * so this returns the cached response from create().
28
+ */
29
+ getStatus(_runId: string, _withLongPolling?: boolean): Promise<AxiosResponse>;
30
+ /**
31
+ * Get unit test result — legacy returns results synchronously,
32
+ * so this returns the cached response from create().
33
+ */
34
+ getResult(_runId: string, _options?: {
35
+ withNavigationUris?: boolean;
36
+ format?: 'abapunit' | 'junit';
37
+ }): Promise<AxiosResponse>;
38
+ /**
39
+ * Read unit test — legacy returns results synchronously,
40
+ * so this returns the cached result from create().
41
+ */
42
+ read(_config: Partial<IUnitTestConfig>, _version?: 'active' | 'inactive'): Promise<IUnitTestState | undefined>;
43
+ }
44
+ //# sourceMappingURL=AdtUnitTestLegacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdtUnitTestLegacy.d.ts","sourceRoot":"","sources":["../../../src/core/unitTest/AdtUnitTestLegacy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EACf,oBAAoB,EACpB,OAAO,EACR,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,KAAK,EACV,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,EACf,cAAc,EACf,MAAM,SAAS,CAAC;AAKjB,qBAAa,iBAAkB,SAAQ,WAAW;gBACpC,UAAU,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,OAAO;IAIzD;;;OAGG;IACY,MAAM,CACnB,MAAM,EAAE,eAAe,EACvB,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,cAAc,CAAC;IAkC1B;;OAEG;IACY,GAAG,CAChB,KAAK,EAAE,wBAAwB,EAAE,EACjC,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,MAAM,CAAC;IAKlB;;;OAGG;IACY,SAAS,CACtB,MAAM,EAAE,MAAM,EACd,gBAAgB,GAAE,OAAc,GAC/B,OAAO,CAAC,aAAa,CAAC;IASzB;;;OAGG;IACY,SAAS,CACtB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE;QAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAA;KAAE,GACzE,OAAO,CAAC,aAAa,CAAC;IASzB;;;OAGG;IACY,IAAI,CACjB,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,EACjC,QAAQ,GAAE,QAAQ,GAAG,UAAqB,GACzC,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;CAWvC"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ /**
3
+ * AdtUnitTestLegacy - Unit test operations for legacy SAP systems (BASIS < 7.50)
4
+ *
5
+ * Extends AdtUnitTest and overrides run/status/result to use legacy endpoints:
6
+ * - /sap/bc/adt/abapunit/testruns instead of /sap/bc/adt/abapunit/runs
7
+ * - application/xml content types instead of versioned vnd.sap.adt.api.abapunit.* types
8
+ *
9
+ * Key difference: Legacy systems return results synchronously (aunit:runResult)
10
+ * from the POST to /testruns — no run ID, no async polling needed.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.AdtUnitTestLegacy = void 0;
14
+ const AdtUnitTest_1 = require("./AdtUnitTest");
15
+ const runLegacy_1 = require("./runLegacy");
16
+ /** Synthetic run ID for legacy synchronous results */
17
+ const LEGACY_SYNC_RUN_ID = 'legacy-sync';
18
+ class AdtUnitTestLegacy extends AdtUnitTest_1.AdtUnitTest {
19
+ constructor(connection, logger) {
20
+ super(connection, logger);
21
+ }
22
+ /**
23
+ * Create unit test run using legacy endpoint.
24
+ * Legacy returns results synchronously — no run ID or polling needed.
25
+ */
26
+ async create(config, _options) {
27
+ if (!config.tests || config.tests.length === 0) {
28
+ throw new Error('At least one test definition is required');
29
+ }
30
+ try {
31
+ this.logger?.info?.('Starting unit test run (legacy)');
32
+ const response = await (0, runLegacy_1.startClassUnitTestRunLegacy)(this.connection, config.tests, config.options);
33
+ this.logger?.debug?.('Unit test run response status:', response.status);
34
+ // Legacy returns results synchronously — store as both status and result
35
+ this.lastStatusResponse = response;
36
+ this.lastResultResponse = response;
37
+ this.lastRunId = LEGACY_SYNC_RUN_ID;
38
+ this.logger?.info?.('Unit test run completed (legacy, synchronous)');
39
+ return {
40
+ createResult: response,
41
+ runId: LEGACY_SYNC_RUN_ID,
42
+ runResult: response.data,
43
+ errors: [],
44
+ };
45
+ }
46
+ catch (error) {
47
+ this.logger?.error('Create failed (legacy):', error);
48
+ throw error;
49
+ }
50
+ }
51
+ /**
52
+ * Run unit tests — legacy returns results synchronously.
53
+ */
54
+ async run(tests, options) {
55
+ await this.create({ tests, options });
56
+ return LEGACY_SYNC_RUN_ID;
57
+ }
58
+ /**
59
+ * Get unit test status — legacy returns results synchronously,
60
+ * so this returns the cached response from create().
61
+ */
62
+ async getStatus(_runId, _withLongPolling = true) {
63
+ if (this.lastStatusResponse) {
64
+ return this.lastStatusResponse;
65
+ }
66
+ throw new Error('No status available. Legacy systems return results synchronously via create().');
67
+ }
68
+ /**
69
+ * Get unit test result — legacy returns results synchronously,
70
+ * so this returns the cached response from create().
71
+ */
72
+ async getResult(_runId, _options) {
73
+ if (this.lastResultResponse) {
74
+ return this.lastResultResponse;
75
+ }
76
+ throw new Error('No result available. Legacy systems return results synchronously via create().');
77
+ }
78
+ /**
79
+ * Read unit test — legacy returns results synchronously,
80
+ * so this returns the cached result from create().
81
+ */
82
+ async read(_config, _version = 'active') {
83
+ if (!this.lastResultResponse) {
84
+ return undefined;
85
+ }
86
+ return {
87
+ runId: LEGACY_SYNC_RUN_ID,
88
+ runStatus: this.lastStatusResponse?.data,
89
+ runResult: this.lastResultResponse.data,
90
+ errors: [],
91
+ };
92
+ }
93
+ }
94
+ exports.AdtUnitTestLegacy = AdtUnitTestLegacy;
@@ -8,6 +8,7 @@ import type { IUnitTestConfig, IUnitTestState } from './types';
8
8
  export type { ICdsUnitTestConfig, ICdsUnitTestState } from './AdtCdsUnitTest';
9
9
  export { AdtCdsUnitTest } from './AdtCdsUnitTest';
10
10
  export { AdtUnitTest } from './AdtUnitTest';
11
+ export { AdtUnitTestLegacy } from './AdtUnitTestLegacy';
11
12
  export type { IUnitTestConfig, IUnitTestState } from './types';
12
13
  export type AdtUnitTestType = IAdtObject<IUnitTestConfig, IUnitTestState>;
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/unitTest/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE/D,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG/D,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/unitTest/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE/D,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG/D,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC"}
@@ -5,8 +5,10 @@
5
5
  * All functionality is available through Adt* classes.
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.AdtUnitTest = exports.AdtCdsUnitTest = void 0;
8
+ exports.AdtUnitTestLegacy = exports.AdtUnitTest = exports.AdtCdsUnitTest = void 0;
9
9
  var AdtCdsUnitTest_1 = require("./AdtCdsUnitTest");
10
10
  Object.defineProperty(exports, "AdtCdsUnitTest", { enumerable: true, get: function () { return AdtCdsUnitTest_1.AdtCdsUnitTest; } });
11
11
  var AdtUnitTest_1 = require("./AdtUnitTest");
12
12
  Object.defineProperty(exports, "AdtUnitTest", { enumerable: true, get: function () { return AdtUnitTest_1.AdtUnitTest; } });
13
+ var AdtUnitTestLegacy_1 = require("./AdtUnitTestLegacy");
14
+ Object.defineProperty(exports, "AdtUnitTestLegacy", { enumerable: true, get: function () { return AdtUnitTestLegacy_1.AdtUnitTestLegacy; } });
@@ -0,0 +1,25 @@
1
+ /**
2
+ * ABAP Unit test run operations for legacy systems (BASIS < 7.50)
3
+ *
4
+ * Legacy systems use:
5
+ * - /sap/bc/adt/abapunit/testruns instead of /sap/bc/adt/abapunit/runs
6
+ * - application/xml for Content-Type and Accept (not versioned vnd.sap.adt.api.abapunit.* types)
7
+ */
8
+ import type { IAdtResponse as AxiosResponse, IAbapConnection } from '@mcp-abap-adt/interfaces';
9
+ import type { IClassUnitTestDefinition, IClassUnitTestRunOptions } from './types';
10
+ /**
11
+ * Start ABAP Unit test run on legacy systems
12
+ * Uses /sap/bc/adt/abapunit/testruns endpoint with aunit:runConfiguration format
13
+ *
14
+ * Legacy format differs from modern:
15
+ * - Root element: aunit:runConfiguration (not aunit:run)
16
+ * - Namespace: http://www.sap.com/adt/aunit (not http://www.sap.com/adt/api/aunit)
17
+ * - Objects via adtcore:objectReferences with URI (not aunit:tests with containerClass/class)
18
+ * - Content-Type/Accept: application/xml (not versioned vnd.sap.adt.api.abapunit.*)
19
+ */
20
+ export declare function startClassUnitTestRunLegacy(connection: IAbapConnection, tests: IClassUnitTestDefinition[], _options?: IClassUnitTestRunOptions): Promise<AxiosResponse>;
21
+ export declare function getClassUnitTestStatusLegacy(connection: IAbapConnection, runId: string, withLongPolling?: boolean): Promise<AxiosResponse>;
22
+ export declare function getClassUnitTestResultLegacy(connection: IAbapConnection, runId: string, options?: {
23
+ withNavigationUris?: boolean;
24
+ }): Promise<AxiosResponse>;
25
+ //# sourceMappingURL=runLegacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runLegacy.d.ts","sourceRoot":"","sources":["../../../src/core/unitTest/runLegacy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,YAAY,IAAI,aAAa,EAC7B,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EACV,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAKjB;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,eAAe,EAC3B,KAAK,EAAE,wBAAwB,EAAE,EACjC,QAAQ,CAAC,EAAE,wBAAwB,GAClC,OAAO,CAAC,aAAa,CAAC,CAmCxB;AAED,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,eAAe,EAC3B,KAAK,EAAE,MAAM,EACb,eAAe,GAAE,OAAc,GAC9B,OAAO,CAAC,aAAa,CAAC,CAaxB;AAED,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,eAAe,EAC3B,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,GACzC,OAAO,CAAC,aAAa,CAAC,CAkBxB"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * ABAP Unit test run operations for legacy systems (BASIS < 7.50)
4
+ *
5
+ * Legacy systems use:
6
+ * - /sap/bc/adt/abapunit/testruns instead of /sap/bc/adt/abapunit/runs
7
+ * - application/xml for Content-Type and Accept (not versioned vnd.sap.adt.api.abapunit.* types)
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.startClassUnitTestRunLegacy = startClassUnitTestRunLegacy;
11
+ exports.getClassUnitTestStatusLegacy = getClassUnitTestStatusLegacy;
12
+ exports.getClassUnitTestResultLegacy = getClassUnitTestResultLegacy;
13
+ const internalUtils_1 = require("../../utils/internalUtils");
14
+ const timeouts_1 = require("../../utils/timeouts");
15
+ const CT_XML = 'application/xml';
16
+ const ACCEPT_XML = 'application/xml';
17
+ /**
18
+ * Start ABAP Unit test run on legacy systems
19
+ * Uses /sap/bc/adt/abapunit/testruns endpoint with aunit:runConfiguration format
20
+ *
21
+ * Legacy format differs from modern:
22
+ * - Root element: aunit:runConfiguration (not aunit:run)
23
+ * - Namespace: http://www.sap.com/adt/aunit (not http://www.sap.com/adt/api/aunit)
24
+ * - Objects via adtcore:objectReferences with URI (not aunit:tests with containerClass/class)
25
+ * - Content-Type/Accept: application/xml (not versioned vnd.sap.adt.api.abapunit.*)
26
+ */
27
+ async function startClassUnitTestRunLegacy(connection, tests, _options) {
28
+ if (!tests.length) {
29
+ throw new Error('At least one test definition is required');
30
+ }
31
+ const objectRefs = tests
32
+ .map((test) => {
33
+ const className = (0, internalUtils_1.encodeSapObjectName)(test.containerClass).toLowerCase();
34
+ return ` <adtcore:objectReference adtcore:uri="/sap/bc/adt/oo/classes/${className}"/>`;
35
+ })
36
+ .join('\n');
37
+ const xml = `<?xml version="1.0" encoding="UTF-8"?><aunit:runConfiguration xmlns:aunit="http://www.sap.com/adt/aunit">
38
+ <external>
39
+ <coverage active="false"/>
40
+ </external>
41
+ <adtcore:objectSets xmlns:adtcore="http://www.sap.com/adt/core">
42
+ <objectSet kind="inclusive">
43
+ <adtcore:objectReferences>
44
+ ${objectRefs}
45
+ </adtcore:objectReferences>
46
+ </objectSet>
47
+ </adtcore:objectSets>
48
+ </aunit:runConfiguration>`;
49
+ return connection.makeAdtRequest({
50
+ url: '/sap/bc/adt/abapunit/testruns',
51
+ method: 'POST',
52
+ timeout: (0, timeouts_1.getTimeout)('default'),
53
+ data: xml,
54
+ headers: {
55
+ 'Content-Type': CT_XML,
56
+ Accept: ACCEPT_XML,
57
+ },
58
+ });
59
+ }
60
+ async function getClassUnitTestStatusLegacy(connection, runId, withLongPolling = true) {
61
+ if (!runId) {
62
+ throw new Error('runId is required');
63
+ }
64
+ const query = withLongPolling ? '?withLongPolling=true' : '';
65
+ return connection.makeAdtRequest({
66
+ url: `/sap/bc/adt/abapunit/testruns/${runId}${query}`,
67
+ method: 'GET',
68
+ timeout: (0, timeouts_1.getTimeout)('default'),
69
+ headers: {
70
+ Accept: ACCEPT_XML,
71
+ },
72
+ });
73
+ }
74
+ async function getClassUnitTestResultLegacy(connection, runId, options) {
75
+ if (!runId) {
76
+ throw new Error('runId is required');
77
+ }
78
+ const params = [];
79
+ if (options?.withNavigationUris === false) {
80
+ params.push('withNavigationUris=false');
81
+ }
82
+ const query = params.length ? `?${params.join('&')}` : '';
83
+ return connection.makeAdtRequest({
84
+ url: `/sap/bc/adt/abapunit/testruns/${runId}/results${query}`,
85
+ method: 'GET',
86
+ timeout: (0, timeouts_1.getTimeout)('default'),
87
+ headers: {
88
+ Accept: ACCEPT_XML,
89
+ },
90
+ });
91
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/adt-clients",
3
- "version": "3.5.0",
3
+ "version": "3.7.0",
4
4
  "description": "ADT clients for SAP ABAP systems - AdtClient and AdtRuntimeClient",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",