Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/graphql-toolset / src / expressMock.ts
Size: Mime:
import { fromArrayToCookieString } from './cookieHelpers'
import { config } from './config'
import { toMockLogger } from './loggerMock'

const DEFAULT_EXPRESS_INTERNALS = {
  headers: new Headers(),
  logger: toMockLogger(),
}
const DEFAULT_EXPRESS_RESPONSE_INTERNALS = {
  headers: new Headers(),
  // logger: toMockLogger(),
}

// @todo need to pass in the infos
const toMockExpressRequest = (
  mockRequestInternals = DEFAULT_EXPRESS_INTERNALS
) => {
  const get = (key: string) => {
    // console.info('[expressMock] getting from headers: ' + key)

    if (mockRequestInternals.headers.has(key)) {
      const value = mockRequestInternals.headers.get(key)
      // console.debug(`[expressMock] internals has: ${key}=${value}`)
      return value
    } else if (key === 'Cookie') {
      return undefined
      return fromArrayToCookieString(config.get('cookies'))
    } else {
      return undefined
      const got = config
        .get('cookies')
        .find(x => x.includes('x-sk-session-id='))
      // console.log('[request] get got: ', got)
      return got
    }
  }

  // @fixme may need circular .httpRequest || .req
  const mockExpressRequest = {
    mockRequestInternals,

    // circular
    req: undefined,

    log: mockRequestInternals.logger || toMockLogger(),
    get,
    headers: {
      get Cookie() {
        return fromArrayToCookieString(config.get('cookies'))
        // return config.get('cookie')
      },
      get,
      has: (key: string) => !!get(key),
    },
    get cookies() {
      return config.get('cookies')
    },
  }
  mockExpressRequest.req = mockExpressRequest

  return mockExpressRequest
}

const toMockExpressResponse = (
  internals = DEFAULT_EXPRESS_RESPONSE_INTERNALS
) => {
  const mockResponse = {
    headers: new Headers(),
    header: (key, value) => {
      console.debug('[response] header called')
      // console.log({ [key]: value })
      mockResponse.headers.set(key, value)
      return mockResponse
    },
    cookie(key: string, fixedValue: any, attributes: { [key: string]: any }) {
      console.debug('[response] cookies called')
      return mockResponse
    },
  }
  return mockResponse
}

const toMockContext = () => {
  const mockExpressRequest = toMockExpressRequest()
  const mockExpressResponse = toMockExpressResponse()
  const context = {
    req: mockExpressRequest,
    res: mockExpressResponse,
    log: toMockLogger(),
    // needed?
    // correlationId: toCorrelationId(mockExpressRequest)
  }

  return context
}

export {
  toMockExpressRequest,
  toMockExpressResponse,
  toMockContext,
  toMockLogger,
}