src/lib/ai/__tests__/tensorflow-generator.test.ts

Total Symbols
1
Lines of Code
92
Avg Complexity
1.0
Symbol Types
1

Symbols by Kind

function 1

All Symbols

Name Kind Visibility Status Lines Signature
makeField function - 26-40 makeField(overrides: Partial<FormField> = {}): : FormField

Full Source

import { describe, expect, it, vi, beforeEach } from "vitest";

vi.mock("@/lib/form/detectors/strategies", () => ({
  loadPretrainedModel: vi.fn().mockResolvedValue(undefined),
  invalidateClassifier: vi.fn(),
  reloadClassifier: vi.fn().mockResolvedValue(undefined),
  classifyField: vi.fn().mockReturnValue("email"),
  classifyByTfSoft: vi.fn().mockReturnValue(null),
}));

vi.mock("@/lib/generators", () => ({
  generate: vi.fn().mockReturnValue("test@example.com"),
}));

import {
  loadPretrainedModel,
  invalidateClassifier,
  reloadClassifier,
  classifyField,
  classifyByTfSoft,
  generateWithTensorFlow,
} from "@/lib/ai/tensorflow-generator";
import { generate } from "@/lib/generators";
import type { FormField } from "@/types";

function makeField(overrides: Partial<FormField> = {}): FormField {
  return {
    element: { tagName: "INPUT", type: "text" } as unknown as HTMLInputElement,
    selector: "#test-field",
    category: "personal",
    fieldType: "email",
    label: "Email",
    placeholder: "",
    name: "email",
    id: "test-field",
    required: false,
    options: [],
    ...overrides,
  };
}

describe("tensorflow-generator re-exports", () => {
  it("exports loadPretrainedModel", () => {
    expect(loadPretrainedModel).toBeDefined();
    expect(typeof loadPretrainedModel).toBe("function");
  });

  it("exports invalidateClassifier", () => {
    expect(invalidateClassifier).toBeDefined();
    expect(typeof invalidateClassifier).toBe("function");
  });

  it("exports reloadClassifier", () => {
    expect(reloadClassifier).toBeDefined();
    expect(typeof reloadClassifier).toBe("function");
  });

  it("exports classifyField", () => {
    expect(classifyField).toBeDefined();
    expect(typeof classifyField).toBe("function");
  });

  it("exports classifyByTfSoft", () => {
    expect(classifyByTfSoft).toBeDefined();
    expect(typeof classifyByTfSoft).toBe("function");
  });
});

describe("generateWithTensorFlow", () => {
  beforeEach(() => {
    vi.mocked(classifyField).mockReturnValue("email");
    vi.mocked(generate).mockReturnValue("test@example.com");
  });

  it("classifies the field and generates a value", async () => {
    const field = makeField();
    const result = await generateWithTensorFlow(field);
    expect(classifyField).toHaveBeenCalledWith(field);
    expect(generate).toHaveBeenCalledWith("email");
    expect(result).toBe("test@example.com");
  });

  it("returns value from generate for any detected type", async () => {
    vi.mocked(classifyField).mockReturnValue("cpf");
    vi.mocked(generate).mockReturnValue("123.456.789-09");
    const result = await generateWithTensorFlow(
      makeField({ signals: { primary: [], secondary: [], structural: [] } }),
    );
    expect(result).toBe("123.456.789-09");
  });
});