Compare commits

..

2 commits

Author SHA1 Message Date
4ac6ec0a9d
add tests
All checks were successful
PR Check / lint-and-format (pull_request) Successful in 20s
2024-10-14 23:21:10 +02:00
aee0557bb9
fix plural 2024-10-14 23:21:00 +02:00
2 changed files with 75 additions and 6 deletions

View file

@ -0,0 +1,66 @@
import { Attachment, Collection, EmbedBuilder } from "discord.js";
import { handleAttachments } from "../../../utils/events/citation";
/**
* Generate a new random string
* @returns random string
*/
const newKey = () => Math.random().toString(36).substring(2);
describe("Attachements Handler", () => {
const map = new Map([
["e_attachements", "yes_s"],
["e_attachement", "no_s"],
]);
{
const name = "One image";
test(name, () => {
const embedExpected = new EmbedBuilder();
embedExpected.setImage("http://url");
const embedTest = new EmbedBuilder();
handleAttachments(
map,
embedTest,
new Collection([[newKey(), { name: "image.png", url: "http://url" } as Attachment]]),
);
expect(embedTest).toStrictEqual(embedExpected);
});
}
{
const name = "One link";
test(name, () => {
const embedExpected = new EmbedBuilder();
embedExpected.addFields({ name: "no_s", value: "[f](url)" });
const embedTest = new EmbedBuilder();
handleAttachments(
map,
embedTest,
new Collection([[newKey(), { name: "f", url: "url" } as Attachment]]),
);
expect(embedTest).toStrictEqual(embedExpected);
});
}
{
const name = "Two files";
test(name, () => {
const embedExpected = new EmbedBuilder();
embedExpected.addFields({ name: "yes_s", value: "[f](url), [f](url)" });
const embedTest = new EmbedBuilder();
handleAttachments(
map,
embedTest,
new Collection([
[newKey(), { name: "f", url: "url" } as Attachment],
[newKey(), { name: "f", url: "url" } as Attachment],
]),
);
expect(embedTest).toStrictEqual(embedExpected);
});
}
});

View file

@ -21,20 +21,23 @@ export const handleAttachments = (
let currentField = ""; let currentField = "";
const fields: APIEmbedField[] = []; const fields: APIEmbedField[] = [];
let multiple = 0; let multipleFields = 0;
let numberOfLinks = 0;
files.forEach((file, idx) => { files.forEach((file, idx) => {
numberOfLinks++;
const fieldValue = currentField.length > 0 ? `${currentField}, ${file}` : file; const fieldValue = currentField.length > 0 ? `${currentField}, ${file}` : file;
if (fieldValue.length > maxFieldValueLength) { if (fieldValue.length > maxFieldValueLength) {
multiple = multiple === 0 && idx !== files.length - 1 ? 1 : multiple + 1; multipleFields = multipleFields === 0 && idx !== files.length - 1 ? 1 : multipleFields + 1;
fields.push({ fields.push({
name: name:
loc.get( loc.get(
attachments.size > 1 && idx !== files.length - 1 ? "e_attachements" : "e_attachement", attachments.size > 1 && numberOfLinks > 1 ? "e_attachements" : "e_attachement",
) + (multiple ? ` (${multiple})` : ""), ) + (multipleFields ? ` (${multipleFields})` : ""),
value: currentField, value: currentField,
}); });
currentField = file; currentField = file;
numberOfLinks = 0;
} else { } else {
currentField = fieldValue; currentField = fieldValue;
} }
@ -43,8 +46,8 @@ export const handleAttachments = (
if (currentField.length > 0) { if (currentField.length > 0) {
fields.push({ fields.push({
name: name:
loc.get(attachments.size > 1 && multiple ? "e_attachements" : "e_attachement") + loc.get(attachments.size > 1 && numberOfLinks > 1 ? "e_attachements" : "e_attachement") +
(multiple ? ` (${multiple + 1})` : ""), (multipleFields ? ` (${multipleFields + 1})` : ""),
value: currentField, value: currentField,
}); });
} }