rig-task-bot/test/utils/errorHandler.spec.ts
Naomi Carrigan 296a50fedd feat: first version of bot (#2)
### Explanation

This should set up everything we need for our initial launch. Test coverage is at 100% to ensure nothing breaks.

### Issue

_No response_

### Attestations

- [x] I have read and agree to the [Code of Conduct](https://docs.nhcarrigan.com/community/coc/)
- [x] I have read and agree to the [Community Guidelines](https://docs.nhcarrigan.com/community/guide/).
- [x] My contribution complies with the [Contributor Covenant](https://docs.nhcarrigan.com/dev/covenant/).

### Dependencies

- [x] I have pinned the dependencies to a specific patch version.

### Style

- [x] I have run the linter and resolved any errors.
- [x] My pull request uses an appropriate title, matching the conventional commit standards.
- [x] My scope of feat/fix/chore/etc. correctly matches the nature of changes in my pull request.

### Tests

- [x] My contribution adds new code, and I have added tests to cover it.
- [ ] My contribution modifies existing code, and I have updated the tests to reflect these changes.
- [x] All new and existing tests pass locally with my changes.
- [x] Code coverage remains at or above the configured threshold.

### Documentation

Coming soon - I'm working on the infra for docs next

### Versioning

Major - My pull request introduces a breaking change.

Reviewed-on: https://codeberg.org/nhcarrigan/rig-task-bot/pulls/2
Co-authored-by: Naomi Carrigan <commits@nhcarrigan.com>
Co-committed-by: Naomi Carrigan <commits@nhcarrigan.com>
2024-09-30 01:41:25 +00:00

97 lines
2.7 KiB
TypeScript

/**
* @copyright nhcarrigan
* @license Naomi's Public License
* @author Naomi Carrigan
*/
import { EmbedBuilder } from "discord.js";
import { describe, it, expect, vi } from "vitest";
import { errorHandler } from "../../src/utils/errorHandler.ts";
import { sendDebugLog } from "../../src/utils/sendDebugLog.ts";
vi.mock("../../src/utils/sendDebugLog.ts", () => {
return {
sendDebugLog: vi.fn(),
};
});
const mockBot = {
env: {
discordDebugWebhook: {
send: vi.fn(),
},
},
};
describe("errorHandler", () => {
it("should call sendDebugLog", async() => {
expect.assertions(1);
await errorHandler(mockBot as never, "test", new Error("Test error"));
expect(sendDebugLog, "should send debug log").toHaveBeenCalledTimes(1);
});
it("should properly format the embed", async() => {
expect.assertions(1);
const error = new Error("Test error");
const id = await errorHandler(mockBot as never, "test", error);
expect(sendDebugLog, "should send debug log").toHaveBeenCalledWith(
mockBot,
{
embeds: [
new EmbedBuilder({
description: error.message,
fields: [
{
name: "Stack",
value: `\`\`\`\n${String(error.stack).slice(0, 1000)}`,
},
],
footer: {
// eslint-disable-next-line @typescript-eslint/naming-convention
icon_url: undefined,
text: `Error ID: ${id}`,
},
title: "Error: test",
}),
],
},
);
});
it("should handle non-error objects", async() => {
expect.assertions(1);
const id = await errorHandler(mockBot as never, "test", "Test error");
expect(sendDebugLog, "should send debug log").toHaveBeenCalledWith(
mockBot,
{
embeds: [
new EmbedBuilder({
description: "Test error",
footer: {
// eslint-disable-next-line @typescript-eslint/naming-convention
icon_url: undefined,
text: `Error ID: ${id}`,
},
title: "Error: test",
}),
],
},
);
});
it("should call the reply function if provided", async() => {
expect.assertions(1);
const replyFunction = vi.fn().mockName("reply");
const id = await errorHandler(
mockBot as never,
"test",
new Error("Test error"),
replyFunction,
);
expect(replyFunction, "should send error ID to user").toHaveBeenCalledWith({
content: `Oops! Something went wrong! Please reach out to us in our [support server](https://chat.nhcarrigan.com) and bring this error ID: ${id}`,
ephemeral: true,
});
});
});