mirror of
https://github.com/sern-handler/handler
synced 2026-06-06 01:16:55 +00:00
This commit is contained in:
@@ -6,49 +6,6 @@ import { partitionPlugins, treeSearch } from '../../src/core/functions';
|
|||||||
import { faker } from '@faker-js/faker';
|
import { faker } from '@faker-js/faker';
|
||||||
import { ApplicationCommandOptionType, AutocompleteInteraction } from 'discord.js';
|
import { ApplicationCommandOptionType, AutocompleteInteraction } from 'discord.js';
|
||||||
|
|
||||||
vi.mock('discord.js', async (importOriginal) => {
|
|
||||||
const mod = await importOriginal()
|
|
||||||
const ModalSubmitInteraction = class {
|
|
||||||
customId;
|
|
||||||
type = 5;
|
|
||||||
isModalSubmit = vi.fn();
|
|
||||||
constructor(customId) {
|
|
||||||
this.customId = customId;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const ButtonInteraction = class {
|
|
||||||
customId;
|
|
||||||
type = 3;
|
|
||||||
componentType = 2;
|
|
||||||
isButton = vi.fn();
|
|
||||||
constructor(customId) {
|
|
||||||
this.customId = customId;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const AutocompleteInteraction = class {
|
|
||||||
type = 4;
|
|
||||||
option: string;
|
|
||||||
constructor(s: string) {
|
|
||||||
this.option = s;
|
|
||||||
}
|
|
||||||
options = {
|
|
||||||
getFocused: vi.fn(),
|
|
||||||
getSubcommand: vi.fn(),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
Collection: mod.Collection,
|
|
||||||
ComponentType: mod.ComponentType,
|
|
||||||
InteractionType: mod.InteractionType,
|
|
||||||
ApplicationCommandOptionType: mod.ApplicationCommandOptionType,
|
|
||||||
ApplicationCommandType: mod.ApplicationCommandType,
|
|
||||||
ModalSubmitInteraction,
|
|
||||||
ButtonInteraction,
|
|
||||||
AutocompleteInteraction,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('functions', () => {
|
describe('functions', () => {
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
vi.clearAllMocks();
|
vi.clearAllMocks();
|
||||||
|
|||||||
@@ -4,48 +4,7 @@ import { CommandType } from '../../src/core/structures/enums';
|
|||||||
|
|
||||||
import * as Id from '../../src/core/id'
|
import * as Id from '../../src/core/id'
|
||||||
import { ButtonInteraction, ModalSubmitInteraction } from 'discord.js';
|
import { ButtonInteraction, ModalSubmitInteraction } from 'discord.js';
|
||||||
vi.mock('discord.js', async (importOriginal) => {
|
|
||||||
const mod = await importOriginal()
|
|
||||||
const ModalSubmitInteraction = class {
|
|
||||||
customId;
|
|
||||||
type = 5;
|
|
||||||
isModalSubmit = vi.fn();
|
|
||||||
constructor(customId) {
|
|
||||||
this.customId = customId;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const ButtonInteraction = class {
|
|
||||||
customId;
|
|
||||||
type = 3;
|
|
||||||
componentType = 2;
|
|
||||||
isButton = vi.fn();
|
|
||||||
constructor(customId) {
|
|
||||||
this.customId = customId;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const AutocompleteInteraction = class {
|
|
||||||
type = 4;
|
|
||||||
option: string;
|
|
||||||
constructor(s: string) {
|
|
||||||
this.option = s;
|
|
||||||
}
|
|
||||||
options = {
|
|
||||||
getFocused: vi.fn(),
|
|
||||||
getSubcommand: vi.fn(),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
Collection: mod.Collection,
|
|
||||||
ComponentType: mod.ComponentType,
|
|
||||||
InteractionType: mod.InteractionType,
|
|
||||||
ApplicationCommandOptionType: mod.ApplicationCommandOptionType,
|
|
||||||
ApplicationCommandType: mod.ApplicationCommandType,
|
|
||||||
ModalSubmitInteraction,
|
|
||||||
ButtonInteraction,
|
|
||||||
AutocompleteInteraction,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
test('id -> Text', () => {
|
test('id -> Text', () => {
|
||||||
expect(Id.create("ping", CommandType.Text)).toBe("ping_T")
|
expect(Id.create("ping", CommandType.Text)).toBe("ping_T")
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,83 +1,16 @@
|
|||||||
//@ts-nocheck
|
//@ts-nocheck
|
||||||
import { beforeEach, describe, expect, vi, it, test } from 'vitest';
|
import { beforeEach, describe, expect, it, test } from 'vitest';
|
||||||
import { callInitPlugins, eventDispatcher } from '../src/handlers/event-utils';
|
import { callInitPlugins, eventDispatcher } from '../src/handlers/event-utils';
|
||||||
|
|
||||||
import { Client, ChatInputCommandInteraction } from 'discord.js'
|
import { Client } from 'discord.js'
|
||||||
import { faker } from '@faker-js/faker';
|
import { faker } from '@faker-js/faker';
|
||||||
import { Module } from '../src/types/core-modules';
|
import { Module } from '../src/types/core-modules';
|
||||||
import { Processed } from '../src/types/core-modules';
|
import { Processed } from '../src/types/core-modules';
|
||||||
import { EventEmitter } from 'events';
|
import { EventEmitter } from 'events';
|
||||||
import { EventType } from '../src/core/structures/enums';
|
|
||||||
import { CommandControlPlugin, CommandInitPlugin, CommandType, controller } from '../src';
|
import { CommandControlPlugin, CommandInitPlugin, CommandType, controller } from '../src';
|
||||||
|
import { createRandomModule, createRandomInitPlugin } from './setup/util';
|
||||||
|
|
||||||
vi.mock('discord.js', async (importOriginal) => {
|
|
||||||
const mod = await importOriginal()
|
|
||||||
const ModalSubmitInteraction = class {
|
|
||||||
customId;
|
|
||||||
type = 5;
|
|
||||||
isModalSubmit = vi.fn();
|
|
||||||
constructor(customId) {
|
|
||||||
this.customId = customId;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const ButtonInteraction = class {
|
|
||||||
customId;
|
|
||||||
type = 3;
|
|
||||||
componentType = 2;
|
|
||||||
isButton = vi.fn();
|
|
||||||
constructor(customId) {
|
|
||||||
this.customId = customId;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const AutocompleteInteraction = class {
|
|
||||||
type = 4;
|
|
||||||
option: string;
|
|
||||||
constructor(s: string) {
|
|
||||||
this.option = s;
|
|
||||||
}
|
|
||||||
options = {
|
|
||||||
getFocused: vi.fn(),
|
|
||||||
getSubcommand: vi.fn(),
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
Client : vi.fn(),
|
|
||||||
Collection: mod.Collection,
|
|
||||||
ComponentType: mod.ComponentType,
|
|
||||||
InteractionType: mod.InteractionType,
|
|
||||||
ApplicationCommandOptionType: mod.ApplicationCommandOptionType,
|
|
||||||
ApplicationCommandType: mod.ApplicationCommandType,
|
|
||||||
ModalSubmitInteraction,
|
|
||||||
ButtonInteraction,
|
|
||||||
AutocompleteInteraction,
|
|
||||||
ChatInputCommandInteraction: vi.fn()
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
function createRandomPlugin (s: 'go', mut?: Partial<Module>) {
|
|
||||||
return CommandInitPlugin(({ module }) => {
|
|
||||||
if(mut) {
|
|
||||||
Object.entries(mut).forEach(([k, v]) => {
|
|
||||||
module[k] = v
|
|
||||||
})
|
|
||||||
}
|
|
||||||
return s == 'go'
|
|
||||||
? controller.next()
|
|
||||||
: controller.stop()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
function createRandomModule(plugins: any[]): Processed<Module> {
|
|
||||||
return {
|
|
||||||
type: EventType.Discord,
|
|
||||||
meta: { id:"", absPath: "" },
|
|
||||||
description: faker.string.alpha(),
|
|
||||||
plugins,
|
|
||||||
name: "cheese",
|
|
||||||
onEvent: [],
|
|
||||||
execute: vi.fn(),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function mockDeps() {
|
function mockDeps() {
|
||||||
return {
|
return {
|
||||||
@@ -103,22 +36,29 @@ describe('eventDispatcher standard', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test ('call init plugins', async () => {
|
describe('calling init plugins', async () => {
|
||||||
const deps = mockDeps()
|
let deps;
|
||||||
const plugins = createRandomPlugin('go', { name: "abc" })
|
beforeEach(() => {
|
||||||
const mod = createRandomModule([plugins])
|
deps = mockDeps()
|
||||||
const s = await callInitPlugins(mod, deps, false)
|
});
|
||||||
expect("abc").equal(s.name)
|
|
||||||
|
test ('call init plugins', async () => {
|
||||||
|
const plugins = createRandomInitPlugin('go', { name: "abc" })
|
||||||
|
const mod = createRandomModule([plugins])
|
||||||
|
const s = await callInitPlugins(mod, deps, false)
|
||||||
|
expect("abc").equal(s.name)
|
||||||
|
})
|
||||||
|
test('init plugins replace array', async () => {
|
||||||
|
const plugins = createRandomInitPlugin('go', { opts: [] })
|
||||||
|
const plugins2 = createRandomInitPlugin('go', { opts: ['a'] })
|
||||||
|
const mod = createRandomModule([plugins, plugins2])
|
||||||
|
const s = await callInitPlugins(mod, deps, false)
|
||||||
|
expect(['a']).deep.equal(s.opts)
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
test('init plugins replace array', async () => {
|
|
||||||
const deps = mockDeps()
|
|
||||||
const plugins = createRandomPlugin('go', { opts: [] })
|
|
||||||
const plugins2 = createRandomPlugin('go', { opts: ['a'] })
|
|
||||||
const mod = createRandomModule([plugins, plugins2])
|
|
||||||
const s = await callInitPlugins(mod, deps, false)
|
|
||||||
expect(['a']).deep.equal(s.opts)
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
test('form sdt', async () => {
|
test('form sdt', async () => {
|
||||||
|
|||||||
46
test/setup/setup-tests.ts
Normal file
46
test/setup/setup-tests.ts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import { vi } from 'vitest'
|
||||||
|
|
||||||
|
vi.mock('discord.js', async (importOriginal) => {
|
||||||
|
const mod = await importOriginal()
|
||||||
|
const ModalSubmitInteraction = class {
|
||||||
|
customId;
|
||||||
|
type = 5;
|
||||||
|
isModalSubmit = vi.fn();
|
||||||
|
constructor(customId) {
|
||||||
|
this.customId = customId;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const ButtonInteraction = class {
|
||||||
|
customId;
|
||||||
|
type = 3;
|
||||||
|
componentType = 2;
|
||||||
|
isButton = vi.fn();
|
||||||
|
constructor(customId) {
|
||||||
|
this.customId = customId;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const AutocompleteInteraction = class {
|
||||||
|
type = 4;
|
||||||
|
option: string;
|
||||||
|
constructor(s: string) {
|
||||||
|
this.option = s;
|
||||||
|
}
|
||||||
|
options = {
|
||||||
|
getFocused: vi.fn(),
|
||||||
|
getSubcommand: vi.fn(),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
Client : vi.fn(),
|
||||||
|
Collection: mod.Collection,
|
||||||
|
ComponentType: mod.ComponentType,
|
||||||
|
InteractionType: mod.InteractionType,
|
||||||
|
ApplicationCommandOptionType: mod.ApplicationCommandOptionType,
|
||||||
|
ApplicationCommandType: mod.ApplicationCommandType,
|
||||||
|
ModalSubmitInteraction,
|
||||||
|
ButtonInteraction,
|
||||||
|
AutocompleteInteraction,
|
||||||
|
ChatInputCommandInteraction: vi.fn()
|
||||||
|
};
|
||||||
|
});
|
||||||
30
test/setup/util.ts
Normal file
30
test/setup/util.ts
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import { faker } from "@faker-js/faker"
|
||||||
|
import { CommandInitPlugin, CommandType, Module, controller } from "../../src"
|
||||||
|
import { Processed } from "../../src/types/core-modules"
|
||||||
|
import { vi } from 'vitest'
|
||||||
|
|
||||||
|
export function createRandomInitPlugin (s: 'go', mut?: Partial<Module>) {
|
||||||
|
return CommandInitPlugin(({ module }) => {
|
||||||
|
if(mut) {
|
||||||
|
Object.entries(mut).forEach(([k, v]) => {
|
||||||
|
module[k] = v
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return s == 'go'
|
||||||
|
? controller.next()
|
||||||
|
: controller.stop()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createRandomModule(plugins: any[]): Processed<Module> {
|
||||||
|
return {
|
||||||
|
type: CommandType.Both,
|
||||||
|
meta: { id:"", absPath: "" },
|
||||||
|
description: faker.string.alpha(),
|
||||||
|
plugins,
|
||||||
|
name: "cheese",
|
||||||
|
onEvent: [],
|
||||||
|
locals: {},
|
||||||
|
execute: vi.fn(),
|
||||||
|
};
|
||||||
|
}
|
||||||
8
vitest.config.ts
Normal file
8
vitest.config.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
// vitest.config.ts or vitest.config.js
|
||||||
|
import { defineConfig } from 'vitest/config'
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
test: {
|
||||||
|
setupFiles: ['./test/setup/setup-tests.ts'],
|
||||||
|
},
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user