apify-test-tools 0.9.1-beta.1 → 0.9.1-beta.11

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.
Files changed (145) hide show
  1. package/.github/CODEOWNERS +1 -1
  2. package/.github/actionlint.yaml +12 -0
  3. package/.github/actions/checkout-restore-dependencies/action.yaml +94 -0
  4. package/.github/review-prompt.md +154 -0
  5. package/.github/scripts/check-major-tag-refs.mjs +72 -0
  6. package/.github/scripts/check-package-version-bump.mjs +74 -0
  7. package/.github/scripts/run-with-apify-tokens.mjs +104 -0
  8. package/.github/workflows/_check_code.yaml +16 -0
  9. package/.github/workflows/_move_major_tag.yaml +108 -0
  10. package/.github/workflows/_update_release_metadata.yaml +12 -0
  11. package/.github/workflows/manual_move_major_tag.yaml +26 -0
  12. package/.github/workflows/manual_release_stable.yaml +12 -0
  13. package/.github/workflows/on_master.yaml +11 -0
  14. package/.github/workflows/on_pull_request.yaml +49 -1
  15. package/.github/workflows/public_claude.yaml +101 -0
  16. package/.github/workflows/public_platform-tests-claude-investigate-and-fix.yaml +208 -0
  17. package/.github/workflows/public_platform-tests.yaml +63 -0
  18. package/.github/workflows/public_pr-build-test.yaml +175 -0
  19. package/.github/workflows/public_push-build-latest.yaml +44 -0
  20. package/.github/workflows/public_review.yaml +107 -0
  21. package/.github/workflows-package-version +1 -0
  22. package/.prettierignore +9 -0
  23. package/.vscode/settings.json +2 -1
  24. package/CHANGELOG.md +15 -0
  25. package/CONTRIBUTING.md +53 -2
  26. package/README.md +229 -36
  27. package/bin/build-from-local.ts +23 -28
  28. package/bin/build.ts +82 -70
  29. package/bin/main.ts +2 -1
  30. package/bin/types.ts +0 -11
  31. package/bin/utils/config/load-config.ts +133 -0
  32. package/bin/utils/config/parser.ts +89 -0
  33. package/bin/utils/config/structures/base.ts +65 -0
  34. package/bin/utils/config/structures/grouped.ts +40 -0
  35. package/bin/utils/config/structures/legacy.ts +22 -0
  36. package/bin/utils/json-file.ts +55 -0
  37. package/bin/utils.ts +5 -150
  38. package/dist/bin/build-from-local.d.ts +2 -2
  39. package/dist/bin/build-from-local.d.ts.map +1 -1
  40. package/dist/bin/build-from-local.js +20 -19
  41. package/dist/bin/build-from-local.js.map +1 -1
  42. package/dist/bin/build.d.ts +7 -11
  43. package/dist/bin/build.d.ts.map +1 -1
  44. package/dist/bin/build.js +51 -50
  45. package/dist/bin/build.js.map +1 -1
  46. package/dist/bin/main.d.ts.map +1 -1
  47. package/dist/bin/main.js +2 -1
  48. package/dist/bin/main.js.map +1 -1
  49. package/dist/bin/types.d.ts +0 -9
  50. package/dist/bin/types.d.ts.map +1 -1
  51. package/dist/bin/utils/config/load-config.d.ts +13 -0
  52. package/dist/bin/utils/config/load-config.d.ts.map +1 -0
  53. package/dist/bin/utils/config/load-config.js +99 -0
  54. package/dist/bin/utils/config/load-config.js.map +1 -0
  55. package/dist/bin/utils/config/parser.d.ts +19 -0
  56. package/dist/bin/utils/config/parser.d.ts.map +1 -0
  57. package/dist/bin/utils/config/parser.js +73 -0
  58. package/dist/bin/utils/config/parser.js.map +1 -0
  59. package/dist/bin/utils/config/structures/base.d.ts +36 -0
  60. package/dist/bin/utils/config/structures/base.d.ts.map +1 -0
  61. package/dist/bin/utils/config/structures/base.js +41 -0
  62. package/dist/bin/utils/config/structures/base.js.map +1 -0
  63. package/dist/bin/utils/config/structures/grouped.d.ts +6 -0
  64. package/dist/bin/utils/config/structures/grouped.d.ts.map +1 -0
  65. package/dist/bin/utils/config/structures/grouped.js +29 -0
  66. package/dist/bin/utils/config/structures/grouped.js.map +1 -0
  67. package/dist/bin/utils/config/structures/legacy.d.ts +6 -0
  68. package/dist/bin/utils/config/structures/legacy.d.ts.map +1 -0
  69. package/dist/bin/utils/config/structures/legacy.js +14 -0
  70. package/dist/bin/utils/config/structures/legacy.js.map +1 -0
  71. package/dist/bin/utils/json-file.d.ts +20 -0
  72. package/dist/bin/utils/json-file.d.ts.map +1 -0
  73. package/dist/bin/utils/json-file.js +42 -0
  74. package/dist/bin/utils/json-file.js.map +1 -0
  75. package/dist/bin/utils.d.ts +5 -8
  76. package/dist/bin/utils.d.ts.map +1 -1
  77. package/dist/bin/utils.js +4 -107
  78. package/dist/bin/utils.js.map +1 -1
  79. package/dist/lib/consts.d.ts +1 -0
  80. package/dist/lib/consts.d.ts.map +1 -1
  81. package/dist/lib/consts.js +3 -0
  82. package/dist/lib/consts.js.map +1 -1
  83. package/dist/lib/lib.d.ts +10 -0
  84. package/dist/lib/lib.d.ts.map +1 -1
  85. package/dist/lib/lib.js +24 -18
  86. package/dist/lib/lib.js.map +1 -1
  87. package/dist/lib/types.d.ts +11 -3
  88. package/dist/lib/types.d.ts.map +1 -1
  89. package/dist/test/unit/bin/utils/config/load-config.test.d.ts +2 -0
  90. package/dist/test/unit/bin/utils/config/load-config.test.d.ts.map +1 -0
  91. package/dist/test/unit/bin/utils/config/load-config.test.js +139 -0
  92. package/dist/test/unit/bin/utils/config/load-config.test.js.map +1 -0
  93. package/dist/test/unit/bin/utils/config/parser.test.d.ts +2 -0
  94. package/dist/test/unit/bin/utils/config/parser.test.d.ts.map +1 -0
  95. package/dist/test/unit/bin/utils/config/parser.test.js +129 -0
  96. package/dist/test/unit/bin/utils/config/parser.test.js.map +1 -0
  97. package/dist/test/unit/bin/utils/config/structures/base.test.d.ts +2 -0
  98. package/dist/test/unit/bin/utils/config/structures/base.test.d.ts.map +1 -0
  99. package/dist/test/unit/bin/utils/config/structures/base.test.js +74 -0
  100. package/dist/test/unit/bin/utils/config/structures/base.test.js.map +1 -0
  101. package/dist/test/unit/bin/utils/config/structures/grouped.test.d.ts +2 -0
  102. package/dist/test/unit/bin/utils/config/structures/grouped.test.d.ts.map +1 -0
  103. package/dist/test/unit/bin/utils/config/structures/grouped.test.js +75 -0
  104. package/dist/test/unit/bin/utils/config/structures/grouped.test.js.map +1 -0
  105. package/dist/test/unit/bin/utils/config/structures/legacy.test.d.ts +2 -0
  106. package/dist/test/unit/bin/utils/config/structures/legacy.test.d.ts.map +1 -0
  107. package/dist/test/unit/bin/utils/config/structures/legacy.test.js +63 -0
  108. package/dist/test/unit/bin/utils/config/structures/legacy.test.js.map +1 -0
  109. package/dist/test/unit/bin/utils/files.test.d.ts +2 -0
  110. package/dist/test/unit/bin/utils/files.test.d.ts.map +1 -0
  111. package/dist/test/unit/bin/utils/files.test.js +117 -0
  112. package/dist/test/unit/bin/utils/files.test.js.map +1 -0
  113. package/dist/test/unit/lib.test.d.ts +2 -0
  114. package/dist/test/unit/lib.test.d.ts.map +1 -0
  115. package/dist/test/unit/lib.test.js +37 -0
  116. package/dist/test/unit/lib.test.js.map +1 -0
  117. package/dist/tsconfig.tsbuildinfo +1 -1
  118. package/lib/consts.ts +4 -0
  119. package/lib/lib.ts +32 -20
  120. package/lib/types.ts +11 -3
  121. package/package.json +5 -2
  122. package/test/fixtures/bin/utils/files/array.json +1 -0
  123. package/test/fixtures/bin/utils/files/comments.jsonc +4 -0
  124. package/test/fixtures/bin/utils/files/directory.json/.gitkeep +0 -0
  125. package/test/fixtures/bin/utils/files/empty-object.json +1 -0
  126. package/test/fixtures/bin/utils/files/empty.json +0 -0
  127. package/test/fixtures/bin/utils/files/malformed.json +1 -0
  128. package/test/fixtures/bin/utils/files/nested.json +6 -0
  129. package/test/fixtures/bin/utils/files/no-json-extension.actorrc +1 -0
  130. package/test/fixtures/bin/utils/files/null.json +1 -0
  131. package/test/fixtures/bin/utils/files/number.json +1 -0
  132. package/test/fixtures/bin/utils/files/unreadable.json +1 -0
  133. package/test/tsconfig.json +4 -2
  134. package/test/unit/bin/utils/config/load-config.test.ts +180 -0
  135. package/test/unit/bin/utils/config/parser.test.ts +158 -0
  136. package/test/unit/bin/utils/config/structures/base.test.ts +83 -0
  137. package/test/unit/bin/utils/config/structures/grouped.test.ts +90 -0
  138. package/test/unit/bin/utils/config/structures/legacy.test.ts +78 -0
  139. package/test/unit/bin/utils/files.test.ts +158 -0
  140. package/test/unit/lib.test.ts +53 -0
  141. package/dist/test/unit/bin/utils.test.d.ts +0 -2
  142. package/dist/test/unit/bin/utils.test.d.ts.map +0 -1
  143. package/dist/test/unit/bin/utils.test.js +0 -321
  144. package/dist/test/unit/bin/utils.test.js.map +0 -1
  145. package/test/unit/bin/utils.test.ts +0 -381
