apify-test-tools 0.8.1-beta.1 → 0.8.1-beta.3

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
@@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file.
8
8
  ### 🐛 Bug Fixes
9
9
 
10
10
  - Use long commit SHA in release workflow [internal] ([#86](https://github.com/apify/apify-test-tools/pull/86)) ([123a8d0](https://github.com/apify/apify-test-tools/commit/123a8d008f730c1cf4a144e4a5367ad4075ee232)) by [@fnesveda](https://github.com/fnesveda)
11
+ - **cli:** GitHub action rerun ignores last validated commit and reruns all commits ([#92](https://github.com/apify/apify-test-tools/pull/92)) ([4200f76](https://github.com/apify/apify-test-tools/commit/4200f76d0502c8de96704b86e0384dd29ed3d1cb)) by [@metalwarrior665](https://github.com/metalwarrior665), closes [#91](https://github.com/apify/apify-test-tools/issues/91)
11
12
 
12
13
 
13
14
  <!-- git-cliff-unreleased-end -->
package/README.md CHANGED
@@ -97,87 +97,35 @@ jobs:
97
97
  secrets: inherit
98
98
  ```
99
99
 
100
- ## Differences in writing tests
101
-
102
- ---
100
+ ## Writing tests
103
101
 
104
102
  ### Test structure
105
103
 
106
- To run the tests concurrently, we had to start the run outside of `it` and then call `await` inside. This is now no longer needed and everything can be inside `it` aka `testActor`.
107
-
108
- Before:
109
-
110
- ```ts
111
- ({ it, xit, run, expect, expectAsync, input, describe }: TestSpecInputs) => {
112
- describe('test', () => {
113
- {
114
- const runPromise = run({ actorId, input })
115
- it('actor test 1', async () => {
116
- const runResult = await runPromise;
117
-
118
- // your checks
119
- });
120
- }
121
-
122
- {
123
- const runPromise = run({ actorId, input })
124
- it('actor test 2', async () => {
125
- const runResult = await runPromise;
126
-
127
- // your checks
128
- });
129
- }
130
- });
131
- })
132
- ```
133
-
134
- After:
104
+ `testActor` runs the actor and provides extended `expect` and `run` inside the callback.
135
105
 
136
106
  ```ts
137
107
  import { describe, testActor } from 'apify-test-tools';
138
108
 
139
109
  describe('test', () => {
140
- testActor(actorId, 'actor test 1', async ({ expect, run }) => {
141
- const runResult = await run({ input })
110
+ testActor(actorId, 'actor test 1', async ({ expect, run }) => {
111
+ const runResult = await run({ input });
142
112
 
143
- // your checks
144
- )};
113
+ // your checks
114
+ });
145
115
 
146
- testActor(actorId, 'actor test 2', async ({ expect, run }) => {
147
- const runResult = await run({ input })
116
+ testActor(actorId, 'actor test 2', async ({ expect, run }) => {
117
+ const runResult = await run({ input });
148
118
 
149
- // your checks
150
- )};
151
- })
119
+ // your checks
120
+ });
121
+ });
152
122
  ```
153
123
 
154
- `testActor` extends `expect` with couple of custom matchers (e.g. `toFinishWith`) and provides `run` function call the correct actor, based on it’s first parameter
155
-
156
124
  ---
157
125
 
158
126
  ### Validating basic run attributes
159
127
 
160
- Before:
161
-
162
- ```ts
163
- await expectAsync(runResult).toHaveStatus('SUCCEEDED');
164
-
165
- await expectAsync(runResult).withLog((log) => {
166
- expect(log).not.toContain('ReferenceError');
167
- expect(log).not.toContain('TypeError');
168
- });
169
-
170
- await expectAsync(runResult).withStatistics((stats) => {
171
- expect(stats.requestsRetries).withContext(runResult.format('Request retries')).toBeLessThan(3);
172
- expect(stats.crawlerRuntimeMillis).withContext(runResult.format('Run time')).toBeWithinRange(600, 600_000);
173
- });
174
-
175
- await expectAsync(runResult).withDataset(({ dataset }) => {
176
- expect(dataset.items?.length).withContext(runResult.format('Dataset cleanItemCount')).toBe(100);
177
- });
178
- ```
179
-
180
- After:
128
+ `toFinishWith` validates common run properties in a single call:
181
129
 
182
130
  ```ts
183
131
  await expect(runResult).toFinishWith({
@@ -222,14 +170,6 @@ await expect(runResult).toFinishWith({
222
170
 
223
171
  ### Custom validations
224
172
 
225
- Before:
226
-
227
- ```ts
228
- expect(place.title).withContext(runResult.format(`London Eye's title`)).toEqual('lastminute.com London Eye');
229
- ```
230
-
231
- After:
232
-
233
173
  ```ts
234
174
  expect(place.title, `London Eye's title`).toEqual('lastminute.com London Eye');
235
175
  ```
@@ -238,12 +178,208 @@ expect(place.title, `London Eye's title`).toEqual('lastminute.com London Eye');
238
178
 
239
179
  ### Custom validation functions
240
180
 
241
- You can now create your own functions wrapping a common validation logic in e.g. `test/platform/utils.ts` and import it in test files.
181
+ You can create your own functions wrapping a common validation logic in e.g. `test/platform/utils.ts` and import it in test files.
242
182
 
243
183
  ```ts
244
184
  import { ExpectStatic } from 'apify-test-tools'
245
185
 
246
186
  export const validateItem = (expect: ExpectStatic, item: any) {
247
- expect(item.title, 'Item title').toBeString();
187
+ expect(item.title, 'Item title').toBeString();
248
188
  }
249
189
  ```
190
+
191
+ ---
192
+
193
+ ### Test options
194
+
195
+ You can pass options as the fourth argument to `testActor`:
196
+
197
+ ```ts
198
+ testActor(
199
+ actorId,
200
+ 'slow actor test',
201
+ async ({ expect, run }) => {
202
+ const runResult = await run({ input });
203
+ await expect(runResult).toFinishWith({ datasetItemCount: 100 });
204
+ },
205
+ {
206
+ timeout: 2 * 60 * 60 * 1000, // 2 hours (default is 1 hour)
207
+ retry: 3, // retry up to 3 times (default is 1)
208
+ },
209
+ );
210
+ ```
211
+
212
+ ---
213
+
214
+ ### Using prefilled input
215
+
216
+ If the actor has a prefilled input on the platform, you can merge it with your test input:
217
+
218
+ ```ts
219
+ testActor(actorId, 'with prefilled input', async ({ expect, run }) => {
220
+ const runResult = await run({
221
+ prefilledInput: true,
222
+ input: { maxItems: 10 }, // merged on top of the prefilled input
223
+ });
224
+ await expect(runResult).toFinishWith({ datasetItemCount: 10 });
225
+ });
226
+ ```
227
+
228
+ ---
229
+
230
+ ### Testing an existing run
231
+
232
+ You can skip starting a new run and validate an existing one by passing `runId`:
233
+
234
+ ```ts
235
+ testActor(actorId, 'validate existing run', async ({ expect, run }) => {
236
+ const runResult = await run({ runId: 'some-run-id' });
237
+ await expect(runResult).toFinishWith({ datasetItemCount: 100 });
238
+ });
239
+ ```
240
+
241
+ ---
242
+
243
+ ### Accessing run data
244
+
245
+ `RunTestResult` provides methods to access the run's data:
246
+
247
+ ```ts
248
+ testActor(actorId, 'check dataset items', async ({ expect, run }) => {
249
+ const runResult = await run({ input });
250
+
251
+ // Access dataset items
252
+ const { items } = await runResult.getDataset();
253
+ expect(items[0].title).toBeNonEmptyString();
254
+
255
+ // Access run log
256
+ const log = await runResult.getLog();
257
+ expect(log).toContain('Crawl finished');
258
+
259
+ // Access crawler statistics
260
+ const stats = await runResult.getStatistics();
261
+ expect(stats?.requestsFinished).toBeGreaterThan(0);
262
+
263
+ // Access key-value store
264
+ const kvs = runResult.getKeyValueStoreClient();
265
+ const record = await kvs.getRecord('OUTPUT');
266
+
267
+ // Access run info (refreshed from API)
268
+ const runInfo = await runResult.getRunInfo();
269
+ });
270
+ ```
271
+
272
+ ---
273
+
274
+ ### Testing standby actors
275
+
276
+ Use `testStandbyActor` for actors that support standby mode:
277
+
278
+ ```ts
279
+ import { describe, testStandbyActor } from 'apify-test-tools';
280
+
281
+ describe('standby tests', () => {
282
+ testStandbyActor(actorId, 'standby request', async ({ expect, callStandby }) => {
283
+ const { data, status } = await callStandby({
284
+ input: { query: 'test' },
285
+ path: '/search',
286
+ headers: { 'Content-Type': 'application/json' },
287
+ });
288
+
289
+ expect(status).toBe(200);
290
+ expect(data.results).toBeNonEmptyArray();
291
+ });
292
+ });
293
+ ```
294
+
295
+ ---
296
+
297
+ ### Custom matchers
298
+
299
+ `testActor` extends `expect` with the following custom matchers:
300
+
301
+ - `toBeArray()` / `toBeEmptyArray()` / `toBeNonEmptyArray()`
302
+ - `toBeString()` / `toBeNonEmptyString()` / `toStartWith(prefix)`
303
+ - `toBeNumber()` / `toBeWholeNumber()` / `toBeWithinRange(min, max)`
304
+ - `toBeBoolean()` / `toBeTrue()` / `toBeFalse()`
305
+ - `toBeObject()` / `toBeNonEmptyObject()`
306
+ - `toFinishWith(options)` - validates run status, duration, dataset, logs, etc.
307
+
308
+ ## CLI (`apify-test-tools` bin)
309
+
310
+ The package includes a CLI binary used by CI workflows to build Actors, detect changes, and report test results. You can also run it locally.
311
+
312
+ ### Running locally
313
+
314
+ Running the testing library locally is useful when you only want to update the testing code in /test because you can iterate on it without pushing new code to the remote.
315
+
316
+ If you don't need to change any source files and only iterate on /test code, you can skip steps 1-4. But if you want to test vs changed /src, you have to push that GitHub branch since it needs to build the Actors with that code.
317
+
318
+ The main local flow is:
319
+
320
+ 1. Switch to a dummy branch that you will push and can later delete
321
+ 2. `npm i apify-test-tools@latest -D`
322
+ 3. Push your code (changes you want to test)
323
+ 4. Build Actors on Apify (with your new code)
324
+ 5. Run tests against those builds. You can change tests and run on the same builds.
325
+
326
+ `cd` into the actor repository you want to work with (or use `--workspace`).
327
+
328
+ #### 4. Build affected Actors
329
+
330
+ If you want to test vs existing src code, you can skip this and instead construct the output JSON manually from existing builds only for the Actors you need to test.
331
+
332
+ Requires `APIFY_TOKEN_<USERNAME>` for all Apify users that own your Actors (e.g. `apify`, `compass`, `lukaskrivka` users). The username is derived from the actor name — uppercased with non-word chars replaced by `_` (e.g. Actor `john.doe/my-actor` needs `APIFY_TOKEN_JOHN_DOE`).
333
+
334
+ ```bash
335
+ APIFY_TOKEN_JOHN_DOE=<token> \
336
+ GITHUB_WORKSPACE=. \
337
+ npx apify-test-tools build \
338
+ --target-branch origin/master \
339
+ --source-branch origin/my-dummy-branch \
340
+ --dry-run
341
+ ```
342
+
343
+ Remove `--dry-run` to actually trigger builds and update the branch names/ The command outputs a JSON array of build objects to stdout:
344
+
345
+ ```json
346
+ [{ "buildId": "...", "actorId": "...", "buildNumber": "...", "actorName": "john.doe/my-actor" }]
347
+ ```
348
+
349
+ #### 5. Run tests against the builds
350
+
351
+ Pass the build output as `ACTOR_BUILDS` and provide `TESTER_APIFY_TOKEN`. The token can point to your own account (if you have enough memory) or you can use the testing account (xRGg9iAfJSymqartk).
352
+
353
+ If you want to run only certain tests, change the `test/platform` to be more specific.
354
+
355
+ ```bash
356
+ ACTOR_BUILDS='<JSON output from build command>' \
357
+ TESTER_APIFY_TOKEN=<token> \
358
+ RUN_PLATFORM_TESTS=1 \
359
+ npx vitest --run --maxConcurrency 20 --fileParallelism=true --maxWorkers 100 test/platform
360
+ ```
361
+
362
+ #### Full example
363
+
364
+ ```bash
365
+ # Build and capture output
366
+ BUILDS=$(APIFY_TOKEN_JOHN_DOE=apify_api_xxx \
367
+ GITHUB_WORKSPACE=. \
368
+ npx apify-test-tools build \
369
+ --target-branch origin/master \
370
+ --source-branch origin/my-dummy-branch)
371
+
372
+ # Run tests with the builds
373
+ ACTOR_BUILDS="$BUILDS" \
374
+ TESTER_APIFY_TOKEN=apify_api_yyy \
375
+ RUN_PLATFORM_TESTS=1 \
376
+ npx vitest --run --maxConcurrency 20 --fileParallelism=true --maxWorkers 100 test/platform
377
+ ```
378
+
379
+ #### Dev mode
380
+
381
+ For development on `apify-test-tools` itself, use `tsx` directly:
382
+
383
+ ```bash
384
+ GITHUB_WORKSPACE=local-clone tsx bin/main.ts get-actor-configs
385
+ ```
package/bin/git.ts CHANGED
@@ -8,6 +8,12 @@ const GIT_LOG_FORMAT = ['%H', '%aN<%aE>', '%aD', '%s'].join(GIT_FORMAT_SEPARATOR
8
8
  * Gets the list of changed files between the given commits (inclusive).
9
9
  */
10
10
  export const getChangedFiles = (commits: Commit[]) => {
11
+ // getCommits never returns an empty list (the rerun check returns all commits when the base commit
12
+ // is the branch HEAD, and an empty git range throws when parsing), so this signals a programmer error
13
+ if (commits.length === 0) {
14
+ throw new Error('Cannot get changed files: the commit list is empty. This should never happen.');
15
+ }
16
+
11
17
  const changedFilesString = spawnCommandInGhWorkspace(
12
18
  `git diff --name-only ${commits[0].sha}~..${commits[commits.length - 1].sha}`,
13
19
  );
@@ -92,6 +98,17 @@ export const getCommits = ({ sourceBranch, targetBranch, baseCommit }: Config):
92
98
  const baseCommitSha = parseBaseCommit(baseCommit);
93
99
  const commits = fetchAllBranchCommits(sourceBranch, targetBranch);
94
100
 
101
+ // The last validated (base) commit being the branch HEAD means nothing new was pushed since the last
102
+ // validation — the dev reran the workflow (or force-pushed to the same state) to trigger a clean test
103
+ const headSha = commits[commits.length - 1]?.sha;
104
+ if (baseCommitSha !== undefined && baseCommitSha === headSha) {
105
+ console.error(
106
+ `Detected rerun with the same commit that we already validated. This usually means the user wants to rerun the Action from scratch, ignoring last validated commit ${baseCommitSha} and returning all commits`,
107
+ );
108
+ console.error(`Commits being returned: ${commits.map((c) => c.sha).join(', ')}`);
109
+ return commits;
110
+ }
111
+
95
112
  const baseCommitIndex = commits.findIndex((commit) => commit.sha === baseCommitSha);
96
113
 
97
114
  const hasBaseCommit = baseCommitIndex !== -1;
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGjD,eAAO,MAAM,oBAAoB,uBAAQ,CAAC;AAG1C;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,EAAE,aAQhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,cAAc,MAAM,EAAE,cAAc,MAAM,KAAG,OAiB/E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,GAAI,cAAc,MAAM,EAAE,cAAc,MAAM,KAAG,MAAM,EAK5F,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,aAAa,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAc1E,CAAC;AAWF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,4CAA4C,MAAM,KAAG,MAAM,EAqBrF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,cAAc,MAAM,KAAG,MAYlD,CAAC"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGjD,eAAO,MAAM,oBAAoB,uBAAQ,CAAC;AAG1C;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,EAAE,aAchD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,cAAc,MAAM,EAAE,cAAc,MAAM,KAAG,OAiB/E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,GAAI,cAAc,MAAM,EAAE,cAAc,MAAM,KAAG,MAAM,EAK5F,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,aAAa,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAc1E,CAAC;AAWF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,4CAA4C,MAAM,KAAG,MAAM,EAgCrF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,cAAc,MAAM,KAAG,MAYlD,CAAC"}
package/dist/bin/git.js CHANGED
@@ -5,6 +5,11 @@ const GIT_LOG_FORMAT = ['%H', '%aN<%aE>', '%aD', '%s'].join(GIT_FORMAT_SEPARATOR
5
5
  * Gets the list of changed files between the given commits (inclusive).
6
6
  */
7
7
  export const getChangedFiles = (commits) => {
8
+ // getCommits never returns an empty list (the rerun check returns all commits when the base commit
9
+ // is the branch HEAD, and an empty git range throws when parsing), so this signals a programmer error
10
+ if (commits.length === 0) {
11
+ throw new Error('Cannot get changed files: the commit list is empty. This should never happen.');
12
+ }
8
13
  const changedFilesString = spawnCommandInGhWorkspace(`git diff --name-only ${commits[0].sha}~..${commits[commits.length - 1].sha}`);
9
14
  const changedFiles = changedFilesString.split('\n');
10
15
  console.error(`Changed files (up to 50): ${changedFiles.slice(0, 50).join(', ')}`);
@@ -74,6 +79,14 @@ const fetchAllBranchCommits = (sourceBranch, targetBranch) => {
74
79
  export const getCommits = ({ sourceBranch, targetBranch, baseCommit }) => {
75
80
  const baseCommitSha = parseBaseCommit(baseCommit);
76
81
  const commits = fetchAllBranchCommits(sourceBranch, targetBranch);
82
+ // The last validated (base) commit being the branch HEAD means nothing new was pushed since the last
83
+ // validation — the dev reran the workflow (or force-pushed to the same state) to trigger a clean test
84
+ const headSha = commits[commits.length - 1]?.sha;
85
+ if (baseCommitSha !== undefined && baseCommitSha === headSha) {
86
+ console.error(`Detected rerun with the same commit that we already validated. This usually means the user wants to rerun the Action from scratch, ignoring last validated commit ${baseCommitSha} and returning all commits`);
87
+ console.error(`Commits being returned: ${commits.map((c) => c.sha).join(', ')}`);
88
+ return commits;
89
+ }
77
90
  const baseCommitIndex = commits.findIndex((commit) => commit.sha === baseCommitSha);
78
91
  const hasBaseCommit = baseCommitIndex !== -1;
79
92
  if (hasBaseCommit) {
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,16 @@ describe('getCommits', () => {
39
39
  expect(gitCommandSpy).toHaveBeenCalledTimes(1);
40
40
  expect(gitCommandSpy).toHaveBeenCalledWith(`git log --pretty=format:'%H»¦«%aN<%aE>»¦«%aD»¦«%s' main..feature-branch`);
41
41
  });
42
+ it('should ignore the base commit and return all commits when it is the branch HEAD (rerun or force push)', () => {
43
+ // Act
44
+ const commits = getCommits({ sourceBranch, targetBranch, baseCommit: sha3 });
45
+ // Assert
46
+ expect(commits).toStrictEqual([
47
+ { sha: sha1, author: 'Author1', date: 'Date1', message: 'First Change On Feature' },
48
+ { sha: sha2, author: 'Author1', date: 'Date2', message: 'Second Change On Feature' },
49
+ { sha: sha3, author: 'Author1', date: 'Date3', message: 'Third Change On Feature' },
50
+ ]);
51
+ });
42
52
  it('should return all commits if base commit is not found', () => {
43
53
  // Act
44
54
  const commits = getCommits({ sourceBranch, targetBranch, baseCommit: 'a'.repeat(40) });
@@ -72,6 +82,11 @@ describe('getChangedFiles', () => {
72
82
  expect(gitCommandSpy).toHaveBeenCalledTimes(1);
73
83
  expect(gitCommandSpy).toHaveBeenCalledWith(`git diff --name-only ${firstSha}~..${lastSha}`);
74
84
  });
85
+ it('should throw without running git when the commit list is empty', () => {
86
+ // Act & Assert
87
+ expect(() => getChangedFiles([])).toThrow('Cannot get changed files: the commit list is empty');
88
+ expect(gitCommandSpy).not.toHaveBeenCalled();
89
+ });
75
90
  it('should handle only one commit', () => {
76
91
  // Arrange
77
92
  const onlySha = '1'.repeat(40);
@@ -1 +1 @@
1
- {"version":3,"file":"git.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/git.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/git.test.ts"],"names":[],"mappings":"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"}