Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/plugins/execute-js/test/dependencies.test.ts
2581 views
1
import { Agent, LocationStatus } from 'secret-agent';
2
import { Helpers } from '@secret-agent/testing';
3
import { ITestKoaServer } from '@secret-agent/testing/helpers';
4
import ExecuteJsPlugin from '@secret-agent/execute-js-plugin';
5
import Core from '@secret-agent/core';
6
import ConnectionToClient from '@secret-agent/core/server/ConnectionToClient';
7
import CoreServer from '@secret-agent/core/server';
8
9
let koaServer: ITestKoaServer;
10
let connectionToClient: ConnectionToClient;
11
let coreServer;
12
beforeAll(async () => {
13
coreServer = new CoreServer();
14
await coreServer.listen({ port: 0 });
15
koaServer = await Helpers.runKoaServer();
16
connectionToClient = Core.addConnection();
17
Helpers.onClose(() => {
18
connectionToClient.disconnect();
19
koaServer.close();
20
coreServer.close();
21
}, true);
22
});
23
24
afterAll(Helpers.afterAll);
25
afterEach(Helpers.afterEach);
26
27
test('it should work even if dependency not registered through Core.use', async () => {
28
koaServer.get('/test2', ctx => {
29
ctx.body = `<body>
30
<script>
31
window.testRun = function() {
32
return 'ItWorks';
33
}
34
</script>
35
</body>`;
36
});
37
38
const userAgent =
39
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.165 Safari/537.36';
40
const agent = new Agent({
41
userAgent,
42
connectionToCore: {
43
host: await coreServer.address,
44
},
45
});
46
Helpers.onClose(() => agent.close(), true);
47
agent.use(ExecuteJsPlugin);
48
49
await agent.goto(`${koaServer.baseUrl}/test2`);
50
await agent.activeTab.waitForLoad(LocationStatus.DomContentLoaded);
51
const response = await agent.executeJs(() => {
52
// @ts-ignore
53
return window.testRun();
54
});
55
expect(response).toEqual('ItWorks');
56
await agent.close();
57
});
58
59
test('it should fail if dependency not registered and allowDynamicPluginLoading = false', async () => {
60
koaServer.get('/test2', ctx => {
61
ctx.body = `<body>
62
<script>
63
window.testRun = function() {
64
return 'ItWorks';
65
}
66
</script>
67
</body>`;
68
});
69
70
Core.allowDynamicPluginLoading = false;
71
const userAgent =
72
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.165 Safari/537.36';
73
const agent = new Agent({
74
userAgent,
75
connectionToCore: {
76
host: await coreServer.address,
77
},
78
});
79
Helpers.onClose(() => agent.close(), true);
80
agent.use(ExecuteJsPlugin);
81
82
await agent.goto(`${koaServer.baseUrl}/test2`);
83
await agent.activeTab.waitForLoad(LocationStatus.DomContentLoaded);
84
const response = await agent.executeJs(() => {
85
// @ts-ignore
86
return window.testRun();
87
});
88
expect(response).toEqual(undefined);
89
await agent.close();
90
});
91
92