@nouhouari/conductor-e2e 0.0.0-stage → 0.1.8
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/CHANGELOG.md +228 -0
- package/LICENSE +21 -0
- package/README.md +138 -2
- package/config/environments/default.ts +41 -0
- package/config/environments/dev.ts +16 -0
- package/config/environments/staging.ts +15 -0
- package/config/index.ts +70 -0
- package/config/types.ts +94 -0
- package/dist/config/environments/default.d.ts +3 -0
- package/dist/config/environments/default.d.ts.map +1 -0
- package/dist/config/environments/default.js +40 -0
- package/dist/config/environments/default.js.map +1 -0
- package/dist/config/environments/dev.d.ts +3 -0
- package/dist/config/environments/dev.d.ts.map +1 -0
- package/dist/config/environments/dev.js +18 -0
- package/dist/config/environments/dev.js.map +1 -0
- package/dist/config/environments/staging.d.ts +3 -0
- package/dist/config/environments/staging.d.ts.map +1 -0
- package/dist/config/environments/staging.js +17 -0
- package/dist/config/environments/staging.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +81 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +93 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +3 -0
- package/dist/config/types.js.map +1 -0
- package/dist/src/drivers/ApiDriver.d.ts +16 -0
- package/dist/src/drivers/ApiDriver.d.ts.map +1 -0
- package/dist/src/drivers/ApiDriver.js +48 -0
- package/dist/src/drivers/ApiDriver.js.map +1 -0
- package/dist/src/drivers/DatabaseDriver.d.ts +12 -0
- package/dist/src/drivers/DatabaseDriver.d.ts.map +1 -0
- package/dist/src/drivers/DatabaseDriver.js +15 -0
- package/dist/src/drivers/DatabaseDriver.js.map +1 -0
- package/dist/src/drivers/FlutterDesktopDriver.d.ts +139 -0
- package/dist/src/drivers/FlutterDesktopDriver.d.ts.map +1 -0
- package/dist/src/drivers/FlutterDesktopDriver.js +445 -0
- package/dist/src/drivers/FlutterDesktopDriver.js.map +1 -0
- package/dist/src/drivers/MaestroDriver.d.ts +19 -0
- package/dist/src/drivers/MaestroDriver.d.ts.map +1 -0
- package/dist/src/drivers/MaestroDriver.js +144 -0
- package/dist/src/drivers/MaestroDriver.js.map +1 -0
- package/dist/src/drivers/WebDriver.d.ts +21 -0
- package/dist/src/drivers/WebDriver.d.ts.map +1 -0
- package/dist/src/drivers/WebDriver.js +57 -0
- package/dist/src/drivers/WebDriver.js.map +1 -0
- package/dist/src/hooks/browser.hooks.d.ts +2 -0
- package/dist/src/hooks/browser.hooks.d.ts.map +1 -0
- package/dist/src/hooks/browser.hooks.js +15 -0
- package/dist/src/hooks/browser.hooks.js.map +1 -0
- package/dist/src/hooks/database.hooks.d.ts +2 -0
- package/dist/src/hooks/database.hooks.d.ts.map +1 -0
- package/dist/src/hooks/database.hooks.js +11 -0
- package/dist/src/hooks/database.hooks.js.map +1 -0
- package/dist/src/hooks/desktop.hooks.d.ts +2 -0
- package/dist/src/hooks/desktop.hooks.d.ts.map +1 -0
- package/dist/src/hooks/desktop.hooks.js +15 -0
- package/dist/src/hooks/desktop.hooks.js.map +1 -0
- package/dist/src/hooks/flutterDesktop.hooks.d.ts +2 -0
- package/dist/src/hooks/flutterDesktop.hooks.d.ts.map +1 -0
- package/dist/src/hooks/flutterDesktop.hooks.js +26 -0
- package/dist/src/hooks/flutterDesktop.hooks.js.map +1 -0
- package/dist/src/hooks/index.d.ts +6 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/index.js +25 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/hooks/maestro.hooks.d.ts +2 -0
- package/dist/src/hooks/maestro.hooks.d.ts.map +1 -0
- package/dist/src/hooks/maestro.hooks.js +8 -0
- package/dist/src/hooks/maestro.hooks.js.map +1 -0
- package/dist/src/index.d.ts +21 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +30 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/pages/BasePage.d.ts +11 -0
- package/dist/src/pages/BasePage.d.ts.map +1 -0
- package/dist/src/pages/BasePage.js +22 -0
- package/dist/src/pages/BasePage.js.map +1 -0
- package/dist/src/scenarios/RemoteScenarioFetcher.d.ts +51 -0
- package/dist/src/scenarios/RemoteScenarioFetcher.d.ts.map +1 -0
- package/dist/src/scenarios/RemoteScenarioFetcher.js +162 -0
- package/dist/src/scenarios/RemoteScenarioFetcher.js.map +1 -0
- package/dist/src/scenarios/cli.d.ts +3 -0
- package/dist/src/scenarios/cli.d.ts.map +1 -0
- package/dist/src/scenarios/cli.js +26 -0
- package/dist/src/scenarios/cli.js.map +1 -0
- package/dist/src/support/logger.d.ts +3 -0
- package/dist/src/support/logger.d.ts.map +1 -0
- package/dist/src/support/logger.js +16 -0
- package/dist/src/support/logger.js.map +1 -0
- package/dist/src/support/retry.d.ts +7 -0
- package/dist/src/support/retry.d.ts.map +1 -0
- package/dist/src/support/retry.js +21 -0
- package/dist/src/support/retry.js.map +1 -0
- package/dist/src/world/ConductorWorld.d.ts +39 -0
- package/dist/src/world/ConductorWorld.d.ts.map +1 -0
- package/dist/src/world/ConductorWorld.js +112 -0
- package/dist/src/world/ConductorWorld.js.map +1 -0
- package/package.json +81 -4
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const config_1 = require("../../config");
|
|
5
|
+
const RemoteScenarioFetcher_1 = require("./RemoteScenarioFetcher");
|
|
6
|
+
/**
|
|
7
|
+
* Prefetch step for the `remote` cucumber profile: fetch scenarios from the requ
|
|
8
|
+
* scenario API and reconstruct them into `.feature` files, then exit. Run before
|
|
9
|
+
* `cucumber-js --profile remote`.
|
|
10
|
+
*/
|
|
11
|
+
async function main() {
|
|
12
|
+
const remote = config_1.config.remoteScenarios;
|
|
13
|
+
if (!remote) {
|
|
14
|
+
throw new Error('No `remoteScenarios` config found. Configure it in config/environments or via REMOTE_SCENARIOS_* env vars.');
|
|
15
|
+
}
|
|
16
|
+
const where = remote.project ? ` (project: ${remote.project})` : '';
|
|
17
|
+
console.log(`Fetching scenarios from ${remote.baseUrl}${where} ...`);
|
|
18
|
+
const scenarios = await (0, RemoteScenarioFetcher_1.fetchScenarios)(remote);
|
|
19
|
+
const result = await (0, RemoteScenarioFetcher_1.reconstructFeatureFiles)(scenarios, remote.outputDir);
|
|
20
|
+
console.log(`Wrote ${result.scenarios} scenario(s) across ${result.features} feature file(s) to ${result.dir}`);
|
|
21
|
+
}
|
|
22
|
+
main().catch((err) => {
|
|
23
|
+
console.error(`fetch-features failed: ${err.message}`);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/scenarios/cli.ts"],"names":[],"mappings":";;;AACA,yCAAsC;AACtC,mEAAkF;AAElF;;;;GAIG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,eAAM,CAAC,eAAe,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,OAAO,GAAG,KAAK,MAAM,CAAC,CAAC;IAErE,MAAM,SAAS,GAAG,MAAM,IAAA,sCAAc,EAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,IAAA,+CAAuB,EAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAE1E,OAAO,CAAC,GAAG,CACT,SAAS,MAAM,CAAC,SAAS,uBAAuB,MAAM,CAAC,QAAQ,uBAAuB,MAAM,CAAC,GAAG,EAAE,CACnG,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,0BAA2B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/support/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,+BAOxC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createLogger = createLogger;
|
|
7
|
+
const pino_1 = __importDefault(require("pino"));
|
|
8
|
+
function createLogger(name) {
|
|
9
|
+
const isDev = process.env.NODE_ENV !== 'production';
|
|
10
|
+
return (0, pino_1.default)({
|
|
11
|
+
name,
|
|
12
|
+
level: process.env.LOG_LEVEL ?? 'info',
|
|
13
|
+
transport: isDev ? { target: 'pino-pretty', options: { colorize: true } } : undefined
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/support/logger.ts"],"names":[],"mappings":";;;;;AAEA,oCAOC;AATD,gDAAwB;AAExB,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IACpD,OAAO,IAAA,cAAI,EAAC;QACV,IAAI;QACJ,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;QACtC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;KACtF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../src/support/retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,GAAG,aAAa,CAAC;CACnC;AAED,wBAAsB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAiBxF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.retry = retry;
|
|
4
|
+
async function retry(fn, opts = {}) {
|
|
5
|
+
const { attempts = 3, delayMs = 1000, backoff = 'fixed' } = opts;
|
|
6
|
+
let lastError;
|
|
7
|
+
for (let i = 0; i < attempts; i++) {
|
|
8
|
+
try {
|
|
9
|
+
return await fn();
|
|
10
|
+
}
|
|
11
|
+
catch (err) {
|
|
12
|
+
lastError = err;
|
|
13
|
+
if (i < attempts - 1) {
|
|
14
|
+
const wait = backoff === 'exponential' ? delayMs * 2 ** i : delayMs;
|
|
15
|
+
await new Promise((r) => setTimeout(r, wait));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
throw lastError;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/support/retry.ts"],"names":[],"mappings":";;AAMA,sBAiBC;AAjBM,KAAK,UAAU,KAAK,CAAI,EAAoB,EAAE,OAAqB,EAAE;IAC1E,MAAM,EAAE,QAAQ,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IACjE,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAG,CAAC;YAChB,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACpE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { IWorldOptions, World } from '@cucumber/cucumber';
|
|
2
|
+
import { Page, APIRequestContext } from 'playwright';
|
|
3
|
+
import type { EnvironmentConfig } from '../../config/types';
|
|
4
|
+
import { WebDriver } from '../drivers/WebDriver';
|
|
5
|
+
import { ApiDriver } from '../drivers/ApiDriver';
|
|
6
|
+
import { MaestroDriver } from '../drivers/MaestroDriver';
|
|
7
|
+
import { DatabaseDriver } from '../drivers/DatabaseDriver';
|
|
8
|
+
import { JavaFxDriver } from 'javafx-driver';
|
|
9
|
+
import { FlutterDesktopDriver } from '../drivers/FlutterDesktopDriver';
|
|
10
|
+
export declare class ConductorWorld extends World {
|
|
11
|
+
readonly config: EnvironmentConfig;
|
|
12
|
+
readonly logger: import("pino").Logger<never, boolean>;
|
|
13
|
+
readonly data: Record<string, unknown>;
|
|
14
|
+
private _webDriver;
|
|
15
|
+
private _apiDriver;
|
|
16
|
+
private _maestroDriver;
|
|
17
|
+
private _dbDriver;
|
|
18
|
+
private _fxDriver;
|
|
19
|
+
private _flutterDesktopDriver;
|
|
20
|
+
constructor(options: IWorldOptions);
|
|
21
|
+
get web(): WebDriver;
|
|
22
|
+
get page(): Page;
|
|
23
|
+
get api(): ApiDriver;
|
|
24
|
+
get request(): APIRequestContext;
|
|
25
|
+
get maestro(): MaestroDriver;
|
|
26
|
+
get fx(): JavaFxDriver;
|
|
27
|
+
get isFxLaunched(): boolean;
|
|
28
|
+
closeFx(): Promise<void>;
|
|
29
|
+
get flutterDesktop(): FlutterDesktopDriver;
|
|
30
|
+
get isFlutterDesktopLaunched(): boolean;
|
|
31
|
+
closeFlutterDesktop(): Promise<void>;
|
|
32
|
+
setDb(driver: DatabaseDriver): void;
|
|
33
|
+
get db(): DatabaseDriver;
|
|
34
|
+
get hasDb(): boolean;
|
|
35
|
+
closeWeb(): Promise<void>;
|
|
36
|
+
disposeApi(): Promise<void>;
|
|
37
|
+
disconnectDb(): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=ConductorWorld.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConductorWorld.d.ts","sourceRoot":"","sources":["../../../src/world/ConductorWorld.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAGvE,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAU;IAC5C,QAAQ,CAAC,MAAM,wCAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAE5C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,qBAAqB,CAAqC;gBAEtD,OAAO,EAAE,aAAa;IAMlC,IAAI,GAAG,IAAI,SAAS,CAGnB;IAED,IAAI,IAAI,IAAI,IAAI,CAEf;IAID,IAAI,GAAG,IAAI,SAAS,CAGnB;IAED,IAAI,OAAO,IAAI,iBAAiB,CAE/B;IAID,IAAI,OAAO,IAAI,aAAa,CAG3B;IAID,IAAI,EAAE,IAAI,YAAY,CAQrB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,IAAI,cAAc,IAAI,oBAAoB,CAQzC;IAED,IAAI,wBAAwB,IAAI,OAAO,CAEtC;IAEK,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAO1C,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAInC,IAAI,EAAE,IAAI,cAAc,CAGvB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAIK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CAMpC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConductorWorld = void 0;
|
|
4
|
+
const cucumber_1 = require("@cucumber/cucumber");
|
|
5
|
+
const config_1 = require("../../config");
|
|
6
|
+
const WebDriver_1 = require("../drivers/WebDriver");
|
|
7
|
+
const ApiDriver_1 = require("../drivers/ApiDriver");
|
|
8
|
+
const MaestroDriver_1 = require("../drivers/MaestroDriver");
|
|
9
|
+
const javafx_driver_1 = require("javafx-driver");
|
|
10
|
+
const FlutterDesktopDriver_1 = require("../drivers/FlutterDesktopDriver");
|
|
11
|
+
const logger_1 = require("../support/logger");
|
|
12
|
+
class ConductorWorld extends cucumber_1.World {
|
|
13
|
+
config = config_1.config;
|
|
14
|
+
logger = (0, logger_1.createLogger)('conductor');
|
|
15
|
+
data = {};
|
|
16
|
+
_webDriver = null;
|
|
17
|
+
_apiDriver = null;
|
|
18
|
+
_maestroDriver = null;
|
|
19
|
+
_dbDriver = null;
|
|
20
|
+
_fxDriver = null;
|
|
21
|
+
_flutterDesktopDriver = null;
|
|
22
|
+
constructor(options) {
|
|
23
|
+
super(options);
|
|
24
|
+
}
|
|
25
|
+
// Web
|
|
26
|
+
get web() {
|
|
27
|
+
if (!this._webDriver)
|
|
28
|
+
this._webDriver = new WebDriver_1.WebDriver(this.config);
|
|
29
|
+
return this._webDriver;
|
|
30
|
+
}
|
|
31
|
+
get page() {
|
|
32
|
+
return this.web.page;
|
|
33
|
+
}
|
|
34
|
+
// API
|
|
35
|
+
get api() {
|
|
36
|
+
if (!this._apiDriver)
|
|
37
|
+
this._apiDriver = new ApiDriver_1.ApiDriver(this.config);
|
|
38
|
+
return this._apiDriver;
|
|
39
|
+
}
|
|
40
|
+
get request() {
|
|
41
|
+
return this.api.client;
|
|
42
|
+
}
|
|
43
|
+
// Mobile
|
|
44
|
+
get maestro() {
|
|
45
|
+
if (!this._maestroDriver)
|
|
46
|
+
this._maestroDriver = new MaestroDriver_1.MaestroDriver(this.config);
|
|
47
|
+
return this._maestroDriver;
|
|
48
|
+
}
|
|
49
|
+
// Desktop (JavaFX)
|
|
50
|
+
get fx() {
|
|
51
|
+
if (!this._fxDriver) {
|
|
52
|
+
if (!this.config.desktop) {
|
|
53
|
+
throw new Error('No desktop config. Set config.desktop with DesktopConfig.');
|
|
54
|
+
}
|
|
55
|
+
this._fxDriver = new javafx_driver_1.JavaFxDriver(this.config.desktop);
|
|
56
|
+
}
|
|
57
|
+
return this._fxDriver;
|
|
58
|
+
}
|
|
59
|
+
get isFxLaunched() {
|
|
60
|
+
return this._fxDriver?.isLaunched ?? false;
|
|
61
|
+
}
|
|
62
|
+
async closeFx() {
|
|
63
|
+
await this._fxDriver?.close();
|
|
64
|
+
this._fxDriver = null;
|
|
65
|
+
}
|
|
66
|
+
// Desktop (Flutter)
|
|
67
|
+
get flutterDesktop() {
|
|
68
|
+
if (!this._flutterDesktopDriver) {
|
|
69
|
+
if (!this.config.flutterDesktop) {
|
|
70
|
+
throw new Error('No flutterDesktop config. Set config.flutterDesktop with FlutterDesktopConfig.');
|
|
71
|
+
}
|
|
72
|
+
this._flutterDesktopDriver = new FlutterDesktopDriver_1.FlutterDesktopDriver(this.config);
|
|
73
|
+
}
|
|
74
|
+
return this._flutterDesktopDriver;
|
|
75
|
+
}
|
|
76
|
+
get isFlutterDesktopLaunched() {
|
|
77
|
+
return this._flutterDesktopDriver?.isLaunched ?? false;
|
|
78
|
+
}
|
|
79
|
+
async closeFlutterDesktop() {
|
|
80
|
+
await this._flutterDesktopDriver?.close();
|
|
81
|
+
this._flutterDesktopDriver = null;
|
|
82
|
+
}
|
|
83
|
+
// Database (plugin — user registers their adapter)
|
|
84
|
+
setDb(driver) {
|
|
85
|
+
this._dbDriver = driver;
|
|
86
|
+
}
|
|
87
|
+
get db() {
|
|
88
|
+
if (!this._dbDriver)
|
|
89
|
+
throw new Error('No DatabaseDriver registered. Call world.setDb(adapter) in a Before hook.');
|
|
90
|
+
return this._dbDriver;
|
|
91
|
+
}
|
|
92
|
+
get hasDb() {
|
|
93
|
+
return this._dbDriver !== null;
|
|
94
|
+
}
|
|
95
|
+
// Tear-down helpers (called by hooks)
|
|
96
|
+
async closeWeb() {
|
|
97
|
+
await this._webDriver?.close();
|
|
98
|
+
this._webDriver = null;
|
|
99
|
+
}
|
|
100
|
+
async disposeApi() {
|
|
101
|
+
await this._apiDriver?.dispose();
|
|
102
|
+
this._apiDriver = null;
|
|
103
|
+
}
|
|
104
|
+
async disconnectDb() {
|
|
105
|
+
if (this._dbDriver) {
|
|
106
|
+
await this._dbDriver.disconnect();
|
|
107
|
+
this._dbDriver = null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.ConductorWorld = ConductorWorld;
|
|
112
|
+
//# sourceMappingURL=ConductorWorld.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConductorWorld.js","sourceRoot":"","sources":["../../../src/world/ConductorWorld.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,83 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nouhouari/conductor-e2e",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.8",
|
|
4
|
+
"description": "Multi-platform E2E test framework — web (Playwright), API, mobile (Maestro), desktop (JavaFX), and database in one Cucumber scenario",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"e2e",
|
|
7
|
+
"testing",
|
|
8
|
+
"cucumber",
|
|
9
|
+
"bdd",
|
|
10
|
+
"playwright",
|
|
11
|
+
"maestro",
|
|
12
|
+
"flutter",
|
|
13
|
+
"javafx",
|
|
14
|
+
"multi-platform",
|
|
15
|
+
"test-framework"
|
|
16
|
+
],
|
|
17
|
+
"author": "Nourreddine Houari",
|
|
18
|
+
"license": "MIT",
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/nouhouari/conductor.git"
|
|
22
|
+
},
|
|
23
|
+
"homepage": "https://github.com/nouhouari/conductor#readme",
|
|
24
|
+
"bugs": {
|
|
25
|
+
"url": "https://github.com/nouhouari/conductor/issues"
|
|
26
|
+
},
|
|
27
|
+
"workspaces": [
|
|
28
|
+
"example",
|
|
29
|
+
"mcp"
|
|
30
|
+
],
|
|
31
|
+
"main": "dist/src/index.js",
|
|
32
|
+
"types": "dist/src/index.d.ts",
|
|
33
|
+
"bin": {
|
|
34
|
+
"conductor-fetch-features": "dist/src/scenarios/cli.js"
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist",
|
|
38
|
+
"config",
|
|
39
|
+
"README.md",
|
|
40
|
+
"LICENSE",
|
|
41
|
+
"CHANGELOG.md"
|
|
42
|
+
],
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsc",
|
|
45
|
+
"clean": "rm -rf dist",
|
|
46
|
+
"prepublishOnly": "npm run clean && npm run build",
|
|
47
|
+
"test": "cucumber-js",
|
|
48
|
+
"test:dry-run": "cucumber-js --dry-run",
|
|
49
|
+
"flutter:build:macos": "cd apps/mobile && flutter build macos --profile -t lib/main_test.dart --dart-define=API_BASE_URL=http://localhost:3000/api --dart-define=DISABLE_SWIPE_GESTURES=true",
|
|
50
|
+
"report": "allure generate allure-results --clean -o allure-report",
|
|
51
|
+
"report:open": "allure open allure-report"
|
|
52
|
+
},
|
|
53
|
+
"exports": {
|
|
54
|
+
".": {
|
|
55
|
+
"import": "./dist/src/index.js",
|
|
56
|
+
"require": "./dist/src/index.js",
|
|
57
|
+
"types": "./dist/src/index.d.ts"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"engines": {
|
|
61
|
+
"node": ">=18.0.0"
|
|
62
|
+
},
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"@cucumber/cucumber": "^11.0.0",
|
|
65
|
+
"allure-commandline": "^2.27.0",
|
|
66
|
+
"allure-cucumberjs": "^3.0.0",
|
|
67
|
+
"dotenv": "^16.4.5",
|
|
68
|
+
"javafx-driver": "^0.2.2",
|
|
69
|
+
"pino": "^9.0.0",
|
|
70
|
+
"pino-pretty": "^11.0.0",
|
|
71
|
+
"playwright": "^1.44.0",
|
|
72
|
+
"ws": "^8.21.0"
|
|
73
|
+
},
|
|
74
|
+
"devDependencies": {
|
|
75
|
+
"@types/node": "^20.0.0",
|
|
76
|
+
"@types/ws": "^8.18.1",
|
|
77
|
+
"ts-node": "^10.9.0",
|
|
78
|
+
"typescript": "^5.4.0"
|
|
79
|
+
},
|
|
80
|
+
"publishConfig": {
|
|
81
|
+
"registry": "https://npm.pkg.github.com"
|
|
82
|
+
}
|
|
83
|
+
}
|