@empiricalrun/test-run 0.4.4 → 0.4.6
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 +12 -0
- package/dist/bin/index.js +7 -3
- package/dist/dashboard.d.ts +1 -1
- package/dist/dashboard.d.ts.map +1 -1
- package/dist/dashboard.js +2 -6
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +24 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @empiricalrun/test-run
|
|
2
2
|
|
|
3
|
+
## 0.4.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 4ab570f: fix: consider "setup" and "teardown" aliases as test block in test-run
|
|
8
|
+
|
|
9
|
+
## 0.4.5
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 793d21c: feat: use package.json name to infer project name
|
|
14
|
+
|
|
3
15
|
## 0.4.4
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/bin/index.js
CHANGED
|
@@ -39,11 +39,15 @@ const utils_1 = require("../utils");
|
|
|
39
39
|
const pwOptions = process.argv
|
|
40
40
|
.slice(2)
|
|
41
41
|
.filter((arg) => !optionsToStrip.includes(arg));
|
|
42
|
+
const projectName = process.env.PROJECT_NAME || (await (0, utils_1.pickNameFromPackageJson)());
|
|
43
|
+
if (!projectName) {
|
|
44
|
+
throw new Error("Project name is required");
|
|
45
|
+
}
|
|
46
|
+
let environmentSpecificProjects = [];
|
|
47
|
+
let platform = types_1.Platform.WEB;
|
|
42
48
|
try {
|
|
43
|
-
let environmentSpecificProjects = [];
|
|
44
|
-
let platform = types_1.Platform.WEB;
|
|
45
49
|
if (process.env.TEST_RUN_ENVIRONMENT) {
|
|
46
|
-
const { environment, build: latestBuild } = await (0, dashboard_1.fetchEnvironmentAndBuild)();
|
|
50
|
+
const { environment, build: latestBuild } = await (0, dashboard_1.fetchEnvironmentAndBuild)(projectName, process.env.TEST_RUN_ENVIRONMENT);
|
|
47
51
|
platform = environment.platform;
|
|
48
52
|
environmentSpecificProjects = environment.playwright_projects;
|
|
49
53
|
if (!process.env.BUILD_URL) {
|
package/dist/dashboard.d.ts
CHANGED
package/dist/dashboard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAK7C,eAAO,MAAM,wBAAwB,
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../src/dashboard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAK7C,eAAO,MAAM,wBAAwB,gBACtB,MAAM,mBACF,MAAM,KACtB,QAAQ;IACT,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;CACd,CAiDA,CAAC"}
|
package/dist/dashboard.js
CHANGED
|
@@ -7,12 +7,8 @@ exports.fetchEnvironmentAndBuild = void 0;
|
|
|
7
7
|
const async_retry_1 = __importDefault(require("async-retry"));
|
|
8
8
|
const utils_1 = require("./utils");
|
|
9
9
|
const DOMAIN = process.env.DASHBOARD_DOMAIN || "https://dash.empirical.run";
|
|
10
|
-
const fetchEnvironmentAndBuild = async () => {
|
|
11
|
-
|
|
12
|
-
throw new Error("PROJECT_NAME is required for fetching environment and latest build");
|
|
13
|
-
}
|
|
14
|
-
const projectRepo = (0, utils_1.buildRepoName)(process.env.PROJECT_NAME);
|
|
15
|
-
const environmentSlug = `${process.env.TEST_RUN_ENVIRONMENT}`;
|
|
10
|
+
const fetchEnvironmentAndBuild = async (projectName, environmentSlug) => {
|
|
11
|
+
const projectRepo = (0, utils_1.buildRepoName)(projectName);
|
|
16
12
|
const data = await (0, async_retry_1.default)(async (bail) => {
|
|
17
13
|
const resp = await fetch(`${DOMAIN}/api/environments?project_repo_name=${projectRepo}&environment_slug=${environmentSlug}`, {
|
|
18
14
|
method: "GET",
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,oBAAY,QAAQ;IAClB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,GAAG,QAAQ;CACZ;AAED,oBAAY,aAAa;IACvB,UAAU,eAAe;IACzB,SAAS,cAAc;CACxB;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,oBAAY,QAAQ;IAClB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,GAAG,QAAQ;CACZ;AAED,oBAAY,aAAa;IACvB,UAAU,eAAe;IACzB,SAAS,cAAc;CACxB;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,CAAC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare function cmd(command: string[], options: {
|
|
|
10
10
|
* @return {*} {Promise<string[]>}
|
|
11
11
|
*/
|
|
12
12
|
export declare function getAllFilePaths(directoryPath?: string): Promise<string[]>;
|
|
13
|
+
export declare const getTestModuleAliasFromSourceFile: (sourceFile: SourceFile) => string;
|
|
13
14
|
export declare function getTestCaseNode({ filePath, scenarioName, }: {
|
|
14
15
|
filePath: string;
|
|
15
16
|
scenarioName: string;
|
|
@@ -36,6 +37,7 @@ export declare const generateProjectFilters: ({ platform, filteringSets, }: {
|
|
|
36
37
|
filteringSets: string[];
|
|
37
38
|
}) => Promise<string[]>;
|
|
38
39
|
export declare function buildRepoName(projectName: string): string;
|
|
40
|
+
export declare const pickNameFromPackageJson: () => Promise<string | undefined>;
|
|
39
41
|
export declare const downloadBuild: (buildUrl: string) => Promise<void>;
|
|
40
42
|
export declare const getTestRunner: (platform: Platform) => TestFramework;
|
|
41
43
|
export declare const handleTeardownSkipFlag: (directory: string) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAW,UAAU,EAAc,MAAM,UAAU,CAAC;AAGjE,OAAO,EAEL,QAAQ,EAER,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,wBAAgB,GAAG,CACjB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACxC,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,aAAa,GAAE,MAAW,GACzB,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBnB;AAED,wBAAsB,eAAe,CAAC,EACpC,QAAQ,EACR,YAAY,GACb,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC;IAAE,YAAY,EAAE,IAAI,GAAG,SAAS,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAW,UAAU,EAAc,MAAM,UAAU,CAAC;AAGjE,OAAO,EAEL,QAAQ,EAER,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,wBAAgB,GAAG,CACjB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACxC,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,aAAa,GAAE,MAAW,GACzB,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBnB;AAED,eAAO,MAAM,gCAAgC,eAC/B,UAAU,KACrB,MAgBF,CAAC;AAEF,wBAAsB,eAAe,CAAC,EACpC,QAAQ,EACR,YAAY,GACb,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC;IAAE,YAAY,EAAE,IAAI,GAAG,SAAS,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC,CAetE;AAED,wBAAsB,YAAY,CAAC,EACjC,QAAQ,EACR,YAAY,GACb,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,OAAO,CAAC,CAMnB;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,IAAI,GAAG,SAAS,GACrB,IAAI,GAAG,SAAS,CA2BlB;AAED,wBAAsB,0CAA0C,CAC9D,QAAQ,EAAE,MAAM,oBA+BjB;AAED,wBAAsB,cAAc,CAAC,EACnC,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,QAAQ,GACT,EAAE;IACD,UAAU,EAAE,UAAU,CAAC;IACvB,kBAAkB,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;IACtC,YAAY,EAAE,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,iBAgBA;AAED,wBAAsB,+BAA+B,CAAC,QAAQ,EAAE,QAAQ,gBAevE;AAED,eAAO,MAAM,4BAA4B,UAEhC,MAAM,EAAE,mBAGE,MAAM,EAAE,EAAE,KAC1B,MAAM,EAUR,CAAC;AAEF,eAAO,MAAM,sBAAsB;cAIvB,QAAQ;mBACH,MAAM,EAAE;MACrB,QAAQ,MAAM,EAAE,CAmBnB,CAAC;AAEF,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,eAAO,MAAM,uBAAuB,QAAa,QAC/C,MAAM,GAAG,SAAS,CAMnB,CAAC;AAEF,eAAO,MAAM,aAAa,aAAoB,MAAM,KAAG,QAAQ,IAAI,CAWlE,CAAC;AAEF,eAAO,MAAM,aAAa,aAAc,QAAQ,KAAG,aAIlD,CAAC;AA4DF,eAAO,MAAM,sBAAsB,cAAqB,MAAM,kBAkB7D,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.handleTeardownSkipFlag = exports.getTestRunner = exports.downloadBuild = exports.buildRepoName = exports.generateProjectFilters = exports.filterArrayByGlobMatchersSet = exports.getProjectsFromPlaywrightConfig = exports.markTestAsOnly = exports.hasTopLevelDescribeConfigureWithSerialMode = exports.findFirstSerialDescribeBlock = exports.hasTestBlock = exports.getTestCaseNode = exports.getAllFilePaths = exports.cmd = void 0;
|
|
6
|
+
exports.handleTeardownSkipFlag = exports.getTestRunner = exports.downloadBuild = exports.pickNameFromPackageJson = exports.buildRepoName = exports.generateProjectFilters = exports.filterArrayByGlobMatchersSet = exports.getProjectsFromPlaywrightConfig = exports.markTestAsOnly = exports.hasTopLevelDescribeConfigureWithSerialMode = exports.findFirstSerialDescribeBlock = exports.hasTestBlock = exports.getTestCaseNode = exports.getTestModuleAliasFromSourceFile = exports.getAllFilePaths = exports.cmd = void 0;
|
|
7
7
|
const child_process_1 = require("child_process");
|
|
8
8
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
9
|
const minimatch_1 = require("minimatch");
|
|
@@ -71,12 +71,27 @@ async function getAllFilePaths(directoryPath = "") {
|
|
|
71
71
|
return filePaths;
|
|
72
72
|
}
|
|
73
73
|
exports.getAllFilePaths = getAllFilePaths;
|
|
74
|
+
const getTestModuleAliasFromSourceFile = (sourceFile) => {
|
|
75
|
+
return (sourceFile
|
|
76
|
+
.getImportDeclarations()
|
|
77
|
+
// Look for any import that includes "test" as a named import, regardless of module path
|
|
78
|
+
// "test" can be imported from "@playwright/test" or "<some-fixture>"
|
|
79
|
+
.find((importDecl) => importDecl
|
|
80
|
+
.getNamedImports()
|
|
81
|
+
.some((namedImport) => namedImport.getName() === "test"))
|
|
82
|
+
?.getNamedImports()
|
|
83
|
+
.find((namedImport) => namedImport.getName() === "test")
|
|
84
|
+
?.getAliasNode()
|
|
85
|
+
?.getText() || "test");
|
|
86
|
+
};
|
|
87
|
+
exports.getTestModuleAliasFromSourceFile = getTestModuleAliasFromSourceFile;
|
|
74
88
|
async function getTestCaseNode({ filePath, scenarioName, }) {
|
|
75
89
|
const project = new ts_morph_1.Project();
|
|
76
90
|
const content = await fs_extra_1.default.readFile(filePath, "utf-8");
|
|
77
91
|
const sourceFile = project.createSourceFile("test.ts", content);
|
|
92
|
+
const testAlias = (0, exports.getTestModuleAliasFromSourceFile)(sourceFile);
|
|
78
93
|
const testCaseNode = sourceFile.getFirstDescendant((node) => !!(node.isKind(ts_morph_1.SyntaxKind.CallExpression) &&
|
|
79
|
-
node.getExpression().getText() ===
|
|
94
|
+
node.getExpression().getText() === testAlias &&
|
|
80
95
|
node.getArguments()[0]?.getText().includes(scenarioName)));
|
|
81
96
|
return { testCaseNode, sourceFile };
|
|
82
97
|
}
|
|
@@ -202,6 +217,13 @@ function buildRepoName(projectName) {
|
|
|
202
217
|
return `${projectName}-tests`;
|
|
203
218
|
}
|
|
204
219
|
exports.buildRepoName = buildRepoName;
|
|
220
|
+
const pickNameFromPackageJson = async () => {
|
|
221
|
+
const packageJSONPath = "package.json";
|
|
222
|
+
const packageJsonStr = await fs_extra_1.default.readFile(packageJSONPath, "utf-8");
|
|
223
|
+
const packageJSONData = JSON.parse(packageJsonStr);
|
|
224
|
+
return packageJSONData.name && packageJSONData.name.replace("-tests", "");
|
|
225
|
+
};
|
|
226
|
+
exports.pickNameFromPackageJson = pickNameFromPackageJson;
|
|
205
227
|
const downloadBuild = async (buildUrl) => {
|
|
206
228
|
const packageJSONPath = "package.json";
|
|
207
229
|
const packageJsonStr = await fs_extra_1.default.readFile(packageJSONPath, "utf-8");
|