@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
165 lines (164 loc) • 6.4 kB
TypeScript
/**
* Knex mocking utilities for service tests
* Provides mock knex instances, table builders, and tracker utilities
*/
import knex from 'knex';
import { type Tracker } from 'knex-mock-client';
/**
* Creates a mocked knex instance with tracker and schema builder support
*
* @returns Object containing the mocked db instance, tracker, and mockSchema
*
* @example
* ```typescript
* const { db, tracker, mockSchema } = createMockKnex();
*
* // Use tracker to mock query responses
* tracker.on.select('users').response([{ id: 1, name: 'John' }]);
*
* // Verify schema operations
* expect(mockSchema.createTable).toHaveBeenCalled();
* ```
*/
export declare function createMockKnex(): {
db: import("vitest").MockedFunction<knex.Knex<any, unknown[]>>;
tracker: Tracker;
mockSchemaBuilder: {
createTable: import("vitest").Mock<(_tableName: any, callback: any) => Promise<void>>;
dropTable: import("vitest").Mock<(...args: any[]) => any>;
hasTable: import("vitest").Mock<(...args: any[]) => any>;
table: import("vitest").Mock<(_tableName: any, callback: any) => Promise<void>>;
alterTable: import("vitest").Mock<(_tableName: any, callback: any) => Promise<void>>;
dropTableIfExists: import("vitest").Mock<(...args: any[]) => any>;
renameTable: import("vitest").Mock<(...args: any[]) => any>;
raw: import("vitest").Mock<(...args: any[]) => any>;
};
};
/**
* Creates a mock table builder for schema operations
* Used for testing column creation and alteration
*
* @returns Mock table builder with chainable methods
*
* @example
* ```typescript
* const table = createMockTableBuilder();
* table.string('name', 255).notNullable().index();
* ```
*/
export declare function createMockTableBuilder(): {
string: import("vitest").Mock<(...args: any[]) => any>;
text: import("vitest").Mock<(...args: any[]) => any>;
integer: import("vitest").Mock<(...args: any[]) => any>;
bigInteger: import("vitest").Mock<(...args: any[]) => any>;
float: import("vitest").Mock<(...args: any[]) => any>;
decimal: import("vitest").Mock<(...args: any[]) => any>;
boolean: import("vitest").Mock<(...args: any[]) => any>;
date: import("vitest").Mock<(...args: any[]) => any>;
dateTime: import("vitest").Mock<(...args: any[]) => any>;
timestamp: import("vitest").Mock<(...args: any[]) => any>;
json: import("vitest").Mock<(...args: any[]) => any>;
jsonb: import("vitest").Mock<(...args: any[]) => any>;
uuid: import("vitest").Mock<(...args: any[]) => any>;
increments: import("vitest").Mock<(...args: any[]) => any>;
bigIncrements: import("vitest").Mock<(...args: any[]) => any>;
defaultTo: import("vitest").Mock<(...args: any[]) => any>;
notNullable: import("vitest").Mock<(...args: any[]) => any>;
nullable: import("vitest").Mock<(...args: any[]) => any>;
primary: import("vitest").Mock<(...args: any[]) => any>;
unique: import("vitest").Mock<(...args: any[]) => any>;
index: import("vitest").Mock<(...args: any[]) => any>;
alter: import("vitest").Mock<(...args: any[]) => any>;
dropColumn: import("vitest").Mock<(...args: any[]) => any>;
dropUnique: import("vitest").Mock<(...args: any[]) => any>;
dropIndex: import("vitest").Mock<(...args: any[]) => any>;
};
/**
* Sets up common database operation mock handlers for all system collections
* Automatically mocks CRUD operations (select, insert, update, delete) for all Directus system collections
*
* @param tracker The knex-mock-client tracker instance
*
* @example
* ```typescript
* const { db, tracker, mockSchema } = createMockKnex();
* setupSystemCollectionMocks(tracker);
* // Now all CRUD operations on system collections are mocked
* ```
*/
export declare function setupSystemCollectionMocks(tracker: Tracker): void;
/**
* Resets all mock states
* Should be called in afterEach hooks to clean up between tests
*
* @param tracker The knex-mock-client tracker instance
* @param mockSchema The mock schema object from createMockKnex
*
* @example
* ```typescript
* const { db, tracker, mockSchema } = createMockKnex();
*
* afterEach(() => {
* resetMocks(tracker, mockSchema);
* });
* ```
*/
export declare function resetKnexMocks(tracker: Tracker, mockSchema: ReturnType<typeof createMockKnex>['mockSchemaBuilder']): void;
/**
* Creates a mock createTable function for testing table creation
* Returns a vi.fn() that calls the callback with a mock table builder
*
* @returns Mock function for db.schema.createTable
*
* @example
* ```typescript
* const { db } = createMockKnex();
* const createTableSpy = mockCreateTable();
* db.schema.createTable = createTableSpy as any;
*
* // Now when createTable is called, it will invoke the callback with a mock table builder
* await db.schema.createTable('users', (table) => {
* table.increments('id');
* table.string('name');
* });
* ```
*/
export declare function mockCreateTable(): import("vitest").Mock<(_tableName: any, callback: any) => Promise<void>>;
/**
* Creates a mock alterTable function for testing schema alterations
* Returns a vi.fn() that calls the callback with a mock table builder
*
* @returns Mock function for db.schema.alterTable
*
* @example
* ```typescript
* const { db } = createMockKnex();
* const alterTableSpy = mockAlterTable();
* db.schema.alterTable = alterTableSpy as any;
*
* // Now when alterTable is called, it will invoke the callback with a mock table builder
* await db.schema.alterTable('users', (table) => {
* table.string('name');
* });
* ```
*/
export declare function mockAlterTable(): import("vitest").Mock<(_tableName: any, callback: any) => Promise<void>>;
/**
* Creates a mock schema.table function for testing schema operations
* Returns a vi.fn() that calls the callback with a mock table builder
*
* @returns Mock function for db.schema.table
*
* @example
* ```typescript
* const { db } = createMockKnex();
* const schemaTableSpy = mockSchemaTable();
* db.schema.table = schemaTableSpy as any;
*
* // Now when schema.table is called, it will invoke the callback with a mock table builder
* await db.schema.table('users', (table) => {
* table.dropColumn('name');
* });
* ```
*/
export declare function mockSchemaTable(): import("vitest").Mock<(_tableName: any, callback: any) => Promise<void>>;