mirror of
https://github.com/wassname/talk.git
synced 2026-06-30 01:58:00 +08:00
133 lines
3.2 KiB
JavaScript
133 lines
3.2 KiB
JavaScript
const Errors = require('../../../errors');
|
|
const Wordlist = require('../../../services/wordlist');
|
|
const SettingsService = require('../../../services/settings');
|
|
|
|
const chai = require('chai');
|
|
const expect = chai.expect;
|
|
|
|
describe('services.Wordlist', () => {
|
|
const wordlists = {
|
|
banned: [
|
|
'cookies',
|
|
'how to do bad things',
|
|
'how to do really bad things',
|
|
's h i t',
|
|
'$hit',
|
|
'p**ch',
|
|
'p*ch',
|
|
],
|
|
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('#regexp', () => {
|
|
before(() => wordlist.upsert(wordlists));
|
|
|
|
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!',
|
|
'This stuff is $hit!',
|
|
"That's a p**ch!",
|
|
].forEach(word => {
|
|
expect(wordlist.regexp.banned.test(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?',
|
|
'i have $100 dollars.',
|
|
'I have bad $ hit lling',
|
|
"That's a p***ch!",
|
|
].forEach(word => {
|
|
expect(wordlist.regexp.banned.test(word)).to.be.false;
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('#scan', () => {
|
|
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!',
|
|
'This stuff is $hit!',
|
|
"That's a p**ch!",
|
|
].forEach(word => {
|
|
expect(wordlist.scan('body', word)).to.not.be.undefined;
|
|
});
|
|
});
|
|
|
|
it('does not match on a good word', () => {
|
|
[
|
|
'how to',
|
|
'cookie',
|
|
'how to be a great person?',
|
|
'how to not do really bad things?',
|
|
'i have $100 dollars.',
|
|
'I have bad $ hit lling',
|
|
"That's a p***ch!",
|
|
].forEach(word => {
|
|
expect(wordlist.scan('body', word)).to.be.deep.equal({});
|
|
});
|
|
});
|
|
});
|
|
|
|
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');
|
|
});
|
|
});
|
|
});
|