mirror of
https://github.com/simstudioai/sim.git
synced 2026-02-02 18:55:25 -05:00
114 lines
3.3 KiB
TypeScript
114 lines
3.3 KiB
TypeScript
import { vi } from 'vitest'
|
|
|
|
/**
|
|
* Creates mock SQL template literal function.
|
|
* Mimics drizzle-orm's sql tagged template.
|
|
*/
|
|
export function createMockSql() {
|
|
return (strings: TemplateStringsArray, ...values: any[]) => ({
|
|
strings,
|
|
values,
|
|
toSQL: () => ({ sql: strings.join('?'), params: values }),
|
|
})
|
|
}
|
|
|
|
/**
|
|
* Creates mock SQL operators (eq, and, or, etc.).
|
|
*/
|
|
export function createMockSqlOperators() {
|
|
return {
|
|
eq: vi.fn((a, b) => ({ type: 'eq', left: a, right: b })),
|
|
ne: vi.fn((a, b) => ({ type: 'ne', left: a, right: b })),
|
|
gt: vi.fn((a, b) => ({ type: 'gt', left: a, right: b })),
|
|
gte: vi.fn((a, b) => ({ type: 'gte', left: a, right: b })),
|
|
lt: vi.fn((a, b) => ({ type: 'lt', left: a, right: b })),
|
|
lte: vi.fn((a, b) => ({ type: 'lte', left: a, right: b })),
|
|
and: vi.fn((...conditions) => ({ type: 'and', conditions })),
|
|
or: vi.fn((...conditions) => ({ type: 'or', conditions })),
|
|
not: vi.fn((condition) => ({ type: 'not', condition })),
|
|
isNull: vi.fn((column) => ({ type: 'isNull', column })),
|
|
isNotNull: vi.fn((column) => ({ type: 'isNotNull', column })),
|
|
inArray: vi.fn((column, values) => ({ type: 'inArray', column, values })),
|
|
notInArray: vi.fn((column, values) => ({ type: 'notInArray', column, values })),
|
|
like: vi.fn((column, pattern) => ({ type: 'like', column, pattern })),
|
|
ilike: vi.fn((column, pattern) => ({ type: 'ilike', column, pattern })),
|
|
desc: vi.fn((column) => ({ type: 'desc', column })),
|
|
asc: vi.fn((column) => ({ type: 'asc', column })),
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Creates a mock database connection.
|
|
*/
|
|
export function createMockDb() {
|
|
return {
|
|
select: vi.fn(() => ({
|
|
from: vi.fn(() => ({
|
|
where: vi.fn(() => ({
|
|
limit: vi.fn(() => Promise.resolve([])),
|
|
orderBy: vi.fn(() => Promise.resolve([])),
|
|
})),
|
|
leftJoin: vi.fn(() => ({
|
|
where: vi.fn(() => Promise.resolve([])),
|
|
})),
|
|
innerJoin: vi.fn(() => ({
|
|
where: vi.fn(() => Promise.resolve([])),
|
|
})),
|
|
})),
|
|
})),
|
|
insert: vi.fn(() => ({
|
|
values: vi.fn(() => ({
|
|
returning: vi.fn(() => Promise.resolve([])),
|
|
onConflictDoUpdate: vi.fn(() => ({
|
|
returning: vi.fn(() => Promise.resolve([])),
|
|
})),
|
|
onConflictDoNothing: vi.fn(() => ({
|
|
returning: vi.fn(() => Promise.resolve([])),
|
|
})),
|
|
})),
|
|
})),
|
|
update: vi.fn(() => ({
|
|
set: vi.fn(() => ({
|
|
where: vi.fn(() => ({
|
|
returning: vi.fn(() => Promise.resolve([])),
|
|
})),
|
|
})),
|
|
})),
|
|
delete: vi.fn(() => ({
|
|
where: vi.fn(() => ({
|
|
returning: vi.fn(() => Promise.resolve([])),
|
|
})),
|
|
})),
|
|
transaction: vi.fn(async (callback) => callback(createMockDb())),
|
|
query: vi.fn(() => Promise.resolve([])),
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Mock module for @sim/db.
|
|
* Use with vi.mock() to replace the real database.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* vi.mock('@sim/db', () => databaseMock)
|
|
* ```
|
|
*/
|
|
export const databaseMock = {
|
|
db: createMockDb(),
|
|
sql: createMockSql(),
|
|
...createMockSqlOperators(),
|
|
}
|
|
|
|
/**
|
|
* Creates a mock for drizzle-orm module.
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* vi.mock('drizzle-orm', () => drizzleOrmMock)
|
|
* ```
|
|
*/
|
|
export const drizzleOrmMock = {
|
|
sql: createMockSql(),
|
|
...createMockSqlOperators(),
|
|
}
|