110 lines
3.3 KiB
JavaScript
110 lines
3.3 KiB
JavaScript
const assert = require('assert');
|
|
const { BannedChannelsController } = require('../../lib/controller/banned-channels');
|
|
const dbChannels = require('../../lib/database/channels');
|
|
const testDB = require('../testutil/db').testDB;
|
|
const { EventEmitter } = require('events');
|
|
|
|
require('../../lib/database').init(testDB);
|
|
|
|
const testBan = {
|
|
name: 'ban_test_1',
|
|
externalReason: 'because I said so',
|
|
internalReason: 'illegal content',
|
|
bannedBy: 'admin'
|
|
};
|
|
|
|
async function cleanupTestBan() {
|
|
return dbChannels.removeBannedChannel(testBan.name);
|
|
}
|
|
|
|
describe('BannedChannelsController', () => {
|
|
let controller;
|
|
let messages;
|
|
|
|
beforeEach(async () => {
|
|
await cleanupTestBan();
|
|
messages = new EventEmitter();
|
|
controller = new BannedChannelsController(
|
|
dbChannels,
|
|
messages
|
|
);
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await cleanupTestBan();
|
|
});
|
|
|
|
it('bans a channel', async () => {
|
|
assert.strictEqual(await controller.getBannedChannel(testBan.name), null);
|
|
|
|
let received = null;
|
|
messages.once('ChannelBanned', cb => {
|
|
received = cb;
|
|
});
|
|
|
|
await controller.banChannel(testBan);
|
|
let info = await controller.getBannedChannel(testBan.name);
|
|
for (let field of Object.keys(testBan)) {
|
|
// Consider renaming parameter to avoid this branch
|
|
if (field === 'name') {
|
|
assert.strictEqual(info.channelName, testBan.name);
|
|
} else {
|
|
assert.strictEqual(info[field], testBan[field]);
|
|
}
|
|
}
|
|
|
|
assert.notEqual(received, null);
|
|
assert.strictEqual(received.channel, testBan.name);
|
|
assert.strictEqual(received.externalReason, testBan.externalReason);
|
|
});
|
|
|
|
it('updates an existing ban', async () => {
|
|
let received = [];
|
|
messages.on('ChannelBanned', cb => {
|
|
received.push(cb);
|
|
});
|
|
|
|
await controller.banChannel(testBan);
|
|
|
|
let testBan2 = { ...testBan, externalReason: 'because of reasons' };
|
|
await controller.banChannel(testBan2);
|
|
|
|
let info = await controller.getBannedChannel(testBan2.name);
|
|
for (let field of Object.keys(testBan2)) {
|
|
// Consider renaming parameter to avoid this branch
|
|
if (field === 'name') {
|
|
assert.strictEqual(info.channelName, testBan2.name);
|
|
} else {
|
|
assert.strictEqual(info[field], testBan2[field]);
|
|
}
|
|
}
|
|
|
|
assert.deepStrictEqual(received, [
|
|
{
|
|
channel: testBan.name,
|
|
externalReason: testBan.externalReason
|
|
},
|
|
{
|
|
channel: testBan2.name,
|
|
externalReason: testBan2.externalReason
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('unbans a channel', async () => {
|
|
let received = null;
|
|
messages.once('ChannelUnbanned', cb => {
|
|
received = cb;
|
|
});
|
|
|
|
await controller.banChannel(testBan);
|
|
await controller.unbanChannel(testBan.name, testBan.bannedBy);
|
|
|
|
let info = await controller.getBannedChannel(testBan.name);
|
|
assert.strictEqual(info, null);
|
|
|
|
assert.notEqual(received, null);
|
|
assert.strictEqual(received.channel, testBan.name);
|
|
});
|
|
});
|