import { zipFile } from "@/../tests/utils/zip-utils";
import mockFs from "mock-fs";
import { QuiltMetadata } from "@/loaders/quilt/quilt-metadata";
import { QuiltMetadataReader } from "@/loaders/quilt/quilt-metadata-reader";

beforeEach(async () => {
    mockFs({
        "quilt.mod.jar": await zipFile([__dirname, "../../../content/quilt/quilt.mod.json"]),
        "text.txt": "",
    });
});

afterEach(() => {
    mockFs.restore();
});

describe("QuiltMetadataReader", () => {
    test("successfully reads quilt.mod.json", async () => {
        const reader = new QuiltMetadataReader();

        const metadata = await reader.readMetadataFile("quilt.mod.jar");

        expect(metadata).toBeInstanceOf(QuiltMetadata);
    });

    test("throws if file is not a Quilt mod", async () => {
        const reader = new QuiltMetadataReader();

        await expect(reader.readMetadataFile("text.txt")).rejects.toThrow();
    });

    test("throws if file does not exist", async () => {
        const reader = new QuiltMetadataReader();

        await expect(reader.readMetadataFile("text.json")).rejects.toThrow();
    });
});