Skip to content

Commit b04e885

Browse files
committed
Add an automated test for Electron interception
1 parent a88a986 commit b04e885

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

test/interceptors/electron.spec.ts

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import * as _ from 'lodash';
2+
import * as os from 'os';
3+
import * as fs from 'fs';
4+
import { CompletedRequest } from 'mockttp';
5+
import { setupInterceptor, itIsAvailable, itCanBeActivated } from './interceptor-test-utils';
6+
7+
import { expect } from 'chai';
8+
9+
const interceptorSetup = setupInterceptor('electron');
10+
11+
// We use slack as a test app. Doesn't really matter what it is, but
12+
// slack is pretty common, easy to kill & restart, and fairly representative.
13+
const electronAppPath: string | undefined = [
14+
'/usr/bin/slack',
15+
'/Applications/Slack.app/Contents/MacOS/Slack',
16+
`${os.homedir()}\\AppData\\Local\\slack\\slack.exe`
17+
].find((path) => fs.existsSync(path));
18+
19+
describe('Electron interception', function () {
20+
this.timeout(5000000);
21+
22+
beforeEach(async () => {
23+
const { server } = await interceptorSetup;
24+
await server.start();
25+
await server.anyRequest().thenPassThrough();
26+
});
27+
28+
afterEach(async () => {
29+
const { server, interceptor } = await interceptorSetup;
30+
31+
await interceptor.deactivate(server.port);
32+
await server.stop();
33+
});
34+
35+
itIsAvailable(interceptorSetup);
36+
37+
it('can be activated', async function () {
38+
if (!electronAppPath) this.skip();
39+
40+
const { interceptor, server } = await interceptorSetup;
41+
42+
expect(interceptor.isActive(server.port)).to.equal(false);
43+
44+
await interceptor.activate(server.port, {
45+
pathToApplication: electronAppPath
46+
});
47+
expect(interceptor.isActive(server.port)).to.equal(true);
48+
expect(interceptor.isActive(server.port + 1)).to.equal(false);
49+
50+
await interceptor.deactivate(server.port);
51+
expect(interceptor.isActive(server.port)).to.equal(false);
52+
});
53+
54+
it('successfully makes requests', async function () {
55+
if (!electronAppPath) this.skip();
56+
57+
const { server, interceptor } = await interceptorSetup;
58+
59+
const slackRequestReceived = new Promise<CompletedRequest>((resolve) =>
60+
server.on('request', (req) => {
61+
if (req.url.includes('slack.com')) {
62+
resolve(req);
63+
}
64+
})
65+
);
66+
67+
await interceptor.activate(server.port, {
68+
pathToApplication: electronAppPath
69+
});
70+
71+
// Only resolves if a slack request is intercepted
72+
await slackRequestReceived;
73+
});
74+
});

0 commit comments

Comments
 (0)