asksuite-core
Version:
228 lines (180 loc) • 8.37 kB
JavaScript
const AsksuiteProcessingNatural = require('../AsksuiteProcessingNatural');
const MockGenerator = require('../mocks/MockGenerator');
const createRedisClient = require('../util/redis');
const mockConfig = require('../mocks/json/config');
const redisDialogflow = {
redis: {
url: 'redis://localhost',
db: 1, //intents
},
};
beforeAll(() => {
jest.setTimeout(60000);
});
describe('Asksuite Processing Natural testing...', () => {
it('Should return DialogFlow intent', async () => {
const data = MockGenerator.generateIncoming('Oi');
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.intent).toBe('saudacao');
expect(result.resolver).toBe('DIALOG_FLOW');
});
it('Should return DialogFlow intent fr', async () => {
const data = MockGenerator.generateIncoming('bonjour');
data.language = 'fr-fr';
data.languages = [
{
formatIso: 'fr-fr',
formatGoogle: 'fr',
formatDialogflow: 'fr-fr',
},
];
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.intent).toBe('saudacao');
expect(result.resolver).toBe('DIALOG_FLOW');
});
it('Should return DialogFlow intent', async () => {
const data = MockGenerator.generateIncoming('Oi');
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.intent).toBe('saudacao');
expect(result.resolver).toBe('DIALOG_FLOW');
});
it('Should return intent translated saudacao', async () => {
const data = MockGenerator.generateIncoming('Bonjour');
data.language = 'en';
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({
config: mockConfig,
});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.intent).toBe('saudacao');
expect(result.translated).toBe(true);
expect(result.dialog).toContain(data.companyId);
});
it('Should return DialogFlow intent cotacao_com_datas', async () => {
const data = MockGenerator.generateIncoming(
'Preciso de hospedagem na segunda semana de junho para um casal',
);
data.language = 'pt';
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.extractedData).toStrictEqual({
ArrivalDateString: '2021-06-14',
DepartureDateString: '2021-06-20',
AmountAdults: 2,
});
expect(result.intent).toBe('cotacao_com_datas');
expect(result.resolver).toBe('DIALOG_FLOW');
});
it('Should return cached DialogFlow intent', async () => {
const data = MockGenerator.generateIncoming('Oi');
const redis = createRedisClient(redisDialogflow);
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({
redis,
config: mockConfig,
});
let result = await asksuiteProcessingNatural.findIntent(data);
expect(result.intent).toBe('saudacao');
expect(result.resolver).toBe('DIALOG_FLOW');
result = await asksuiteProcessingNatural.findIntent(data);
expect(result.intent).toBe('saudacao');
expect(result.fromCache).toBe(true);
expect(result.resolver).toBe('DIALOG_FLOW');
}, 30000);
it('Should return DialogFlow intent with or without accent', async () => {
const data = MockGenerator.generateIncoming('Quero falar com alguém');
data.language = 'pt-br';
const data2 = MockGenerator.generateIncoming('Quero FalaR com Alguem');
data2.language = 'pt-br';
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
const result2 = await asksuiteProcessingNatural.findIntent(data2);
expect.assertions(4);
expect(result.intent).toBe('quero_telefone_hotel');
expect(result.resolver).toBe('DIALOG_FLOW');
expect(result2.intent).toBe('quero_telefone_hotel');
expect(result2.resolver).toBe('DIALOG_FLOW');
});
it('Should return KeyMatcher intent', async () => {
const data = MockGenerator.generateIncoming(
'Vale lembrar que a nossa estadia é pelo convênio com SBTUR',
);
data.language = 'pt-br';
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.intent).toBe('convenio_sbtur');
expect(result.resolver).toBe('KEY_MATCHER');
});
it('Should return KeyMatcher intent translated', async () => {
const data = MockGenerator.generateIncoming(
'fare fare fare fare fare fare fare fare fare farefare fare fare fare farefare fare fare fare farefare fare fare fare fare',
);
data.language = 'en';
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.intent).toBe('cotacao');
expect(result.translated).toBe(true);
expect(result.resolver).toBe('KEY_MATCHER');
});
it('Should return RASA intent', async () => {
const data = MockGenerator.generateIncoming('quero passar no teste do rasa');
data.companyId = 'teste_rasa_core';
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.resolver).toBe('RASA');
expect(result.intent).toBe('asksuite_rasa_teste_resort');
});
it('Should return RASA intent with accent and different cases', async () => {
const data = MockGenerator.generateIncoming('QueRo passar no tesTe do Rása');
data.companyId = 'teste_rasa_core';
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.resolver).toBe('RASA');
expect(result.intent).toBe('asksuite_rasa_teste_resort');
});
it('Should return naoentendi', async () => {
const data = MockGenerator.generateIncoming('HAIA USHAKJHJHZXNC HDSAHF SANFDJKIUHQWDFJAS NKJ');
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.intent).toBe('naoentendi');
});
describe('Test with Rasa as first NLP', () => {
it('Should return DialogFlow intent', async () => {
const data = MockGenerator.generateIncoming('Oi');
data.tryRasaFirst = true;
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.intent).toBe('saudacao');
expect(result.resolver).toBe('DIALOG_FLOW');
});
it('Should return KeyMatcher intent', async () => {
const data = MockGenerator.generateIncoming(
'Vale lembrar que a nossa estadia é pelo convênio com SBTUR',
);
data.tryRasaFirst = true;
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.intent).toBe('convenio_sbtur');
expect(result.resolver).toBe('KEY_MATCHER');
});
it('Should return RASA intent', async () => {
const data = MockGenerator.generateIncoming('quero passar no teste do rasa');
data.tryRasaFirst = true;
data.companyId = 'teste_rasa_core';
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.resolver).toBe('RASA');
expect(result.intent).toBe('asksuite_rasa_teste_resort');
});
it('Should return RASA intent correctly with multiple entities', async () => {
const data = MockGenerator.generateIncoming('passeio passeio de arvorismo');
data.tryRasaFirst = true;
data.companyId = 'teste_rasa_core';
const asksuiteProcessingNatural = new AsksuiteProcessingNatural({});
const result = await asksuiteProcessingNatural.findIntent(data);
expect(result.resolver).toBe('RASA');
expect(result.intent).toBe('passeio_de_arvorismo_teste_rasa_core');
});
});
});