fe-middleware/test/ImageService/ImageService.test.ts

54 lines
2.3 KiB
TypeScript
Raw Normal View History

import { describe, expect, it, mock, spyOn } from "bun:test";
2024-03-30 12:56:22 +00:00
import Image from "../../src/types/Image";
import ImageService from "../../src/services/ImageService";
import GelbooruApiResponse from "../../src/types/GelbooruServiceResponse";
import { BotApiResponse } from "../../src/types/BotApiResponse";
import fs from "node:fs";
2024-03-28 10:41:03 +00:00
describe("endpoint gets a non repeated image", () => {
it("should return an image that is not in the response of the /images endpoint of the bot API", async () => {
const REPEATED_URL = "https://fastly.picsum.photos/id/1/10/20.jpg?hmac=gY6PvUXFacKfYpBpTTVcNLxumpyMmoCamM-J5DOPwNc";
const UNIQUE_URL = "https://fastly.picsum.photos/id/2/10/20.jpg?hmac=zy6lz21CuRIstr9ETx9h5AuoH50s_L2uIEct3dROpY8";
2024-03-28 10:41:03 +00:00
2024-03-30 12:56:22 +00:00
mock.module("../../src/services/GelbooruApiService", () => {
2024-03-28 10:41:03 +00:00
let alreadyCalled = false;
return {
default: {
2024-03-28 11:43:24 +00:00
get: (): GelbooruApiResponse => {
2024-03-28 10:41:03 +00:00
if (alreadyCalled) {
2024-03-28 11:43:24 +00:00
return { posts: [{ url: UNIQUE_URL, tags: [] }] };
2024-03-28 10:41:03 +00:00
} else {
alreadyCalled = true;
2024-03-28 11:43:24 +00:00
return { posts: [{ url: REPEATED_URL, tags: [] }] };
2024-03-28 10:41:03 +00:00
}
}
}
}
});
2024-03-30 12:56:22 +00:00
mock.module("../../src/services/BotApiService", () => ({
2024-03-28 11:43:24 +00:00
default: {
getAll: (): BotApiResponse => ({
images: [
{ _id: "0", url: REPEATED_URL, status: "consumed", tags: ["pokemon", "computer"], "__v": 0 }
]
})
}
}));
2024-03-28 10:41:03 +00:00
const image: Image = await ImageService.get();
expect(image.url).not.toBe(REPEATED_URL);
});
2024-03-30 12:56:22 +00:00
});
describe("imageToBase64 works as expected", () => {
it("should encode image to base64 properly", () => {
const imageData = fs.readFileSync('./test/ImageService/testImage.jpg');
const imageToBase64Spy = spyOn(ImageService as any, 'imageToBase64');
const actualEncoding = imageToBase64Spy.call(ImageService, imageData);
const expectedEncoding = fs.readFileSync('./test/ImageService/testImage.b64', "base64").toString();
expect(actualEncoding).toBe(expectedEncoding);
})
2024-03-28 10:41:03 +00:00
})