mirror of
https://github.com/wassname/talk.git
synced 2026-06-28 17:51:53 +08:00
131 lines
3.1 KiB
JavaScript
131 lines
3.1 KiB
JavaScript
const expect = require('chai').expect;
|
|
const Errors = require('../../../errors');
|
|
const Wordlist = require('../../../services/wordlist');
|
|
const SettingsService = require('../../../services/settings');
|
|
|
|
describe('services.Wordlist', () => {
|
|
|
|
const wordlists = {
|
|
banned: [
|
|
'cookies',
|
|
'how to do bad things',
|
|
'how to do really bad things',
|
|
's h i t'
|
|
],
|
|
suspect: [
|
|
'do bad things'
|
|
]
|
|
};
|
|
|
|
let wordlist = new Wordlist();
|
|
const settings = {id: '1', moderation: 'PRE', wordlist: {banned: ['bad words'], suspect: ['suspect words']}};
|
|
|
|
beforeEach(() => SettingsService.init(settings));
|
|
|
|
describe('#init', () => {
|
|
|
|
before(() => wordlist.upsert(wordlists));
|
|
|
|
it('has entries', () => {
|
|
expect(wordlist.lists.banned).to.not.be.empty;
|
|
expect(wordlist.lists.suspect).to.not.be.empty;
|
|
});
|
|
|
|
});
|
|
|
|
describe('#parseList', () => {
|
|
it('does not include emojis in the wordlist', () => {
|
|
let list = Wordlist.parseList([
|
|
'🖕',
|
|
'🖕 asdf',
|
|
'asd🖕asdf',
|
|
'asd🖕',
|
|
]);
|
|
|
|
expect(list).to.have.length(0);
|
|
});
|
|
});
|
|
|
|
const bannedList = Wordlist.parseList(wordlists.banned);
|
|
|
|
describe('#match', () => {
|
|
|
|
it('does match on a bad word', () => {
|
|
[
|
|
'how to do really bad things',
|
|
'what is cookies',
|
|
'cookies',
|
|
'COOKIES.',
|
|
'how to do bad things',
|
|
'How To do bad things!'
|
|
].forEach((word) => {
|
|
expect(wordlist.match(bannedList, word)).to.be.true;
|
|
});
|
|
});
|
|
|
|
it('does not match on a good word', () => {
|
|
[
|
|
'how to',
|
|
'cookie',
|
|
'how to be a great person?',
|
|
'how to not do really bad things?'
|
|
].forEach((word) => {
|
|
expect(wordlist.match(bannedList, word)).to.be.false;
|
|
});
|
|
});
|
|
|
|
});
|
|
|
|
describe('#checkName', () => {
|
|
[
|
|
'flowers',
|
|
'joy',
|
|
'lots_of_candy'
|
|
].forEach((username) => {
|
|
it(`does not match on list=banned name=${username}`, () => {
|
|
expect(wordlist.checkName(bannedList, username)).to.be.true;
|
|
});
|
|
});
|
|
|
|
[
|
|
'cookies'
|
|
].forEach((username) => {
|
|
it(`does match on list=banned name=${username}`, () => {
|
|
expect(wordlist.checkName(bannedList, username)).to.be.false;
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#filter', () => {
|
|
|
|
before(() => wordlist.upsert(wordlists));
|
|
|
|
it('matches on bodies containing bad words', () => {
|
|
let errors = wordlist.filter({
|
|
content: 'how to do really bad things?'
|
|
}, 'content');
|
|
|
|
expect(errors).to.have.property('banned', Errors.ErrContainsProfanity);
|
|
});
|
|
|
|
it('does not match on bodies not containing bad words', () => {
|
|
let errors = wordlist.filter({
|
|
content: 'how to not do really bad things?'
|
|
}, 'content');
|
|
|
|
expect(errors).to.not.have.property('banned');
|
|
});
|
|
|
|
it('does not match on bodies not containing the bad word field', () => {
|
|
let errors = wordlist.filter({
|
|
author: 'how to do really bad things?',
|
|
content: 'how to be a great person?'
|
|
}, 'content');
|
|
|
|
expect(errors).to.not.have.property('banned');
|
|
});
|
|
|
|
});
|
|
|
|
});
|