mirror of
https://github.com/hexastack/hexabot
synced 2025-06-26 18:27:28 +00:00
216 lines
5.8 KiB
TypeScript
216 lines
5.8 KiB
TypeScript
/*
|
|
* Copyright © 2024 Hexastack. All rights reserved.
|
|
*
|
|
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
|
|
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
|
|
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
|
|
*/
|
|
|
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
import { MongooseModule } from '@nestjs/mongoose';
|
|
import { Test, TestingModule } from '@nestjs/testing';
|
|
|
|
import { LoggerService } from '@/logger/logger.service';
|
|
import {
|
|
botstatsFixtures,
|
|
installBotStatsFixtures,
|
|
} from '@/utils/test/fixtures/botstats';
|
|
import {
|
|
closeInMongodConnection,
|
|
rootMongooseTestModule,
|
|
} from '@/utils/test/test';
|
|
|
|
import { BotStatsController } from './bot-stats.controller';
|
|
import { BotStatsRepository } from '../repositories/bot-stats.repository';
|
|
import { BotStatsModel, BotStatsType } from '../schemas/bot-stats.schema';
|
|
import { BotStatsService } from '../services/bot-stats.service';
|
|
|
|
describe('BotStatsController', () => {
|
|
let botStatsController: BotStatsController;
|
|
|
|
beforeAll(async () => {
|
|
const module: TestingModule = await Test.createTestingModule({
|
|
controllers: [BotStatsController],
|
|
imports: [
|
|
rootMongooseTestModule(installBotStatsFixtures),
|
|
MongooseModule.forFeature([BotStatsModel]),
|
|
],
|
|
providers: [
|
|
LoggerService,
|
|
BotStatsService,
|
|
BotStatsRepository,
|
|
EventEmitter2,
|
|
],
|
|
}).compile();
|
|
botStatsController = module.get<BotStatsController>(BotStatsController);
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await closeInMongodConnection();
|
|
});
|
|
|
|
afterEach(jest.clearAllMocks);
|
|
|
|
describe('findMessages', () => {
|
|
it('should return no messages in the given date range', async () => {
|
|
const result = await botStatsController.findMessages({
|
|
from: new Date('2024-11-01T23:00:00.000Z'),
|
|
to: new Date('2024-11-05T23:00:00.000Z'),
|
|
});
|
|
expect(result).toHaveLength(3);
|
|
expect(result).toEqualPayload([
|
|
{
|
|
id: 1,
|
|
name: BotStatsType.all_messages,
|
|
values: [],
|
|
},
|
|
{
|
|
id: 2,
|
|
name: BotStatsType.incoming,
|
|
values: [],
|
|
},
|
|
{
|
|
id: 3,
|
|
name: BotStatsType.outgoing,
|
|
values: [],
|
|
},
|
|
]);
|
|
});
|
|
|
|
it('should return messages in the given date range', async () => {
|
|
const from = new Date('2023-11-01T23:00:00.000Z');
|
|
const to = new Date('2023-11-05T23:00:00.000Z');
|
|
const result = await botStatsController.findMessages({
|
|
from,
|
|
to,
|
|
});
|
|
expect(result).toEqualPayload([
|
|
{
|
|
id: 1,
|
|
name: BotStatsType.all_messages,
|
|
values: [
|
|
{
|
|
...botstatsFixtures[0],
|
|
date: botstatsFixtures[0].day,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 2,
|
|
name: BotStatsType.incoming,
|
|
values: [
|
|
{
|
|
...botstatsFixtures[4],
|
|
date: botstatsFixtures[4].day,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 3,
|
|
name: BotStatsType.outgoing,
|
|
values: [],
|
|
},
|
|
]);
|
|
});
|
|
});
|
|
|
|
describe('datum', () => {
|
|
it('should return messages of a given type', async () => {
|
|
const result = await botStatsController.datum({
|
|
from: new Date('2023-11-06T23:00:00.000Z'),
|
|
to: new Date('2023-11-08T23:00:00.000Z'),
|
|
type: BotStatsType.outgoing,
|
|
});
|
|
|
|
expect(result).toEqualPayload([
|
|
{
|
|
id: 1,
|
|
name: BotStatsType.outgoing,
|
|
values: [
|
|
{
|
|
...botstatsFixtures[5],
|
|
date: botstatsFixtures[5].day,
|
|
},
|
|
],
|
|
},
|
|
]);
|
|
});
|
|
});
|
|
|
|
describe('conversation', () => {
|
|
it('should return conversation messages', async () => {
|
|
const result = await botStatsController.conversation({
|
|
from: new Date('2023-11-04T23:00:00.000Z'),
|
|
to: new Date('2023-11-06T23:00:00.000Z'),
|
|
});
|
|
|
|
expect(result).toEqualPayload([
|
|
{
|
|
id: 1,
|
|
name: BotStatsType.new_conversations,
|
|
values: [
|
|
{
|
|
...botstatsFixtures[3],
|
|
date: botstatsFixtures[3].day,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 2,
|
|
name: BotStatsType.existing_conversations,
|
|
values: [],
|
|
},
|
|
]);
|
|
});
|
|
});
|
|
|
|
describe('audiance', () => {
|
|
it('should return audiance messages', async () => {
|
|
const result = await botStatsController.audiance({
|
|
from: new Date('2023-11-01T23:00:00.000Z'),
|
|
to: new Date('2023-11-08T23:00:00.000Z'),
|
|
});
|
|
|
|
expect(result).toEqualPayload([
|
|
{
|
|
id: 1,
|
|
name: BotStatsType.new_users,
|
|
values: [
|
|
{
|
|
...botstatsFixtures[1],
|
|
date: botstatsFixtures[1].day,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 2,
|
|
name: BotStatsType.returning_users,
|
|
values: [],
|
|
},
|
|
{
|
|
id: 3,
|
|
name: BotStatsType.retention,
|
|
values: [],
|
|
},
|
|
]);
|
|
});
|
|
});
|
|
|
|
describe('popularBlocks', () => {
|
|
it('should return popular blocks', async () => {
|
|
const result = await botStatsController.popularBlocks({
|
|
from: new Date('2023-11-01T23:00:00.000Z'),
|
|
to: new Date('2023-11-08T23:00:00.000Z'),
|
|
});
|
|
|
|
expect(result).toEqual([
|
|
{
|
|
name: 'Global Fallback',
|
|
id: 'Global Fallback',
|
|
value: 68,
|
|
},
|
|
]);
|
|
});
|
|
});
|
|
});
|