Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/client/test/basic.test.ts
1028 views
1
import Core from '@secret-agent/core/index';
2
import ICoreRequestPayload from '@secret-agent/interfaces/ICoreRequestPayload';
3
import ICoreResponsePayload from '@secret-agent/interfaces/ICoreResponsePayload';
4
import { Helpers } from '@secret-agent/testing';
5
import { Agent, Handler } from '../index';
6
import ConnectionToCore from '../connections/ConnectionToCore';
7
import { readCommandLineArgs } from '../lib/Input';
8
9
afterAll(Helpers.afterAll);
10
11
describe('basic SecretAgent tests', () => {
12
it("doesn't connect until an agent is used for a pre-established connection", async () => {
13
const outgoing = jest.fn<any, any>(async () => {
14
await new Promise(resolve => setTimeout(resolve, 0));
15
});
16
17
class Empty extends ConnectionToCore {
18
async internalSendRequest(payload: ICoreRequestPayload): Promise<void> {
19
return outgoing(payload);
20
}
21
22
protected createConnection = () => Promise.resolve(null);
23
protected destroyConnection = () => Promise.resolve(null);
24
}
25
26
const handler = new Handler(new Empty());
27
await handler.close();
28
29
expect(outgoing).toHaveBeenCalledTimes(0);
30
expect(Object.keys(Core.connections)).toHaveLength(0);
31
});
32
33
it('creates and closes an agent', async () => {
34
const outgoing = jest.fn(
35
async ({ command }: ICoreRequestPayload): Promise<ICoreResponsePayload> => {
36
if (command === 'Session.create') {
37
return {
38
data: { tabId: 'tab-id', sessionId: 'session-id', sessionsDataLocation: '' },
39
};
40
}
41
},
42
);
43
44
class Piper extends ConnectionToCore {
45
async internalSendRequest(payload: ICoreRequestPayload): Promise<void> {
46
const response = await outgoing(payload);
47
this.onMessage({
48
responseId: payload.messageId,
49
data: response?.data ?? {},
50
...(response ?? {}),
51
});
52
}
53
54
protected createConnection = () => Promise.resolve(null);
55
protected destroyConnection = () => Promise.resolve(null);
56
}
57
const agent = await new Agent({ connectionToCore: new Piper() });
58
await agent.close();
59
60
const outgoingCommands = outgoing.mock.calls;
61
expect(outgoingCommands.map(c => c[0].command)).toMatchObject([
62
'Core.connect',
63
'Session.create',
64
'Session.close',
65
]);
66
});
67
68
it('can read command line args', async () => {
69
process.argv[2] = '--input.city=Atlanta';
70
process.argv[3] = '--input.state="GA"';
71
process.argv[4] = '--input.address.number=9145';
72
process.argv[5] = '--input.address.street="Street Street"';
73
expect(readCommandLineArgs()).toEqual({
74
city: 'Atlanta',
75
state: 'GA',
76
address: {
77
number: '9145',
78
street: 'Street Street',
79
},
80
});
81
});
82
});
83
84