vylbot-app/tests/commands/Role/config.test.ts

227 lines
7.1 KiB
TypeScript
Raw Normal View History

2024-03-27 12:51:51 +00:00
import { CommandInteraction, PermissionsBitField, SlashCommandBuilder, SlashCommandRoleOption } from "discord.js";
import Config from "../../../src/commands/Role/config";
import Role from "../../../src/database/entities/Role";
import Server from "../../../src/database/entities/Server";
2024-02-03 19:29:28 +00:00
describe('constructor', () => {
2024-03-27 12:51:51 +00:00
test('EXPECT properties to be set', () => {
const config = new Config();
expect(config.CommandBuilder).toBeDefined();
const commandBuilder = config.CommandBuilder as SlashCommandBuilder;
expect(commandBuilder.name).toBe("configrole");
expect(commandBuilder.description).toBe("Toggle your roles");
expect(commandBuilder.default_member_permissions).toBe(PermissionsBitField.Flags.ManageRoles.toString());
expect(commandBuilder.options.length).toBe(1);
const roleOption = commandBuilder.options[0] as SlashCommandRoleOption;
expect(roleOption.name).toBe("role");
expect(roleOption.description).toBe("The role name");
expect(roleOption.required).toBe(true);
});
2024-02-03 19:29:28 +00:00
});
describe("execute", () => {
2024-03-27 12:51:51 +00:00
test("GIVEN role is marked as assignable, EXPECT role to be removed", async () => {
const role = {
role: {
id: "roleId",
},
};
const interaction = {
guildId: "guildId",
guild: {},
member: {},
options: {
get: jest.fn().mockReturnValue(role),
},
reply: jest.fn(),
} as unknown as CommandInteraction;
Role.FetchOneByRoleId = jest.fn().mockResolvedValue({});
Role.Remove = jest.fn();
const config = new Config();
await config.execute(interaction);
expect(Role.FetchOneByRoleId).toHaveBeenCalledTimes(1);
expect(Role.FetchOneByRoleId).toHaveBeenCalledWith("roleId");
expect(Role.Remove).toHaveBeenCalledTimes(1);
expect(interaction.options.get).toHaveBeenCalledTimes(1);
expect(interaction.options.get).toHaveBeenCalledWith("role");
expect(interaction.reply).toHaveBeenCalledTimes(1);
expect(interaction.reply).toHaveBeenCalledWith("Removed role from configuration.");
});
test("GIVEN role is not marked as assignable, EXPECT role to be added", async () => {
let newRole: Role | undefined;
const role = {
role: {
id: "roleId",
},
};
const interaction = {
guildId: "guildId",
guild: {},
member: {},
options: {
get: jest.fn().mockReturnValue(role),
},
reply: jest.fn(),
} as unknown as CommandInteraction;
Role.FetchOneByRoleId = jest.fn().mockResolvedValue(null);
Role.prototype.SetServer = jest.fn();
Role.prototype.Save = jest.fn().mockImplementation((_, role) => {
newRole = role;
});
Server.FetchOneById = jest.fn().mockResolvedValue({});
const config = new Config();
await config.execute(interaction);
expect(Role.FetchOneByRoleId).toHaveBeenCalledTimes(1);
expect(Role.FetchOneByRoleId).toHaveBeenCalledWith("roleId");
expect(Role.prototype.SetServer).toHaveBeenCalledTimes(1);
expect(Role.prototype.Save).toHaveBeenCalledTimes(1);
expect(newRole).toBeDefined();
expect(newRole!.RoleId).toBe("roleId");
expect(interaction.options.get).toHaveBeenCalledTimes(1);
expect(interaction.options.get).toHaveBeenCalledWith("role");
expect(interaction.reply).toHaveBeenCalledTimes(1);
expect(interaction.reply).toHaveBeenCalledWith("Added role to configuration.");
});
test("GIVEN interaction.guildId is null, EXPECT error", async () => {
const interaction = {
guildId: null,
options: {
get: jest.fn(),
}
} as unknown as CommandInteraction;
const config = new Config();
await config.execute(interaction);
expect(interaction.options.get).not.toHaveBeenCalled();
});
test("GIVEN interaction.guild is null, EXPECT error", async () => {
const interaction = {
guildId: "guildId",
guild: null,
options: {
get: jest.fn(),
}
} as unknown as CommandInteraction;
const config = new Config();
await config.execute(interaction);
expect(interaction.options.get).not.toHaveBeenCalled();
});
test("GIVEN interaction.member is null, EXPECT error", async () => {
const interaction = {
guildId: "guildId",
guild: {},
member: null,
options: {
get: jest.fn(),
}
} as unknown as CommandInteraction;
const config = new Config();
await config.execute(interaction);
expect(interaction.options.get).not.toHaveBeenCalled();
});
test("GIVEN role is null, EXPECT error", async () => {
const interaction = {
guildId: "guildId",
guild: {},
member: {},
options: {
get: jest.fn().mockReturnValue(null),
},
reply: jest.fn(),
} as unknown as CommandInteraction;
const config = new Config();
await config.execute(interaction);
expect(interaction.reply).toHaveBeenCalledTimes(1);
expect(interaction.reply).toHaveBeenCalledWith("Fields are required.");
});
test("GIVEN role.role is undefined, EXPECT error", async () => {
const role = {
role: null,
}
const interaction = {
guildId: "guildId",
guild: {},
member: {},
options: {
get: jest.fn().mockReturnValue(role),
},
reply: jest.fn(),
} as unknown as CommandInteraction;
const config = new Config();
await config.execute(interaction);
expect(interaction.reply).toHaveBeenCalledTimes(1);
expect(interaction.reply).toHaveBeenCalledWith("Fields are required.");
});
2024-02-03 19:29:28 +00:00
2024-03-27 12:51:51 +00:00
test("GIVEN server is not configured in the database, EXPECT error", async () => {
let newRole: Role | undefined;
2024-02-03 19:29:28 +00:00
2024-03-27 12:51:51 +00:00
const role = {
role: {
id: "roleId",
},
};
2024-02-03 19:29:28 +00:00
2024-03-27 12:51:51 +00:00
const interaction = {
guildId: "guildId",
guild: {},
member: {},
options: {
get: jest.fn().mockReturnValue(role),
},
reply: jest.fn(),
} as unknown as CommandInteraction;
2024-02-03 19:29:28 +00:00
2024-03-27 12:51:51 +00:00
Role.FetchOneByRoleId = jest.fn().mockResolvedValue(null);
Role.prototype.SetServer = jest.fn();
Role.prototype.Save = jest.fn().mockImplementation((_, role) => {
newRole = role;
});
2024-02-03 19:29:28 +00:00
2024-03-27 12:51:51 +00:00
Server.FetchOneById = jest.fn().mockResolvedValue(null);
2024-02-03 19:29:28 +00:00
2024-03-27 12:51:51 +00:00
const config = new Config();
await config.execute(interaction);
2024-02-03 19:29:28 +00:00
2024-03-27 12:51:51 +00:00
expect(interaction.reply).toHaveBeenCalledTimes(1);
expect(interaction.reply).toHaveBeenCalledWith("This server has not been setup.");
});
2024-02-03 19:29:28 +00:00
});