package/dist/lib/lib.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ApifyClient } from 'apify-client';
2
2
  import { describe as vitestDescribe, test as vitestTest } from 'vitest';
3
- import { DATASET_SYNC_DELAY_MS, DEFAULT_TEST_RUN_DURATION_MS } from './consts.js';
3
+ import { DATASET_SYNC_DELAY_MS, DEFAULT_TEST_ACTOR_TIMEOUT_SECS, DEFAULT_TEST_RUN_DURATION_MS } from './consts.js';
4
4
  import { extendExpect } from './extend-expect.js';
5
5
  import { RunTestResult } from './run-test-result.js';
6
6
  import { getActorPrefilledInput, sleep } from './utils.js';
@@ -23,31 +23,32 @@ const config = actorBuilds.reduce((map, cfg) => {
23
23
  map.set(cfg.actorRawId, cfg);
24
24
  return map;
25
25
  }, new Map());
26
- const { TESTER_APIFY_TOKEN, RUN_PLATFORM_TESTS, RUN_ALL_PLATFORM_TESTS } = process.env;
26
+ const { TESTER_APIFY_TOKEN, RUN_ALL_PLATFORM_TESTS } = process.env;
27
27
  const apifyClient = new ApifyClient({ token: TESTER_APIFY_TOKEN });
