Files
context-mod/tests/testFactory.ts
2022-09-26 16:59:46 -04:00

197 lines
6.1 KiB
TypeScript

import {OperatorConfig, OperatorJsonConfig} from "../src/Common/interfaces";
import Snoowrap from "snoowrap";
import Bot from "../src/Bot/index"
import {buildOperatorConfigWithDefaults} from "../src/ConfigBuilder";
import {App} from "../src/App";
import {YamlOperatorConfigDocument} from "../src/Common/Config/Operator";
import {NoopLogger} from "../src/Utils/loggerFactory";
import {ManagerEntity} from "../src/Common/Entities/ManagerEntity";
import {Bot as BotEntity} from "../src/Common/Entities/Bot";
import {SubredditResources} from "../src/Subreddit/SubredditResources";
import {Subreddit, Comment, Submission} from 'snoowrap/dist/objects';
import dayjs from 'dayjs';
const mockSnoowrap = new Snoowrap({userAgent: 'test', accessToken: 'test'});
const memoryConfig: OperatorJsonConfig = {
databaseConfig: {
connection: {
type: 'sqljs',
location: ':memory:'
}
},
logging: {
level: 'debug',
file: {
dirname: false
}
},
bots: [
{
name: 'test',
credentials: {
reddit: {
clientId: 'test',
clientSecret: 'test',
accessToken: 'test',
refreshToken: 'test'
}
}
}
]
};
let config: OperatorConfig;
let app: App;
let snoowrap: Snoowrap;
let bot: Bot;
let resource: SubredditResources;
let subreddit: Subreddit;
export const getConfig = async () => {
if (config === undefined) {
config = await buildOperatorConfigWithDefaults(memoryConfig);
}
return config;
}
export const getApp = async () => {
if (app === undefined) {
const config = await getConfig();
app = new App({...config, fileConfig: {document: new YamlOperatorConfigDocument('')}});
await app.initDatabase();
}
return app;
}
export const getSnoowrap = async () => {
if (snoowrap === undefined) {
const bot = await getBot();
snoowrap = bot.client;
}
return snoowrap;
}
export const getBot = async () => {
if (bot === undefined) {
await getApp();
const config = await getConfig();
bot = new Bot(config.bots[0], NoopLogger);
await bot.cacheManager.set('test', {
logger: NoopLogger,
subreddit: bot.client.getSubreddit('test'),
client: bot.client,
statFrequency: 'minute',
managerEntity: new ManagerEntity(),
botEntity: new BotEntity()
});
}
return bot;
}
export const getResource = async () => {
if (resource === undefined) {
const bot = await getBot();
resource = bot.cacheManager.get('test') as SubredditResources;
}
return resource;
}
// @ts-ignore
export const getSubreddit = async () => {
if (subreddit === undefined) {
const snoo = await getSnoowrap();
subreddit = new Subreddit({id: 't3_test', name: 'test'}, snoo, true);
}
// @ts-ignore
return subreddit;
}
export const sampleActivity = {
moddable: {
commentRemovedByMod: (snoowrap = mockSnoowrap) => {
return new Submission({
can_mod_post: true,
banned_at_utc: dayjs().subtract(10, 'minutes').unix(),
removed_by_category: 'mod'
}, snoowrap, true);
},
activityRemovedByMod: (snoowrap = mockSnoowrap) => {
return new Submission({
can_mod_post: true,
banned_at_utc: dayjs().subtract(10, 'minutes').unix(),
removed_by_category: 'mod'
}, snoowrap, true)
},
activityFilteredByAutomod: (snoowrap = mockSnoowrap) => {
return new Submission({
can_mod_post: true,
banned_at_utc: dayjs().subtract(10, 'minutes').unix(),
removed_by_category: 'automod_filtered'
}, snoowrap, true);
},
commentFiltered: (snoowrap = mockSnoowrap) => {
return new Comment({
can_mod_post: true,
banned_at_utc: dayjs().subtract(10, 'minutes').unix(),
removed: false,
replies: ''
}, snoowrap, true)
},
commentRemoved: (snoowrap = mockSnoowrap) => {
return new Comment({
can_mod_post: true,
banned_at_utc: dayjs().subtract(10, 'minutes').unix(),
removed: true,
replies: ''
}, snoowrap, true);
},
submissionDeleted: (snoowrap = mockSnoowrap) => {
return new Submission({
can_mod_post: true,
banned_at_utc: dayjs().subtract(10, 'minutes').unix(),
removed_by_category: 'deleted'
}, snoowrap, true);
},
commentDeleted: (snoowrap = mockSnoowrap) => {
return new Comment({
can_mod_post: true,
banned_at_utc: dayjs().subtract(10, 'minutes').unix(),
removed: false,
replies: '',
author: {
name: '[deleted]'
}
}, snoowrap, true);
}
},
public: {
submissionRemoved: (snoowrap = mockSnoowrap) => {
return new Submission({
can_mod_post: false,
removed_by_category: 'moderator'
}, snoowrap, true)
},
submissionDeleted: (snoowrap = mockSnoowrap) => {
return new Submission({
can_mod_post: false,
removed_by_category: 'deleted'
}, snoowrap, true);
},
commentRemoved: (snoowrap = mockSnoowrap) => {
return new Comment({
can_mod_post: false,
body: '[removed]',
replies: ''
}, snoowrap, true)
},
activityRemoved: (snoowrap = mockSnoowrap) => {
return new Submission({
can_mod_post: false,
banned_at_utc: dayjs().subtract(10, 'minutes').unix(),
removed_by_category: 'moderator'
}, snoowrap, true);
}
}
}