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

69 lines
2.2 KiB
TypeScript

import { afterEach, describe, expect, it, mock } from "bun:test";
import BotApiService from "src/services/BotApiService";
import GelbooruApiService from "src/services/GelbooruApiService";
import ImageService from "src/services/ImageService";
import { BotApiResponse } from "src/types/BotApiResponse";
import GelbooruApiResponse from "src/types/GelbooruServiceResponse";
import Image from "src/types/Image";
const imageServiceOriginal = ImageService;
const gelbooruApiServiceOriginal = GelbooruApiService;
const botApiServiceOriginal = BotApiService;
afterEach(() => {
mock.restore();
mock.module("src/services/ImageService", () => ({
default: imageServiceOriginal,
}));
mock.module("src/services/GelbooruApiService", () => ({
default: gelbooruApiServiceOriginal,
}));
mock.module("src/services/BotApiService", () => ({
default: botApiServiceOriginal,
}));
});
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";
mock.module("src/services/GelbooruApiService", () => {
let alreadyCalled = false;
return {
default: {
get: (): GelbooruApiResponse => {
if (alreadyCalled) {
return { posts: [{ url: UNIQUE_URL, tags: [] }] };
} else {
alreadyCalled = true;
return { posts: [{ url: REPEATED_URL, tags: [] }] };
}
},
},
};
});
mock.module("src/services/BotApiService", () => ({
default: {
getAll: (): BotApiResponse => ({
images: [
{
_id: "0",
url: REPEATED_URL,
status: "consumed",
tags: ["pokemon", "computer"],
__v: 0,
},
],
}),
},
}));
const image: Image = await ImageService.get();
expect(image.url).not.toBe(REPEATED_URL);
});
});