import { afterEach, describe, expect, it, mock, spyOn } from "bun:test"; 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 GelbooruApiService from "src/services/GelbooruApiService"; import BotApiService from "src/services/BotApiService"; import fs from "node:fs"; 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); }); });