Skip to main content
Glama
task.factory.ts2.82 kB
import { faker } from "@faker-js/faker"; import type { Task, Money, VisState } from "../../../src/types/freshbooks"; export interface TaskOverrides { id?: number; taskid?: number; name?: string | null; tname?: string | null; description?: string | null; tdesc?: string | null; billable?: boolean; rate?: Money; visState?: VisState; updated?: string; } /** * Create a mock Money object */ export function createMoney(amount?: string, code: string = 'USD'): Money { return { amount: amount ?? faker.finance.amount({ min: 0, max: 500, dec: 2 }), code, }; } /** * Create a mock Task with realistic data */ export function createTask(overrides: TaskOverrides = {}): Task { const taskNames = [ 'Development', 'Testing', 'Code Review', 'Documentation', 'Bug Fixing', 'Deployment', 'Meeting', 'Planning', 'Research', 'Maintenance', ]; const taskName = overrides.name ?? overrides.tname ?? faker.helpers.arrayElement(taskNames); return { id: overrides.id ?? faker.number.int({ min: 1, max: 999999 }), taskid: overrides.taskid ?? faker.number.int({ min: 1, max: 999999 }), name: overrides.name !== undefined ? overrides.name : taskName, tname: overrides.tname !== undefined ? overrides.tname : taskName, description: overrides.description !== undefined ? overrides.description : faker.lorem.sentence(), tdesc: overrides.tdesc !== undefined ? overrides.tdesc : faker.lorem.sentence(), billable: overrides.billable ?? true, rate: overrides.rate ?? createMoney(), visState: overrides.visState ?? 0, // 0 = active updated: overrides.updated ?? faker.date.recent({ days: 30 }).toISOString(), }; } /** * Create a list of mock Tasks */ export function createTaskList( count: number = 10, overrides: TaskOverrides = {} ): Task[] { return Array.from({ length: count }, (_, i) => createTask({ ...overrides, id: (overrides.id ?? 1) + i }) ); } /** * Create a billable task */ export function createBillableTask(overrides: TaskOverrides = {}): Task { return createTask({ billable: true, rate: createMoney(faker.finance.amount({ min: 50, max: 300, dec: 2 })), ...overrides, }); } /** * Create a non-billable task */ export function createNonBillableTask(overrides: TaskOverrides = {}): Task { return createTask({ billable: false, rate: createMoney('0.00'), ...overrides, }); } /** * Create an archived task */ export function createArchivedTask(overrides: TaskOverrides = {}): Task { return createTask({ visState: 2, // 2 = archived ...overrides, }); } /** * Create a deleted task */ export function createDeletedTask(overrides: TaskOverrides = {}): Task { return createTask({ visState: 1, // 1 = deleted ...overrides, }); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Good-Samaritan-Software-LLC/freshbooks-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server