Skip to content

Commit

Permalink
Add basic test for SocketModeReceiver constructor (#750)
Browse files Browse the repository at this point in the history
  • Loading branch information
filmaj committed Jul 20, 2021
1 parent b0343da commit 177b66d
Showing 1 changed file with 113 additions and 0 deletions.
113 changes: 113 additions & 0 deletions src/receivers/SocketModeReceiver.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
/* eslint-disable @typescript-eslint/no-unsafe-call, @typescript-eslint/naming-convention */

import 'mocha';
import sinon, { SinonSpy } from 'sinon';
import { assert } from 'chai';
import { Override, mergeOverrides } from '../test-helpers';
import rewiremock from 'rewiremock';
import { Logger, LogLevel } from '@slack/logger';
import { EventEmitter } from 'events';

describe('SocketModeReceiver', function () {
const noopLogger: Logger = {
debug(..._msg: any[]): void {
/* noop */
},
info(..._msg: any[]): void {
/* noop */
},
warn(..._msg: any[]): void {
/* noop */
},
error(..._msg: any[]): void {
/* noop */
},
setLevel(_level: LogLevel): void {
/* noop */
},
getLevel(): LogLevel {
return LogLevel.DEBUG;
},
setName(_name: string): void {
/* noop */
},
};

describe('constructor', () => {
// NOTE: it would be more informative to test known valid combinations of options, as well as invalid combinations
it('should accept supported arguments and use default arguments when not provided', async () => {
// Arrange
const fakeServer = new FakeServer();
const fakeCreateServer = sinon.fake.returns(fakeServer);
const overrides = mergeOverrides(
withHttpCreateServer(fakeCreateServer),
withHttpsCreateServer(sinon.fake.throws('Should not be used.')),
);
const SocketModeReceiver = await importSocketModeReceiver(overrides);

const receiver = new SocketModeReceiver({
appToken: 'my-secret',
logger: noopLogger,
clientId: 'my-clientId',
clientSecret: 'my-client-secret',
stateSecret: 'state-secret',
scopes: ['channels:read'],
installerOptions: {
authVersion: 'v2',
userScopes: ['chat:write'],
},
});
assert.isNotNull(receiver);
assert.isOk(fakeServer.listen.calledWith(3000));
});
});
});

/* Testing Harness */

// Loading the system under test using overrides
async function importSocketModeReceiver(
overrides: Override = {},
): Promise<typeof import('./SocketModeReceiver').default> {
return (await rewiremock.module(() => import('./SocketModeReceiver'), overrides)).default;
}

// Composable overrides
function withHttpCreateServer(spy: SinonSpy): Override {
return {
http: {
createServer: spy,
},
};
}

function withHttpsCreateServer(spy: SinonSpy): Override {
return {
https: {
createServer: spy,
},
};
}

// Fakes
class FakeServer extends EventEmitter {
public on = sinon.fake();
public listen = sinon.fake(() => {
if (this.listeningFailure !== undefined) {
this.emit('error', this.listeningFailure);
return;
}
});
public close = sinon.fake((...args: any[]) => {
setImmediate(() => {
this.emit('close');
setImmediate(() => {
args[0]();
});
});
});

constructor(private listeningFailure?: Error) {
super();
}
}

0 comments on commit 177b66d

Please sign in to comment.