import { describe, it, expect } from "vitest"; import { readFileSync } from "node:fs"; import { resolve } from "node:path"; describe("useApi composable", () => { const path = resolve(__dirname, "../../composables/useApi.ts"); const content = readFileSync(path, "utf-8"); it("should export useApi function", () => { expect(content).toContain("export function useApi"); }); it("should use useRuntimeConfig for apiBase", () => { expect(content).toContain("useRuntimeConfig"); expect(content).toContain("apiBase"); }); it("should create $fetch client with baseURL", () => { expect(content).toContain("$fetch.create"); expect(content).toContain("baseURL"); }); it("should export get, post, put, del methods", () => { expect(content).toContain("async function get"); expect(content).toContain("async function post"); expect(content).toContain("async function put"); expect(content).toContain("async function del"); }); }); describe("useEquipment composable", () => { const path = resolve(__dirname, "../../composables/useEquipment.ts"); const content = readFileSync(path, "utf-8"); it("should export EquipmentItem interface", () => { expect(content).toContain("export interface EquipmentItem"); }); it("should export EquipmentDetail interface", () => { expect(content).toContain("export interface EquipmentDetail"); }); it("should export PaginatedEquipment interface", () => { expect(content).toContain("export interface PaginatedEquipment"); }); it("should export SortOption type", () => { expect(content).toContain("export type SortOption"); }); it("should use useApi internally", () => { expect(content).toContain("useApi"); }); it("should have list method with search, category, sort, page params", () => { expect(content).toContain("async function list"); expect(content).toContain("search"); expect(content).toContain("category"); expect(content).toContain("sort"); expect(content).toContain("page"); }); it("should call /api/equipment for list", () => { expect(content).toContain("/api/equipment"); expect(content).toContain("/api/equipment/categories"); expect(content).toContain("/api/equipment/${id}"); }); it("should have detail method", () => { expect(content).toContain("async function detail"); }); it("should have categories method", () => { expect(content).toContain("async function categories"); expect(content).toContain("/api/equipment/categories"); }); it("should return list, detail, categories from composable", () => { expect(content).toContain("return"); expect(content).toContain("list"); expect(content).toContain("detail"); expect(content).toContain("categories"); }); });