Skip to content

Commit 51dd246

Browse files
committed
Make it possible to set response sequence per each test if needed
1 parent 5d4c1f4 commit 51dd246

19 files changed

+129
-110
lines changed

src/resource_clients/actor.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,13 @@ export class ActorClient extends ResourceClient {
156156

157157
const streamedLog = await newRunClient.getStreamedLog({ toLog: options?.log });
158158
let streamingPromise: Promise<void> | undefined;
159+
let actorRun: Promise<ActorRun> | undefined;
159160
try {
160161
streamingPromise = streamedLog?.start();
161-
return this.apifyClient.run(id).waitForFinish({ waitSecs });
162+
actorRun = this.apifyClient.run(id).waitForFinish({ waitSecs });
163+
return actorRun;
162164
} finally {
165+
await actorRun;
163166
await streamedLog?.stop();
164167
await streamingPromise;
165168
}

test/_helper.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const { launchPuppeteer, puppeteerUtils } = require('@crawlee/puppeteer');
22

3-
const mockServer = require('./mock_server/server');
3+
const { mockServer } = require('./mock_server/server');
44

55
class Browser {
66
async start() {

test/actors.test.js

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
const { Browser, validateRequest, DEFAULT_OPTIONS } = require('./_helper');
22
const { ActorListSortBy, ApifyClient, LoggerActorRedirect } = require('apify-client');
33
const { stringifyWebhooksToBase64 } = require('../src/utils');
4-
const mockServer = require('./mock_server/server');
4+
const { mockServer, createDefaultApp } = require('./mock_server/server');
55
const c = require('ansi-colors');
6-
const { MOCKED_ACTOR_LOGS_PROCESSED, statusGenerator } = require('./mock_server/consts');
6+
const { MOCKED_ACTOR_LOGS_PROCESSED, StatusGenerator } = require('./mock_server/consts');
77
const { Log, LEVELS } = require('@apify/log');
8+
const express = require('express');
89

910
describe('Actor methods', () => {
1011
let baseUrl;
@@ -676,24 +677,40 @@ describe('Actor methods', () => {
676677

677678
describe('Run actor with redirected logs', () => {
678679
let baseUrl;
680+
let client;
681+
const statusGenerator = new StatusGenerator();
679682

680683
beforeAll(async () => {
681-
// Ensure that the tests that use characters like á are correctly decoded in console.
682-
process.stdout.setDefaultEncoding('utf8');
683-
const server = await mockServer.start();
684+
// Use custom router for the tests
685+
const router = express.Router();
686+
// Set up a status generator to simulate run status changes. It will be reset for each test.
687+
router.get('/actor-runs/redirect-run-id', async (req, res) => {
688+
// Delay the response to give the actor time to run and produce expected logs
689+
await new Promise((resolve) => {
690+
setTimeout(resolve, 10);
691+
});
692+
const [status, statusMessage] = statusGenerator.next().value;
693+
res.json({ data: { id: 'redirect-run-id', actId: 'redirect-actor-id', status, statusMessage } });
694+
});
695+
const app = createDefaultApp(router);
696+
const server = await mockServer.start(undefined, app);
684697
baseUrl = `http://localhost:${server.address().port}`;
685698
});
686699

687-
let client;
700+
afterAll(async () => {
701+
await Promise.all([mockServer.close()]);
702+
});
703+
688704
beforeEach(async () => {
689-
statusGenerator.reset();
690705
client = new ApifyClient({
691706
baseUrl,
692707
maxRetries: 0,
693708
...DEFAULT_OPTIONS,
694709
});
695710
});
696711
afterEach(async () => {
712+
// Reset the generator to so that the next test starts fresh
713+
statusGenerator.reset();
697714
client = null;
698715
});
699716

test/apify_api_error.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const { Browser, DEFAULT_OPTIONS } = require('./_helper');
2-
const mockServer = require('./mock_server/server');
2+
const { mockServer } = require('./mock_server/server');
33
const { ApifyClient } = require('apify-client');
44

55
describe('ApifyApiError', () => {

test/builds.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const { Browser, validateRequest, DEFAULT_OPTIONS } = require('./_helper');
22
const { ApifyClient } = require('apify-client');
3-
const mockServer = require('./mock_server/server');
3+
const { mockServer } = require('./mock_server/server');
44

55
describe('Build methods', () => {
66
let baseUrl;

test/datasets.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const { Browser, validateRequest, DEFAULT_OPTIONS } = require('./_helper');
22
const { ApifyClient } = require('apify-client');
3-
const mockServer = require('./mock_server/server');
3+
const { mockServer } = require('./mock_server/server');
44

55
describe('Dataset methods', () => {
66
let baseUrl;

test/http_client.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const { Browser } = require('./_helper');
2-
const mockServer = require('./mock_server/server');
2+
const { mockServer } = require('./mock_server/server');
33
const { ApifyClient } = require('apify-client');
44

55
describe('HttpClient', () => {

test/key_value_stores.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const { Readable } = require('node:stream');
22

33
const { Browser, validateRequest, DEFAULT_OPTIONS } = require('./_helper');
44
const { ApifyClient } = require('apify-client');
5-
const mockServer = require('./mock_server/server');
5+
const { mockServer } = require('./mock_server/server');
66

77
describe('Key-Value Store methods', () => {
88
let baseUrl;

test/logs.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const { Browser, validateRequest, DEFAULT_OPTIONS } = require('./_helper');
22
const { ApifyClient } = require('apify-client');
3-
const mockServer = require('./mock_server/server');
3+
const { mockServer } = require('./mock_server/server');
44

55
describe('Log methods', () => {
66
let baseUrl;

test/mock_server/consts.js

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,24 +55,21 @@ class StatusGenerator {
5555
}
5656

5757
reset() {
58-
this.generator = (() => {
59-
// Iterate over MOCKED_ACTOR_STATUSES and keep returning the last status when exhausted
60-
let i = 0;
61-
return () => {
62-
if (i >= MOCKED_ACTOR_STATUSES.length) {
63-
return MOCKED_ACTOR_STATUSES[MOCKED_ACTOR_STATUSES.length - 1];
64-
}
65-
return MOCKED_ACTOR_STATUSES[i++];
66-
};
67-
})();
58+
function* getStatusGenerator() {
59+
for (const status of MOCKED_ACTOR_STATUSES) {
60+
yield status;
61+
}
62+
// After exhausting, keep yielding the last status
63+
while (true) {
64+
yield MOCKED_ACTOR_STATUSES[MOCKED_ACTOR_STATUSES.length - 1];
65+
}
66+
}
67+
this.generator = getStatusGenerator();
6868
}
6969

7070
next() {
71-
return this.generator();
71+
return this.generator.next();
7272
}
7373
}
7474

75-
// Test can call statusGenerator.reset() to receive the statuses from the start
76-
const statusGenerator = new StatusGenerator();
77-
78-
module.exports = { MOCKED_ACTOR_LOGS, MOCKED_ACTOR_LOGS_PROCESSED, MOCKED_ACTOR_STATUSES, statusGenerator };
75+
module.exports = { MOCKED_ACTOR_LOGS, MOCKED_ACTOR_LOGS_PROCESSED, MOCKED_ACTOR_STATUSES, StatusGenerator };

0 commit comments

Comments
 (0)