playwright-api-logger 2.1.0 → 2.2.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.
- package/dist/LoggerRegistry.d.ts +59 -0
- package/dist/LoggerRegistry.d.ts.map +1 -0
- package/dist/LoggerRegistry.js +80 -0
- package/dist/LoggerRegistry.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/withApiLogging.d.ts +9 -10
- package/dist/withApiLogging.d.ts.map +1 -1
- package/dist/withApiLogging.js +24 -11
- package/dist/withApiLogging.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global registry for sharing ApiLogger instances across
|
|
3
|
+
* beforeAll / test / afterAll in a Playwright test.describe block.
|
|
4
|
+
*
|
|
5
|
+
* Solves the problem: Playwright creates separate fixture instances
|
|
6
|
+
* for beforeAll, each test(), and afterAll — without a shared store
|
|
7
|
+
* each gets its own logger and writes a separate file.
|
|
8
|
+
*
|
|
9
|
+
* With LoggerRegistry, all phases write to the SAME structured log.
|
|
10
|
+
*/
|
|
11
|
+
import { ApiLogger } from './ApiLogger';
|
|
12
|
+
import { LoggerConfig } from './types';
|
|
13
|
+
/**
|
|
14
|
+
* Get or create a shared logger by key.
|
|
15
|
+
* First call creates the logger, subsequent calls return the same instance.
|
|
16
|
+
*
|
|
17
|
+
* @param key - Unique key for the logger (e.g. describe block name)
|
|
18
|
+
* @param config - Logger config (only used on first call when creating)
|
|
19
|
+
* @returns Shared ApiLogger instance
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* test.describe('GET /api/v1/employees', () => {
|
|
23
|
+
* const LOG_KEY = 'get-employees';
|
|
24
|
+
*
|
|
25
|
+
* test.beforeAll(async ({ apiClient }) => {
|
|
26
|
+
* const logger = getSharedLogger(LOG_KEY, { testName: 'GET employees' });
|
|
27
|
+
* logger.startPreconditions();
|
|
28
|
+
* // ... apiClient calls logged to preconditions
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* test('should return 200', async ({ apiClient }) => {
|
|
32
|
+
* const logger = getSharedLogger(LOG_KEY);
|
|
33
|
+
* logger.startTest();
|
|
34
|
+
* // ... apiClient calls logged to steps
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* test.afterAll(() => {
|
|
38
|
+
* finalizeSharedLogger(LOG_KEY, 'PASSED');
|
|
39
|
+
* });
|
|
40
|
+
* });
|
|
41
|
+
*/
|
|
42
|
+
export declare function getSharedLogger(key: string, config?: LoggerConfig): ApiLogger;
|
|
43
|
+
/**
|
|
44
|
+
* Finalize a shared logger: write the structured document and remove from registry.
|
|
45
|
+
*
|
|
46
|
+
* @param key - The logger key used in getSharedLogger()
|
|
47
|
+
* @param result - Test result: 'PASSED' | 'FAILED' | 'SKIPPED'
|
|
48
|
+
* @param additionalInfo - Optional extra info to include
|
|
49
|
+
*/
|
|
50
|
+
export declare function finalizeSharedLogger(key: string, result: 'PASSED' | 'FAILED' | 'SKIPPED', additionalInfo?: Record<string, any>): void;
|
|
51
|
+
/**
|
|
52
|
+
* Check if a shared logger exists for the given key.
|
|
53
|
+
*/
|
|
54
|
+
export declare function hasSharedLogger(key: string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Remove a shared logger without finalizing (cleanup).
|
|
57
|
+
*/
|
|
58
|
+
export declare function removeSharedLogger(key: string): void;
|
|
59
|
+
//# sourceMappingURL=LoggerRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoggerRegistry.d.ts","sourceRoot":"","sources":["../src/LoggerRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAK7E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,EACvC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACnC,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEpD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Global registry for sharing ApiLogger instances across
|
|
4
|
+
* beforeAll / test / afterAll in a Playwright test.describe block.
|
|
5
|
+
*
|
|
6
|
+
* Solves the problem: Playwright creates separate fixture instances
|
|
7
|
+
* for beforeAll, each test(), and afterAll — without a shared store
|
|
8
|
+
* each gets its own logger and writes a separate file.
|
|
9
|
+
*
|
|
10
|
+
* With LoggerRegistry, all phases write to the SAME structured log.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.getSharedLogger = getSharedLogger;
|
|
14
|
+
exports.finalizeSharedLogger = finalizeSharedLogger;
|
|
15
|
+
exports.hasSharedLogger = hasSharedLogger;
|
|
16
|
+
exports.removeSharedLogger = removeSharedLogger;
|
|
17
|
+
const ApiLogger_1 = require("./ApiLogger");
|
|
18
|
+
const registry = new Map();
|
|
19
|
+
/**
|
|
20
|
+
* Get or create a shared logger by key.
|
|
21
|
+
* First call creates the logger, subsequent calls return the same instance.
|
|
22
|
+
*
|
|
23
|
+
* @param key - Unique key for the logger (e.g. describe block name)
|
|
24
|
+
* @param config - Logger config (only used on first call when creating)
|
|
25
|
+
* @returns Shared ApiLogger instance
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* test.describe('GET /api/v1/employees', () => {
|
|
29
|
+
* const LOG_KEY = 'get-employees';
|
|
30
|
+
*
|
|
31
|
+
* test.beforeAll(async ({ apiClient }) => {
|
|
32
|
+
* const logger = getSharedLogger(LOG_KEY, { testName: 'GET employees' });
|
|
33
|
+
* logger.startPreconditions();
|
|
34
|
+
* // ... apiClient calls logged to preconditions
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* test('should return 200', async ({ apiClient }) => {
|
|
38
|
+
* const logger = getSharedLogger(LOG_KEY);
|
|
39
|
+
* logger.startTest();
|
|
40
|
+
* // ... apiClient calls logged to steps
|
|
41
|
+
* });
|
|
42
|
+
*
|
|
43
|
+
* test.afterAll(() => {
|
|
44
|
+
* finalizeSharedLogger(LOG_KEY, 'PASSED');
|
|
45
|
+
* });
|
|
46
|
+
* });
|
|
47
|
+
*/
|
|
48
|
+
function getSharedLogger(key, config) {
|
|
49
|
+
if (!registry.has(key)) {
|
|
50
|
+
registry.set(key, new ApiLogger_1.ApiLogger(config));
|
|
51
|
+
}
|
|
52
|
+
return registry.get(key);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Finalize a shared logger: write the structured document and remove from registry.
|
|
56
|
+
*
|
|
57
|
+
* @param key - The logger key used in getSharedLogger()
|
|
58
|
+
* @param result - Test result: 'PASSED' | 'FAILED' | 'SKIPPED'
|
|
59
|
+
* @param additionalInfo - Optional extra info to include
|
|
60
|
+
*/
|
|
61
|
+
function finalizeSharedLogger(key, result, additionalInfo) {
|
|
62
|
+
const logger = registry.get(key);
|
|
63
|
+
if (logger) {
|
|
64
|
+
logger.finalize(result, additionalInfo);
|
|
65
|
+
registry.delete(key);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if a shared logger exists for the given key.
|
|
70
|
+
*/
|
|
71
|
+
function hasSharedLogger(key) {
|
|
72
|
+
return registry.has(key);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Remove a shared logger without finalizing (cleanup).
|
|
76
|
+
*/
|
|
77
|
+
function removeSharedLogger(key) {
|
|
78
|
+
registry.delete(key);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=LoggerRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoggerRegistry.js","sourceRoot":"","sources":["../src/LoggerRegistry.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAoCH,0CAKC;AASD,oDAUC;AAKD,0CAEC;AAKD,gDAEC;AAxED,2CAAwC;AAGxC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAqB,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,SAAgB,eAAe,CAAC,GAAW,EAAE,MAAqB;IAChE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,qBAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAClC,GAAW,EACX,MAAuC,EACvC,cAAoC;IAEpC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACxC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,GAAW;IACzC,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,GAAW;IAC5C,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { ApiLogger, createApiLogger, createSetupLogger, createTeardownLogger } from './ApiLogger';
|
|
2
2
|
export { CurlGenerator } from './CurlGenerator';
|
|
3
3
|
export { withApiLogging } from './withApiLogging';
|
|
4
|
+
export { getSharedLogger, finalizeSharedLogger, hasSharedLogger, removeSharedLogger } from './LoggerRegistry';
|
|
4
5
|
export type { ApiLoggingOptions } from './withApiLogging';
|
|
5
6
|
export type { LoggerConfig, RequestLogData, ResponseLogData, StepLogEntry, TestLogDocument, LogEntry, LogContext, } from './types';
|
|
6
7
|
export type { RequestData } from './CurlGenerator';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,YAAY,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC9G,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,YAAY,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withApiLogging = exports.CurlGenerator = exports.createTeardownLogger = exports.createSetupLogger = exports.createApiLogger = exports.ApiLogger = void 0;
|
|
3
|
+
exports.removeSharedLogger = exports.hasSharedLogger = exports.finalizeSharedLogger = exports.getSharedLogger = exports.withApiLogging = exports.CurlGenerator = exports.createTeardownLogger = exports.createSetupLogger = exports.createApiLogger = exports.ApiLogger = void 0;
|
|
4
4
|
var ApiLogger_1 = require("./ApiLogger");
|
|
5
5
|
Object.defineProperty(exports, "ApiLogger", { enumerable: true, get: function () { return ApiLogger_1.ApiLogger; } });
|
|
6
6
|
Object.defineProperty(exports, "createApiLogger", { enumerable: true, get: function () { return ApiLogger_1.createApiLogger; } });
|
|
@@ -10,4 +10,9 @@ var CurlGenerator_1 = require("./CurlGenerator");
|
|
|
10
10
|
Object.defineProperty(exports, "CurlGenerator", { enumerable: true, get: function () { return CurlGenerator_1.CurlGenerator; } });
|
|
11
11
|
var withApiLogging_1 = require("./withApiLogging");
|
|
12
12
|
Object.defineProperty(exports, "withApiLogging", { enumerable: true, get: function () { return withApiLogging_1.withApiLogging; } });
|
|
13
|
+
var LoggerRegistry_1 = require("./LoggerRegistry");
|
|
14
|
+
Object.defineProperty(exports, "getSharedLogger", { enumerable: true, get: function () { return LoggerRegistry_1.getSharedLogger; } });
|
|
15
|
+
Object.defineProperty(exports, "finalizeSharedLogger", { enumerable: true, get: function () { return LoggerRegistry_1.finalizeSharedLogger; } });
|
|
16
|
+
Object.defineProperty(exports, "hasSharedLogger", { enumerable: true, get: function () { return LoggerRegistry_1.hasSharedLogger; } });
|
|
17
|
+
Object.defineProperty(exports, "removeSharedLogger", { enumerable: true, get: function () { return LoggerRegistry_1.removeSharedLogger; } });
|
|
13
18
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAkG;AAAzF,sGAAA,SAAS,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,iHAAA,oBAAoB,OAAA;AAC5E,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAAkG;AAAzF,sGAAA,SAAS,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,iHAAA,oBAAoB,OAAA;AAC5E,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,mDAA8G;AAArG,iHAAA,eAAe,OAAA;AAAE,sHAAA,oBAAoB,OAAA;AAAE,iHAAA,eAAe,OAAA;AAAE,oHAAA,kBAAkB,OAAA"}
|
package/dist/withApiLogging.d.ts
CHANGED
|
@@ -16,8 +16,10 @@ export interface ApiLoggingOptions {
|
|
|
16
16
|
logDirectory?: string;
|
|
17
17
|
/** Mask Authorization headers (default: true) */
|
|
18
18
|
maskAuthTokens?: boolean;
|
|
19
|
-
/** Existing logger to
|
|
19
|
+
/** Existing logger instance to reuse */
|
|
20
20
|
logger?: ApiLogger;
|
|
21
|
+
/** Shared logger key — use same key in beforeAll/test/afterAll to write ONE log file */
|
|
22
|
+
sharedKey?: string;
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* Wrap Playwright's APIRequestContext with automatic logging.
|
|
@@ -33,15 +35,12 @@ export interface ApiLoggingOptions {
|
|
|
33
35
|
* const apiClient = new ApiClient(loggedRequest);
|
|
34
36
|
*
|
|
35
37
|
* @example
|
|
36
|
-
* //
|
|
37
|
-
* const loggedRequest = withApiLogging(request,
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* loggedRequest.__logger.describe('Try to access without token');
|
|
43
|
-
* await apiClient.getWithoutAuth();
|
|
44
|
-
* loggedRequest.__logger.finalize('PASSED');
|
|
38
|
+
* // Shared logger across beforeAll/test/afterAll:
|
|
39
|
+
* const loggedRequest = withApiLogging(request, {
|
|
40
|
+
* sharedKey: 'my-describe',
|
|
41
|
+
* testName: 'My Test',
|
|
42
|
+
* context: 'preconditions'
|
|
43
|
+
* });
|
|
45
44
|
*/
|
|
46
45
|
export declare function withApiLogging(request: APIRequestContext, testInfoOrOptions?: TestInfo | ApiLoggingOptions): APIRequestContext & {
|
|
47
46
|
__logger: ApiLogger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withApiLogging.d.ts","sourceRoot":"","sources":["../src/withApiLogging.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAe,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAgB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"withApiLogging.d.ts","sourceRoot":"","sources":["../src/withApiLogging.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAe,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAgB,MAAM,SAAS,CAAC;AAGnD,MAAM,WAAW,iBAAiB;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wCAAwC;IACxC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,iBAAiB,EAC1B,iBAAiB,CAAC,EAAE,QAAQ,GAAG,iBAAiB,GAC/C,iBAAiB,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAiH7C"}
|
package/dist/withApiLogging.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.withApiLogging = withApiLogging;
|
|
8
8
|
const ApiLogger_1 = require("./ApiLogger");
|
|
9
|
+
const LoggerRegistry_1 = require("./LoggerRegistry");
|
|
9
10
|
/**
|
|
10
11
|
* Wrap Playwright's APIRequestContext with automatic logging.
|
|
11
12
|
* All HTTP calls (get, post, put, patch, delete, head, fetch) are intercepted and logged.
|
|
@@ -20,15 +21,12 @@ const ApiLogger_1 = require("./ApiLogger");
|
|
|
20
21
|
* const apiClient = new ApiClient(loggedRequest);
|
|
21
22
|
*
|
|
22
23
|
* @example
|
|
23
|
-
* //
|
|
24
|
-
* const loggedRequest = withApiLogging(request,
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* loggedRequest.__logger.describe('Try to access without token');
|
|
30
|
-
* await apiClient.getWithoutAuth();
|
|
31
|
-
* loggedRequest.__logger.finalize('PASSED');
|
|
24
|
+
* // Shared logger across beforeAll/test/afterAll:
|
|
25
|
+
* const loggedRequest = withApiLogging(request, {
|
|
26
|
+
* sharedKey: 'my-describe',
|
|
27
|
+
* testName: 'My Test',
|
|
28
|
+
* context: 'preconditions'
|
|
29
|
+
* });
|
|
32
30
|
*/
|
|
33
31
|
function withApiLogging(request, testInfoOrOptions) {
|
|
34
32
|
let options;
|
|
@@ -43,9 +41,24 @@ function withApiLogging(request, testInfoOrOptions) {
|
|
|
43
41
|
else {
|
|
44
42
|
options = testInfoOrOptions || {};
|
|
45
43
|
}
|
|
46
|
-
//
|
|
44
|
+
// Resolve logger: shared → existing → new
|
|
47
45
|
let logger;
|
|
48
|
-
if (options.
|
|
46
|
+
if (options.sharedKey) {
|
|
47
|
+
// Shared logger by key — same instance across beforeAll/test/afterAll
|
|
48
|
+
const config = {
|
|
49
|
+
testName: options.testName,
|
|
50
|
+
testFile: options.testFile,
|
|
51
|
+
context: options.context || 'test',
|
|
52
|
+
logDirectory: options.logDirectory,
|
|
53
|
+
maskAuthTokens: options.maskAuthTokens,
|
|
54
|
+
};
|
|
55
|
+
logger = (0, LoggerRegistry_1.getSharedLogger)(options.sharedKey, config);
|
|
56
|
+
// Switch context for this phase
|
|
57
|
+
if (options.context) {
|
|
58
|
+
logger.setContext(options.context);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else if (options.logger) {
|
|
49
62
|
logger = options.logger;
|
|
50
63
|
if (options.context) {
|
|
51
64
|
logger.setContext(options.context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withApiLogging.js","sourceRoot":"","sources":["../src/withApiLogging.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA6CH,
|
|
1
|
+
{"version":3,"file":"withApiLogging.js","sourceRoot":"","sources":["../src/withApiLogging.ts"],"names":[],"mappings":"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"}
|