peijun1's picture
Deploy AI Studio Proxy API to Hugging Face Spaces
a5784e9
Raw
History Blame Contribute Delete
4.43 kB
/**
* AuthManager Component Tests
*/
import { describe, it, expect, vi, beforeEach } from "vitest";
// Define types locally to avoid module resolution issues
interface AuthFileInfo {
name: string;
path: string;
size_bytes: number;
is_active: boolean;
}
interface AuthFilesResponse {
saved_files: AuthFileInfo[];
active_file: string | null;
}
describe("AuthManager Logic", () => {
beforeEach(() => {
vi.clearAllMocks();
});
describe("Data Fetching", () => {
it("returns loading state structure", () => {
const result = { data: undefined, isLoading: true, error: null };
expect(result.isLoading).toBe(true);
});
it("returns auth files when loaded", () => {
const mockData: AuthFilesResponse = {
saved_files: [
{
name: "auth1.json",
path: "/data/auth1.json",
size_bytes: 1024,
is_active: true,
},
{
name: "auth2.json",
path: "/data/auth2.json",
size_bytes: 2048,
is_active: false,
},
],
active_file: "auth1.json",
};
const result = { data: mockData, isLoading: false, error: null };
expect(result.data.saved_files).toHaveLength(2);
expect(result.data.active_file).toBe("auth1.json");
});
it("handles empty file list", () => {
const mockData: AuthFilesResponse = {
saved_files: [],
active_file: null,
};
const result = { data: mockData, isLoading: false, error: null };
expect(result.data.saved_files).toHaveLength(0);
expect(result.data.active_file).toBeNull();
});
});
describe("Mutations", () => {
it("activateAuthFile mutation accepts filename", () => {
const filename = "auth2.json";
expect(typeof filename).toBe("string");
});
it("deactivateAuth mutation structure", () => {
const mutation = { isPending: false };
expect(mutation.isPending).toBe(false);
});
it("shows pending state during activation", () => {
const mutation = { isPending: true };
expect(mutation.isPending).toBe(true);
});
});
describe("File List Processing", () => {
it("extracts saved_files array correctly", () => {
const data: AuthFilesResponse = {
saved_files: [
{
name: "a.json",
path: "/a.json",
size_bytes: 100,
is_active: false,
},
],
active_file: null,
};
const savedFiles = data.saved_files;
expect(savedFiles).toHaveLength(1);
});
it("handles undefined data gracefully", () => {
const data: AuthFilesResponse | undefined = undefined;
const savedFiles = data?.saved_files || [];
expect(savedFiles).toHaveLength(0);
});
it("identifies active file correctly", () => {
const files = [
{ name: "auth1.json", is_active: true },
{ name: "auth2.json", is_active: false },
];
const activeFile = files.find((f) => f.is_active);
expect(activeFile?.name).toBe("auth1.json");
});
it("formats file size in KB", () => {
const sizeBytes = 2048;
const sizeKB = (sizeBytes / 1024).toFixed(1);
expect(sizeKB).toBe("2.0");
});
it("handles very small files", () => {
const sizeBytes = 100;
const sizeKB = (sizeBytes / 1024).toFixed(1);
expect(sizeKB).toBe("0.1");
});
});
describe("Active State Logic", () => {
it("determines if deactivate button should show", () => {
const activeFile: string | null = "auth1.json";
const shouldShowDeactivate = activeFile !== null;
expect(shouldShowDeactivate).toBe(true);
});
it("hides deactivate button when no active file", () => {
const activeFile: string | null = null;
const shouldShowDeactivate = activeFile !== null;
expect(shouldShowDeactivate).toBe(false);
});
it("determines if activate button should show for inactive files", () => {
const file = { name: "auth2.json", is_active: false };
const shouldShowActivate = !file.is_active;
expect(shouldShowActivate).toBe(true);
});
it("hides activate button for active file", () => {
const file = { name: "auth1.json", is_active: true };
const shouldShowActivate = !file.is_active;
expect(shouldShowActivate).toBe(false);
});
});
});