@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 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) {
@@ -1,5 +1,5 @@
1
1
  import { Build, Environment } from "./types";
2
- export declare const fetchEnvironmentAndBuild: () => Promise<{
2
+ export declare const fetchEnvironmentAndBuild: (projectName: string, environmentSlug: string) => Promise<{
3
3
  environment: Environment;
4
4
  build: Build;
5
5
  }>;
@@ -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,QAAa,QAAQ;IACxD,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;CACd,CAyDA,CAAC"}
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
- if (!process.env.PROJECT_NAME) {
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",
@@ -16,6 +16,7 @@ export type Build = {
16
16
  build_url: string;
17
17
  };
18
18
  export type PartialPackageJSON = {
19
+ name: string;
19
20
  scripts: Record<string, string>;
20
21
  };
21
22
  export declare enum Platform {
@@ -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"}
@@ -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,CAatE;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,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"}
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"}
@@ -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() === "test" &&
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");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empiricalrun/test-run",
3
- "version": "0.4.4",
3
+ "version": "0.4.6",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"