index.js 1.33 KB
import { isMockEnabled } from '../utils/config'
import { mockHandlers } from './modules'
import { createMockRequestContext } from './shared/request'
import { buildMockFallbackPayload, buildMockSuccess } from './shared/response'
import { findMockHandler } from './shared/router'

const MOCK_DELAY_MS = 160

const mockDelay = (delay = MOCK_DELAY_MS) =>
  new Promise((resolve) => {
    setTimeout(resolve, delay)
  })

const createMockBody = (context) => {
  const matchedHandler = findMockHandler(mockHandlers, context)
  if (matchedHandler) {
    return matchedHandler.handle(context)
  }

  return buildMockSuccess(buildMockFallbackPayload(context))
}

export const shouldUseMock = () => isMockEnabled()

export const createAxiosMockResponse = async (options) => {
  const context = createMockRequestContext(options)
  await mockDelay()

  return {
    data: createMockBody(context),
    status: 200,
    statusText: 'OK',
    headers: {},
    config: options?.config || {},
  }
}

export const createTaroMockResponse = async (options) => {
  const context = createMockRequestContext(options)
  await mockDelay()

  const body = createMockBody(context)
  const mockCookie = `mock_sessionid=mock-${Date.now()}; Path=/; HttpOnly`

  return {
    data: body,
    statusCode: 200,
    header: {
      'Set-Cookie': mockCookie,
    },
    cookies: [mockCookie],
  }
}