28
28
  const DEFAULT_TEST_OPTIONS = {
29
29
  // we want to run tests concurrently
30
30
  concurrent: true,
31
31
  // test should finish within 1 hour
32
32
  timeout: DEFAULT_TEST_RUN_DURATION_MS,
33
+ retry: 1,
33
34
  };
35
+ /**
36
+ * Platform tests need `TESTER_APIFY_TOKEN` to talk to the platform, so without it we skip them altogether.
37
+ *
38
+ * `RUN_ALL_PLATFORM_TESTS` enables them too because locally we can test against a hardcoded `runId`,
39
+ * which doesn't need the tester token.
40
+ */
34
41
  export const describe = (name, fn, options = DEFAULT_TEST_OPTIONS) => {
35
- vitestDescribe.runIf(!!RUN_PLATFORM_TESTS || !!RUN_ALL_PLATFORM_TESTS)(name, options, fn);
36
- };
37
- const DEFAULT_TEST_ACTOR_OPTIONS = {
38
- retry: 1,
39
- // prevent orphaned runs
40
- timeout: DEFAULT_TEST_RUN_DURATION_MS,
42
+ vitestDescribe.runIf(!!TESTER_APIFY_TOKEN || !!RUN_ALL_PLATFORM_TESTS)(name, options, fn);
41
43
  };
42
44
  /**
43
45
  * @param actorId - The actor's raw platform ID or its full name (`owner/name`, e.g. `"apify/web-scraper"`).
44
46
  */
