mirror of
https://github.com/hanzoai/flow.git
synced 2026-11-02 23:41:19 +00:00
Completes the rebrand per direction: LANGFLOW_/LANGFLOW -> FLOW_/FLOW (env vars, headers), langflow_ -> flow_ (settings fields, local vars), camelCase identifiers (LangflowClient/Logo/HTTPError, builtWithLangflow, getLangflowDesktop) -> Flow*, and all remaining bare tokens. Fixed the identifier-space hazard (Langflow -> 'Hanzo Flow' is prose-only; in code it collapses to Flow so no identifier gains a space). compileall of flow + lfx is clean. Repo-wide langflow now = 4, all the protected MIT attribution to langflow-ai/ langflow in README (legally required; deliberately preserved). Breaking (per no-backwards-compat / forward-perfection): the LANGFLOW_* env-var prefix is now FLOW_* — deployments must update their env. CI's uv + frontend build is the runtime gate.
186 lines
6.2 KiB
TypeScript
186 lines
6.2 KiB
TypeScript
/**
|
|
* Test template for utility/helper functions in Flow.
|
|
*
|
|
* Usage:
|
|
* 1. Copy this file to `__tests__/util-name.test.ts`
|
|
* 2. Replace all TEMPLATE_* placeholders with actual values
|
|
* 3. Remove unused sections
|
|
* 4. Run: npm test -- path/to/__tests__/util-name.test.ts
|
|
*/
|
|
|
|
// Replace with actual utility import path
|
|
import {
|
|
TEMPLATE_FUNCTION_A,
|
|
TEMPLATE_FUNCTION_B,
|
|
} from "../TEMPLATE_UTIL_FILE";
|
|
|
|
// ============================================================
|
|
// Mocks (only if the utility has side effects or external deps)
|
|
// ============================================================
|
|
|
|
// jest.mock("@/controllers/API/api", () => ({
|
|
// __esModule: true,
|
|
// default: { get: jest.fn(), post: jest.fn() },
|
|
// }));
|
|
|
|
// ============================================================
|
|
// Test Data
|
|
// ============================================================
|
|
|
|
// Define reusable test fixtures
|
|
// const VALID_INPUT = { id: "1", name: "Test" };
|
|
// const EMPTY_INPUT = {};
|
|
// const INVALID_INPUT = null;
|
|
|
|
// ============================================================
|
|
// Tests
|
|
// ============================================================
|
|
|
|
describe("TEMPLATE_FUNCTION_A", () => {
|
|
// ----------------------------------------------------------
|
|
// Normal Cases
|
|
// ----------------------------------------------------------
|
|
|
|
describe("normal cases", () => {
|
|
it("should return expected output for standard input", () => {
|
|
// const result = TEMPLATE_FUNCTION_A(VALID_INPUT);
|
|
// expect(result).toEqual(expectedOutput);
|
|
});
|
|
|
|
it("should handle multiple valid inputs", () => {
|
|
// Test with different valid inputs
|
|
});
|
|
});
|
|
|
|
// ----------------------------------------------------------
|
|
// Data-Driven Tests
|
|
// ----------------------------------------------------------
|
|
|
|
// Use it.each for functions with many input/output combinations
|
|
// it.each([
|
|
// { input: "hello", expected: "HELLO", description: "lowercase string" },
|
|
// { input: "Hello", expected: "HELLO", description: "mixed case string" },
|
|
// { input: "", expected: "", description: "empty string" },
|
|
// { input: "HELLO", expected: "HELLO", description: "already uppercase" },
|
|
// ])("should return $expected for $description", ({ input, expected }) => {
|
|
// expect(TEMPLATE_FUNCTION_A(input)).toBe(expected);
|
|
// });
|
|
|
|
// Alternatively, use array format for simpler cases:
|
|
// it.each([
|
|
// [0, "0s"],
|
|
// [500, "0.5s"],
|
|
// [1000, "1.0s"],
|
|
// [60000, "1m 0s"],
|
|
// ])("should format %i ms as %s", (input, expected) => {
|
|
// expect(TEMPLATE_FUNCTION_A(input)).toBe(expected);
|
|
// });
|
|
|
|
// ----------------------------------------------------------
|
|
// Edge Cases
|
|
// ----------------------------------------------------------
|
|
|
|
describe("edge cases", () => {
|
|
it("should handle empty input", () => {
|
|
// const result = TEMPLATE_FUNCTION_A("");
|
|
// expect(result).toBe(expectedDefault);
|
|
});
|
|
|
|
it("should handle null or undefined", () => {
|
|
// expect(TEMPLATE_FUNCTION_A(null)).toBe(fallbackValue);
|
|
// expect(TEMPLATE_FUNCTION_A(undefined)).toBe(fallbackValue);
|
|
});
|
|
|
|
it("should handle boundary values", () => {
|
|
// Test with minimum/maximum values
|
|
// expect(TEMPLATE_FUNCTION_A(0)).toBe(expectedForZero);
|
|
// expect(TEMPLATE_FUNCTION_A(Number.MAX_SAFE_INTEGER)).toBe(expectedForMax);
|
|
});
|
|
|
|
it("should handle special characters", () => {
|
|
// Test with unicode, emojis, special chars if applicable
|
|
});
|
|
});
|
|
|
|
// ----------------------------------------------------------
|
|
// Error Cases
|
|
// ----------------------------------------------------------
|
|
|
|
describe("error cases", () => {
|
|
it("should throw for invalid input", () => {
|
|
// expect(() => TEMPLATE_FUNCTION_A(invalidInput)).toThrow("Expected error message");
|
|
});
|
|
|
|
it("should return fallback for malformed data", () => {
|
|
// const result = TEMPLATE_FUNCTION_A(malformedData);
|
|
// expect(result).toBe(fallbackValue);
|
|
});
|
|
});
|
|
|
|
// ----------------------------------------------------------
|
|
// Type-Specific Tests
|
|
// ----------------------------------------------------------
|
|
|
|
// describe("with arrays", () => {
|
|
// it("should handle empty array", () => {
|
|
// expect(TEMPLATE_FUNCTION_A([])).toEqual([]);
|
|
// });
|
|
//
|
|
// it("should handle single element", () => {
|
|
// expect(TEMPLATE_FUNCTION_A([1])).toEqual([expectedSingle]);
|
|
// });
|
|
//
|
|
// it("should preserve order", () => {
|
|
// const input = [3, 1, 2];
|
|
// const result = TEMPLATE_FUNCTION_A(input);
|
|
// expect(result).toEqual([expectedOrdered]);
|
|
// });
|
|
//
|
|
// it("should not mutate the original array", () => {
|
|
// const input = [1, 2, 3];
|
|
// const inputCopy = [...input];
|
|
// TEMPLATE_FUNCTION_A(input);
|
|
// expect(input).toEqual(inputCopy);
|
|
// });
|
|
// });
|
|
|
|
// describe("with objects", () => {
|
|
// it("should handle nested objects", () => {
|
|
// const input = { a: { b: { c: "deep" } } };
|
|
// expect(TEMPLATE_FUNCTION_A(input)).toBe(expectedDeep);
|
|
// });
|
|
//
|
|
// it("should not mutate the original object", () => {
|
|
// const input = { key: "value" };
|
|
// const inputCopy = { ...input };
|
|
// TEMPLATE_FUNCTION_A(input);
|
|
// expect(input).toEqual(inputCopy);
|
|
// });
|
|
// });
|
|
});
|
|
|
|
// ============================================================
|
|
// Second Function (if the file exports multiple functions)
|
|
// ============================================================
|
|
|
|
describe("TEMPLATE_FUNCTION_B", () => {
|
|
it("should return expected output for standard input", () => {
|
|
// const result = TEMPLATE_FUNCTION_B(input);
|
|
// expect(result).toBe(expected);
|
|
});
|
|
|
|
// Add more tests following the same pattern as above
|
|
});
|
|
|
|
// ============================================================
|
|
// Integration Tests (if functions work together)
|
|
// ============================================================
|
|
|
|
// describe("integration", () => {
|
|
// it("should compose TEMPLATE_FUNCTION_A and TEMPLATE_FUNCTION_B correctly", () => {
|
|
// const intermediate = TEMPLATE_FUNCTION_A(rawInput);
|
|
// const result = TEMPLATE_FUNCTION_B(intermediate);
|
|
// expect(result).toBe(expectedFinalOutput);
|
|
// });
|
|
// });
|