45
47
  export const testActor = (actorId, testName, fn, testOptions) => {
46
- const options = {
47
- ...DEFAULT_TEST_ACTOR_OPTIONS,
48
- ...testOptions,
49
- };
48
+ const options = { ...DEFAULT_TEST_OPTIONS, ...testOptions };
50
49
  const name = `${actorId}: ${testName}`;
50
+ // `RUN_ALL_PLATFORM_TESTS` is needed for the scheduled tests, which have no `ACTOR_BUILDS` to match the
51
+ // tests against - without it, every test would be filtered out as an actor we didn't build.
51
52
  const shouldRun = !!RUN_ALL_PLATFORM_TESTS || config.has(actorId);
52
53
  vitestTest.runIf(shouldRun)(name, options, async (context) => {
53
54
  const { expect, ...rest } = context;
@@ -69,11 +70,10 @@ export const testActor = (actorId, testName, fn, testOptions) => {
69
70
  */
70
71
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
71
72
  export const testStandbyActor = (actorId, testName, fn, testOptions) => {
72
- const options = {
73
- ...DEFAULT_TEST_ACTOR_OPTIONS,
74
- ...testOptions,
75
- };
73
+ const options = { ...DEFAULT_TEST_OPTIONS, ...testOptions };
76
74
  const name = `${actorId}: ${testName}`;
75
+ // `RUN_ALL_PLATFORM_TESTS` is needed for the scheduled tests, which have no `ACTOR_BUILDS` to match the
76
+ // tests against - without it, every test would be filtered out as an actor we didn't build.
77
77
  const shouldRun = !!RUN_ALL_PLATFORM_TESTS || config.has(actorId);
78
78
  vitestTest.runIf(shouldRun)(name, options, async (context) => {
79
79
  const standbyTask = await createStandbyTask(actorId, config.get(actorId)?.buildNumber);
@@ -214,12 +214,15 @@ const createStartRunFn = (actorId, testContext) => {
214
214
  }
215
215
  return new RunTestResult(apifyClient, run);
216
216
  }
217
- const actor = apifyClient.actor(actorId);
218
217
  const actorInput = {
219
218
  ...(prefilledInput && (await getActorPrefilledInput(apifyClient, actorId, buildId))),
220
219
  ...input,
221
220
  };
222
- const run = await actor.call(actorInput, { build, log: null, ...options });
221
+ const actor = apifyClient.actor(actorId);
222
+ const actorInfo = await actor.get();
223
+ const timeout = Math.min(actorInfo?.defaultRunOptions?.timeoutSecs ?? DEFAULT_TEST_ACTOR_TIMEOUT_SECS, DEFAULT_TEST_ACTOR_TIMEOUT_SECS);
224
+ const actorOptions = { timeout, build, log: null, ...options };
225
+ const run = await actor.call(actorInput, actorOptions);
223
226
  const runLink = generateRunLink(run);
224
227
  await annotate(`${task.name} - ${runLink}`, 'run_link');
225
228
  // @ts-expect-error: `TaskMeta` cannot be retyped
@@ -236,4 +239,7 @@ const createStartRunFn = (actorId, testContext) => {
236
239
  const generateRunLink = (run) => {
237
240
  return `https://console.apify.com/view/runs/${run.id}`;
238
241
  };
242
+ /** Used for unit testing */
243
+ // eslint-disable-next-line no-underscore-dangle
244
+ export const _private = { createStartRunFn };
239
245
  //# sourceMappingURL=lib.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../lib/lib.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../lib/lib.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,15 @@ export type ActorBuild = {
8
8
  };
9
9
  export type RunOptions<T> = {
10
10
  input: Omit<T, 'actorName'>;
11
- options?: ActorCallOptions;
11
+ options?: Omit<ActorCallOptions, 'timeout'> & {
12
+ /**
13
+ * Timeout for the actor run in seconds. Zero value means there is no timeout.
14
+ * - If `undefined`, the run uses timeout of the default Actor run configuration.
15
+ *
16
+ * @default 3540 // 59 minutes (finish the run before the test)
17
+ */
18
+ timeout?: number;
19
+ };
12
20
  prefilledInput?: boolean;
13
21
  /**
14
22
  * If you specify `runId`, all the other options will be ignored and this run's data will
@@ -115,8 +123,8 @@ export type ActorTestOptions = Omit<TestOptions, 'retry' | 'timeout'> & {
115
123
  */
116
124
  retry?: TestOptions['retry'];
117
125
  /**
118
- * Timeout for the actor run in milliseconds. Zero value means there is no timeout.
119
- * - If `undefined`, the run uses timeout of the default Actor run configuration.
126
+ * Timeout for the test in milliseconds. Zero value means there is no timeout.
127
+ * - If `undefined`, the run uses timeout of the default test configuration.
120
128
  *
121
129
  * @default 60 * 60 * 1000 // 1 hour
122
130
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=load-config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-config.test.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/bin/utils/config/load-config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,139 @@
1
+ import fs from 'node:fs/promises';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
5
+ import { CONFIG_FILE_NAME, loadActorConfig, readConfigFile } from '../../../../../bin/utils/config/load-config.js';
6
+ let repoDir;
7
+ let originalCwd;
8
+ beforeEach(async () => {
9
+ originalCwd = process.cwd();
10
+ // `realpath` because macOS hands out a symlinked temp dir, while `process.cwd()` reports the target.
11
+ repoDir = await fs.realpath(await fs.mkdtemp(path.join(os.tmpdir(), 'apify-test-tools-config-')));
12
+ process.chdir(repoDir);
13
+ });
14
+ afterEach(async () => {
15
+ process.chdir(originalCwd);
16
+ await fs.rm(repoDir, { recursive: true, force: true });
17
+ });
18
+ const emptyActorSelection = { actors: [], ignore: [] };
19
+ const validConfig = (actors) => JSON.stringify({ actors });
20
+ const actorJson = (fields = {}) => JSON.stringify(fields);
21
+ const writeFiles = async (files) => Promise.all(Object.entries(files).map(async ([filePath, contents]) => {
22
+ const absPath = path.join(repoDir, filePath);
23
+ await fs.mkdir(path.dirname(absPath), { recursive: true });
24
+ await fs.writeFile(absPath, contents);
25
+ }));
26
+ describe('loadActorConfig', () => {
27
+ const entry = (fields = {}) => ({
28
+ folder: 'actors/shopify',
29
+ actorFullName: 'myteam/shopify',
30
+ tokenEnvVar: 'APIFY_TOKEN',
31
+ overrideActorContext: undefined,
32
+ ...fields,
33
+ });
34
+ const writeActorJson = async (fields = {}) => writeFiles({ 'actors/shopify/.actor/actor.json': actorJson(fields) });
35
+ it('resolves data coming from actor.json', async () => {
36
+ await writeActorJson({ dockerContextDir: '..' });
37
+ expect(loadActorConfig(entry())).toEqual({
38
+ actorFullName: 'myteam/shopify',
39
+ folder: 'actors/shopify',
40
+ tokenEnvVar: 'APIFY_TOKEN',
41
+ dockerContextDir: 'actors/shopify',
42
+ contextPaths: ['actors/shopify'],
43
+ });
44
+ });
45
+ it('defaults dockerContextDir to the actor folder when actor.json does not set it', async () => {
46
+ await writeActorJson();
47
+ expect(loadActorConfig(entry()).dockerContextDir).toBe('actors/shopify');
48
+ });
49
+ it('resolves dockerContextDir relative to the .actor/ folder, not the actor folder', async () => {
50
+ await writeActorJson({ dockerContextDir: '../../..' });
51
+ expect(loadActorConfig(entry()).dockerContextDir).toBe('');
52
+ });
53
+ it('throws when dockerContextDir resolves outside the repository root', async () => {
54
+ await writeActorJson({ dockerContextDir: '../../../..' });
55
+ expect(() => loadActorConfig(entry())).toThrow(/resolves outside the repository root/);
56
+ });
57
+ it('throws when actor.json is missing', () => {
58
+ expect(() => loadActorConfig(entry())).toThrow('Cannot read');
59
+ });
60
+ it('resolves contextPaths from overrideActorContext', async () => {
61
+ await writeActorJson({ dockerContextDir: '../../..' });
62
+ expect(loadActorConfig(entry({ overrideActorContext: ['actors/shopify', 'packages'] })).contextPaths).toEqual([
63
+ 'actors/shopify',
64
+ 'packages',
65
+ ]);
66
+ });
67
+ it('adds the actor own folder automatically when overrideActorContext does not cover it', async () => {
68
+ await writeActorJson();
69
+ expect(loadActorConfig(entry({ overrideActorContext: ['code', 'shared'] })).contextPaths).toEqual([
70
+ 'code',
71
+ 'shared',
72
+ 'actors/shopify',
73
+ ]);
74
+ });
75
+ it('allows overrideActorContext with disjoint sibling paths that all reach the actor folder via one entry', async () => {
76
+ await writeActorJson();
77
+ expect(loadActorConfig(entry({ overrideActorContext: ['actors/shopify', 'code', 'shared'] })).contextPaths).toEqual(['actors/shopify', 'code', 'shared']);
78
+ });
79
+ it('throws when overrideActorContext entries overlap (one is a prefix of another)', async () => {
80
+ await writeActorJson();
81
+ expect(() => loadActorConfig(entry({ overrideActorContext: ['actors/shopify', 'actors'] }))).toThrow(/overlap/);
82
+ });
83
+ it('throws when overrideActorContext contains the repo root alongside another entry', async () => {
84
+ await writeActorJson();
85
+ expect(() => loadActorConfig(entry({ overrideActorContext: ['', 'actors/shopify'] }))).toThrow(/overlap/);
86
+ });
87
+ });
88
+ describe('readConfigFile', () => {
89
+ // Golden output massaging the whole config reading process
90
+ it("carries the parser's normalization through to ActorConfig[]", async () => {
91
+ await writeFiles({
92
+ [CONFIG_FILE_NAME]: validConfig([
93
+ { folder: '.', actorFullName: 'apify/root', tokenEnvVar: 'APIFY_TOKEN_APIFY' },
94
+ {
95
+ folder: 'actors/shopify/',
96
+ actorFullName: 'myteam/shopify',
97
+ tokenEnvVar: 'APIFY_TOKEN',
98
+ overrideActorContext: ['actors/shopify/', 'packages/'],
99
+ },
100
+ ]),
101
+ '.actor/actor.json': actorJson({}),
102
+ 'actors/shopify/.actor/actor.json': actorJson({}),
103
+ });
104
+ expect(await readConfigFile(emptyActorSelection)).toEqual([
105
+ {
106
+ actorFullName: 'apify/root',
107
+ folder: '',
108
+ tokenEnvVar: 'APIFY_TOKEN_APIFY',
109
+ dockerContextDir: '',
110
+ contextPaths: [''],
111
+ },
112
+ {
113
+ actorFullName: 'myteam/shopify',
114
+ folder: 'actors/shopify',
115
+ tokenEnvVar: 'APIFY_TOKEN',
116
+ dockerContextDir: 'actors/shopify',
117
+ contextPaths: ['actors/shopify', 'packages'],
118
+ },
119
+ ]);
120
+ });
121
+ it('throws when config file is missing', async () => {
122
+ await expect(readConfigFile(emptyActorSelection)).rejects.toThrow('not found');
123
+ });
124
+ it('throws when config file contains invalid JSON', async () => {
125
+ await writeFiles({ [CONFIG_FILE_NAME]: '{bad json' });
126
+ await expect(readConfigFile(emptyActorSelection)).rejects.toThrow('invalid JSON');
127
+ });
128
+ it('throws when the config file is not a JSON object', async () => {
129
+ await writeFiles({ [CONFIG_FILE_NAME]: JSON.stringify([{ folder: 'actors/shopify' }]) });
130
+ await expect(readConfigFile(emptyActorSelection)).rejects.toThrow('"actors" array');
131
+ });
132
+ // The wording of a schema failure belongs to the strategy; this only checks that the failure
133
+ // reaches the caller rather than being swallowed on the way out of readConfigFile.
134
+ it('surfaces a schema failure from the parser', async () => {
135
+ await writeFiles({ [CONFIG_FILE_NAME]: JSON.stringify({ notActors: [] }) });
136
+ await expect(readConfigFile(emptyActorSelection)).rejects.toThrow(/at actors/);
137
+ });
138
+ });
139
+ //# sourceMappingURL=load-config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-config.test.js","sourceRoot":"","sources":["../../../../../../test/unit/bin/utils/config/load-config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.test.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/bin/utils/config/parser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,129 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { _privates, parseConfigFile } from '../../../../../bin/utils/config/parser.js';
3
+ import { CONFIG_FILE_STRATEGY } from '../../../../../bin/utils/config/structures/base.js';
4
+ import { GROUPED_PARSER } from '../../../../../bin/utils/config/structures/grouped.js';
5
+ import { LEGACY_PARSER } from '../../../../../bin/utils/config/structures/legacy.js';
6
+ const { selectStrategy, verifyConfiguration } = _privates;
7
+ const actor = (fields = {}) => ({
8
+ folder: 'actors/shopify',
9
+ actorFullName: 'myteam/shopify',
10
+ tokenEnvVar: 'APIFY_TOKEN',
11
+ overrideActorContext: undefined,
12
+ ...fields,
13
+ });
14
+ describe('selectStrategy', () => {
15
+ it('falls back to the legacy strategy when no mode is declared', () => {
16
+ expect(selectStrategy({})).toBe(LEGACY_PARSER);
17
+ });
18
+ it.each([
19
+ [CONFIG_FILE_STRATEGY.LEGACY, LEGACY_PARSER],
20
+ [CONFIG_FILE_STRATEGY.GROUPED, GROUPED_PARSER],
21
+ ])('honours an explicit "%s" mode', (mode, expected) => {
22
+ expect(selectStrategy({ mode })).toBe(expected);
23
+ });
24
+ it('throws on a mode no strategy is registered for', () => {
25
+ expect(() => selectStrategy('some-nonexistent-mode')).toThrow();
26
+ });
27
+ });
28
+ describe('verifyConfiguration', () => {
29
+ it('resolves the repo root to "" and gets rid of trailing slashes', () => {
30
+ const result = verifyConfiguration([
31
+ { folder: '.', actorFullName: 'myteam/root', tokenEnvVar: 'APIFY_TOKEN', overrideActorContext: undefined },
32
+ {
33
+ folder: 'actors/shopify/',
34
+ actorFullName: 'myteam/shopify',
35
+ tokenEnvVar: 'APIFY_TOKEN',
36
+ overrideActorContext: ['packages/'],
37
+ },
38
+ ]);
39
+ expect(result).toEqual([
40
+ { folder: '', actorFullName: 'myteam/root', tokenEnvVar: 'APIFY_TOKEN', overrideActorContext: undefined },
41
+ {
42
+ folder: 'actors/shopify',
43
+ actorFullName: 'myteam/shopify',
44
+ tokenEnvVar: 'APIFY_TOKEN',
45
+ overrideActorContext: ['packages'],
46
+ },
47
+ ]);
48
+ });
49
+ it.each([
50
+ ['"." and ""', '.', ''],
51
+ ['weird roots', '', './//'],
52
+ ['a trailing slash', 'actors/shopify', 'actors/shopify/'],
53
+ ])('rejects folders that collide once normalized: %s', (_name, first, second) => {
54
+ expect(() => verifyConfiguration([
55
+ actor({ folder: first, actorFullName: 'myteam/actor-a' }),
56
+ actor({ folder: second, actorFullName: 'myteam/actor-b' }),
57
+ ])).toThrow(/Duplicate folder/);
58
+ });
59
+ it('quotes a duplicate folder the way it was written, not the way it normalized', () => {
60
+ expect(() => verifyConfiguration([
61
+ actor({ folder: '.', actorFullName: 'myteam/actor-a' }),
62
+ actor({ folder: './', actorFullName: 'myteam/actor-b' }),
63
+ ])).toThrow('Duplicate folder "./"');
64
+ });
65
+ it('rejects two entries pointing at the same actor', () => {
66
+ expect(() => verifyConfiguration([actor({ folder: 'actors/a' }), actor({ folder: 'actors/b' })])).toThrow(/Duplicate actor "myteam\/shopify"/);
67
+ });
68
+ it('treats actorFullName case-sensitively — "myteam/A" is not "myteam/a"', () => {
69
+ expect(() => verifyConfiguration([
70
+ actor({ folder: 'actors/a', actorFullName: 'myteam/abc' }),
71
+ actor({ folder: 'actors/b', actorFullName: 'myteam/ABC' }),
72
+ ])).not.toThrow();
73
+ });
74
+ it('reports every collision at once instead of stopping at the first', () => {
75
+ const message = (() => {
76
+ try {
77
+ verifyConfiguration([
78
+ actor({ folder: 'actors/a', actorFullName: 'myteam/actor-a' }),
79
+ actor({ folder: 'actors/a', actorFullName: 'myteam/actor-b' }),
80
+ actor({ folder: 'actors/c', actorFullName: 'myteam/actor-c' }),
81
+ actor({ folder: 'actors/d', actorFullName: 'myteam/actor-c' }),
82
+ ]);
83
+ return '';
84
+ }
85
+ catch (err) {
86
+ return err.message;
87
+ }
88
+ })();
89
+ expect(message.split('\n')).toEqual([
90
+ 'Duplicate folder "actors/a". Each actor must have a unique folder.',
91
+ 'Duplicate actor "myteam/actor-c". Each entry must point at a different actor.',
92
+ ]);
93
+ });
94
+ it('reports both problems for an entry that duplicates a folder and an actor at once', () => {
95
+ expect(() => verifyConfiguration([actor(), actor()])).toThrow(/Duplicate folder[\s\S]*Duplicate actor/);
96
+ });
97
+ it('accepts an empty configuration', () => {
98
+ expect(verifyConfiguration([])).toEqual([]);
99
+ });
100
+ });
101
+ describe('parseConfigFile', () => {
102
+ it('validates and normalizes a plain object without touching the filesystem', () => {
103
+ expect(parseConfigFile({ actors: [actor({ folder: 'actors/shopify/' })] })).toEqual([
104
+ actor({ folder: 'actors/shopify', overrideActorContext: undefined }),
105
+ ]);
106
+ });
107
+ it('parses a grouped config file, which needs mode to be stripped', () => {
108
+ expect(parseConfigFile({
109
+ mode: CONFIG_FILE_STRATEGY.GROUPED,
110
+ groups: {
111
+ myteam: {
112
+ actors: [{ folder: 'actors/shopify/', actorFullName: 'myteam/shopify' }],
113
+ tokenEnvVar: 'APIFY_TOKEN',
114
+ },
115
+ },
116
+ })).toEqual([
117
+ actor({ folder: 'actors/shopify', actorFullName: 'myteam/shopify', overrideActorContext: undefined }),
118
+ ]);
119
+ });
120
+ it('surfaces cross-entry violations from verifyConfiguration', () => {
121
+ expect(() => parseConfigFile({
122
+ actors: [
123
+ actor({ actorFullName: 'myteam/actor-a', folder: 'collide/collide' }),
124
+ actor({ actorFullName: 'myteam/actor-b', folder: 'collide/collide' }),
125
+ ],
126
+ })).toThrow(/Duplicate folder/);
127
+ });
128
+ });
129
+ //# sourceMappingURL=parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.test.js","sourceRoot":"","sources":["../../../../../../test/unit/bin/utils/config/parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.test.d.ts","sourceRoot":"","sources":["../../../../../../../test/unit/bin/utils/config/structures/base.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ACTOR_NAME, USERNAME } from '@apify/consts';
3
+ import { ACTOR_FULL_NAME_REGEX } from '../../../../../../bin/utils/config/structures/base.js';
4
+ // ACTOR_FULL_NAME_REGEX is spliced together from two platform constants by stripping their anchors
5
+ // and joining them with a "/". These tests are about the splice, not about re-testing the platform's
6
+ // own rules: an anchor left behind, an anchor stripped too eagerly, or the actor-name alternation
7
+ // losing its parentheses would all produce a regex that still looks plausible and matches the wrong
8
+ // things. The cases below are the ones that tell those failures apart.
9
+ describe('ACTOR_FULL_NAME_REGEX', () => {
10
+ it.each([
11
+ ['apify/web-scraper'],
12
+ ['myteam/shopify'],
13
+ ['my.team/web-scraper'],
14
+ ['my-team/shopify'],
15
+ ['my_team/a1'],
16
+ // ACTOR_NAME's first alternative — a single character — is a legal actor name on its own.
17
+ ['myteam/a'],
18
+ ['myteam/a--b'],
19
+ ])('accepts %s', (fullName) => {
20
+ expect(ACTOR_FULL_NAME_REGEX.test(fullName)).toBe(true);
21
+ });
22
+ it.each([
23
+ ['there is no slash', 'shopify'],
24
+ ['the owner half is empty', '/shopify'],
25
+ ['the actor half is empty', 'myteam/'],
26
+ ['there are two slashes', 'myteam//shopify'],
27
+ ['there is a third segment', 'myteam/shopify/extra'],
28
+ ['the owner holds a space', 'my team/shopify'],
29
+ ['the actor name starts with a hyphen', 'myteam/-shopify'],
30
+ ['the actor name ends with a hyphen', 'myteam/shopify-'],
31
+ ['the actor name holds an underscore', 'myteam/web_scraper'],
32
+ ['the actor name holds a dot', 'myteam/web.scraper'],
33
+ ])('rejects a name where %s', (_name, fullName) => {
34
+ expect(ACTOR_FULL_NAME_REGEX.test(fullName)).toBe(false);
35
+ });
36
+ // Both halves arrive anchored and get de-anchored so they can be joined; the composed regex has to
37
+ // put the anchors back. Without them these all match on a substring.
38
+ it.each([
39
+ ['leading text', 'see myteam/shopify'],
40
+ ['trailing text', 'myteam/shopify here'],
41
+ ['a leading newline', '\nmyteam/shopify'],
42
+ ['a trailing newline', 'myteam/shopify\n'],
43
+ ['surrounding whitespace', ' myteam/shopify '],
44
+ ])('matches the whole string, so it rejects %s', (_name, fullName) => {
45
+ expect(ACTOR_FULL_NAME_REGEX.test(fullName)).toBe(false);
46
+ });
47
+ // ACTOR_NAME's source is an alternation, "(A|B)". It survives the splice only because the platform
48
+ // wrote it parenthesized — lose those parens and the regex becomes "^owner/A|B$", where the "B"
49
+ // branch matches a bare actor name with no owner at all.
50
+ it('keeps the actor-name alternation from swallowing the owner half', () => {
51
+ expect(ACTOR_NAME.REGEX.source).toMatch(/^\^\(.*\)\$$/);
52
+ expect(ACTOR_FULL_NAME_REGEX.test('shopify')).toBe(false);
53
+ expect(ACTOR_FULL_NAME_REGEX.test('a')).toBe(false);
54
+ });
55
+ // The owner half carries a {min,max} quantifier, the one part of either source that a sloppy strip
56
+ // could eat. Bounds come from the constants so this stays honest if the platform moves them.
57
+ it("enforces the platform's username length bounds", () => {
58
+ const owner = (length) => `${'a'.repeat(length)}/shopify`;
59
+ expect(ACTOR_FULL_NAME_REGEX.test(owner(USERNAME.MIN_LENGTH))).toBe(true);
60
+ expect(ACTOR_FULL_NAME_REGEX.test(owner(USERNAME.MIN_LENGTH - 1))).toBe(false);
61
+ expect(ACTOR_FULL_NAME_REGEX.test(owner(USERNAME.MAX_LENGTH))).toBe(true);
62
+ expect(ACTOR_FULL_NAME_REGEX.test(owner(USERNAME.MAX_LENGTH + 1))).toBe(false);
63
+ });
64
+ // `.source` carries the pattern and none of the flags, so the flags have to be re-applied by hand.
65
+ // USERNAME.REGEX is declared /i and the platform does accept "MyTeam" as a username; drop that on
66
+ // the way here and the owner half silently becomes stricter than the thing it was copied from.
67
+ it('accepts either half in any case, the way the platform does', () => {
68
+ expect(USERNAME.REGEX.flags).toContain('i');
69
+ expect(ACTOR_FULL_NAME_REGEX.flags).toContain('i');
70
+ expect(ACTOR_FULL_NAME_REGEX.test('myteam/Shopify')).toBe(true);
71
+ expect(ACTOR_FULL_NAME_REGEX.test('MyTeam/shopify')).toBe(true);
72
+ });
73
+ });
74
+ //# sourceMappingURL=base.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.test.js","sourceRoot":"","sources":["../../../../../../../test/unit/bin/utils/config/structures/base.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=grouped.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grouped.test.d.ts","sourceRoot":"","sources":["../../../../../../../test/unit/bin/utils/config/structures/grouped.test.ts"],"names":[],"mappings":""}