PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/avalanche/tests

Просмотр файла: avalanche.test.ts

import mockAxios from "jest-mock-axios"
import { Avalanche, AvalancheCore } from "../src"
import { AVMAPI } from "../src/apis/avm/api"
import { AdminAPI } from "../src/apis/admin/api"
import { HealthAPI } from "../src/apis/health/api"
import { InfoAPI } from "../src/apis/info/api"
import { KeystoreAPI } from "../src/apis/keystore/api"
import { MetricsAPI } from "../src/apis/metrics/api"
import { PlatformVMAPI } from "../src/apis/platformvm/api"
import { TestAPI } from "./testlib"
import { AxiosRequestConfig } from "axios"
import { HttpResponse } from "jest-mock-axios/dist/lib/mock-axios-types"

describe("Avalanche", (): void => {
  const blockchainID: string =
    "6h2s5de1VC65meajE1L2PjvZ1MXvHc3F6eqPCGKuDt4MxiweF"
  let host: string = "127.0.0.1"
  const port: number = 9650
  const networkID: number = 1337
  let protocol: string = "https"
  let avalanche: Avalanche
  let avalancheCore: AvalancheCore
  const api: string = "api.avax.network"
  const url: string = "https://api.avax.network:9650"
  const encrypted: string = "https"
  const skipinit: boolean = true
  beforeAll((): void => {
    avalanche = new Avalanche(
      host,
      port,
      protocol,
      networkID,
      undefined,
      undefined,
      undefined,
      skipinit
    )
    avalanche.addAPI("admin", AdminAPI)
    avalanche.addAPI("xchain", AVMAPI, "/ext/subnet/avm", blockchainID)
    avalanche.addAPI("health", HealthAPI)
    avalanche.addAPI("info", InfoAPI)
    avalanche.addAPI("keystore", KeystoreAPI)
    avalanche.addAPI("metrics", MetricsAPI)
    avalanche.addAPI("pchain", PlatformVMAPI)
  })
  test("Remove special characters", (): void => {
    host = "a&&&&p#i,.@a+v(a)x$.~n%e't:w*o?r<k>"
    protocol = "h@t&@&@t#p+s()$"
    avalanche = new Avalanche(host, port, protocol, networkID)
    expect(avalanche.getHost()).toBe(api)
    expect(avalanche.getProtocol()).toBe(encrypted)
    expect(avalanche.getURL()).toBe(url)
    avalancheCore = new AvalancheCore(host, port, protocol)
    expect(avalancheCore.getHost()).toBe(api)
    expect(avalancheCore.getProtocol()).toBe(encrypted)
    expect(avalancheCore.getURL()).toBe(url)
  })
  test("Can specify base endpoint", (): void => {
    avalanche = new Avalanche()
    avalanche.setAddress(api, port, encrypted, "rpc")
    avalanche.setNetworkID(networkID)
    expect(avalanche.getHost()).toBe(api)
    expect(avalanche.getProtocol()).toBe(encrypted)
    expect(avalanche.getPort()).toBe(port)
    expect(avalanche.getBaseEndpoint()).toBe("rpc")
    expect(avalanche.getURL()).toBe(`${url}/rpc`)
    expect(avalanche.getNetworkID()).toBe(networkID)
  })
  test("Can initialize without port", (): void => {
    protocol = encrypted
    host = api
    avalanche = new Avalanche(host, undefined, protocol, networkID)
    expect(avalanche.getPort()).toBe(undefined)
    expect(avalanche.getURL()).toBe(`${protocol}://${api}`)
    avalancheCore = new AvalancheCore(host, undefined, protocol)
    expect(avalancheCore.getPort()).toBe(undefined)
    expect(avalancheCore.getURL()).toBe(`${protocol}://${api}`)
  })
  test("Can initialize with port", (): void => {
    protocol = encrypted
    avalanche = new Avalanche(host, port, protocol, networkID)
    expect(avalanche.getIP()).toBe(host)
    expect(avalanche.getHost()).toBe(host)
    expect(avalanche.getPort()).toBe(port)
    expect(avalanche.getProtocol()).toBe(protocol)
    expect(avalanche.getURL()).toBe(`${protocol}://${host}:${port}`)
    expect(avalanche.getNetworkID()).toBe(1337)
    expect(avalanche.getHeaders()).toStrictEqual({})
    avalanche.setNetworkID(50)
    expect(avalanche.getNetworkID()).toBe(50)
    avalanche.setNetworkID(12345)
    expect(avalanche.getNetworkID()).toBe(12345)
  })

  test("Endpoints correct", (): void => {
    expect(avalanche.Admin()).not.toBeInstanceOf(AVMAPI)
    expect(avalanche.Admin()).toBeInstanceOf(AdminAPI)

    expect(avalanche.XChain()).not.toBeInstanceOf(AdminAPI)
    expect(avalanche.XChain()).toBeInstanceOf(AVMAPI)

    expect(avalanche.Health()).not.toBeInstanceOf(KeystoreAPI)
    expect(avalanche.Health()).toBeInstanceOf(HealthAPI)

    expect(avalanche.Info()).not.toBeInstanceOf(KeystoreAPI)
    expect(avalanche.Info()).toBeInstanceOf(InfoAPI)

    expect(avalanche.PChain()).not.toBeInstanceOf(KeystoreAPI)
    expect(avalanche.PChain()).toBeInstanceOf(PlatformVMAPI)

    expect(avalanche.NodeKeys()).not.toBeInstanceOf(PlatformVMAPI)
    expect(avalanche.NodeKeys()).toBeInstanceOf(KeystoreAPI)

    expect(avalanche.Metrics()).not.toBeInstanceOf(KeystoreAPI)
    expect(avalanche.Metrics()).toBeInstanceOf(MetricsAPI)

    expect(avalanche.Admin().getRPCID()).toBe(1)
    expect(avalanche.XChain().getRPCID()).toBe(1)
    expect(avalanche.PChain().getRPCID()).toBe(1)
    expect(avalanche.NodeKeys().getRPCID()).toBe(1)
  })

  test("Create new API", (): void => {
    avalanche.addAPI("avm2", AVMAPI)
    expect(avalanche.api("avm2")).toBeInstanceOf(AVMAPI)

    avalanche.addAPI("keystore2", KeystoreAPI, "/ext/keystore2")
    expect(avalanche.api("keystore2")).toBeInstanceOf(KeystoreAPI)

    avalanche.api("keystore2").setBaseURL("/ext/keystore3")
    expect(avalanche.api("keystore2").getBaseURL()).toBe("/ext/keystore3")

    expect(avalanche.api("keystore2").getDB()).toHaveProperty("namespace")
  })

  test("Customize headers", (): void => {
    avalanche.setHeader("X-Custom-Header", "example")
    avalanche.setHeader("X-Foo", "Foo")
    avalanche.setHeader("X-Bar", "Bar")
    expect(avalanche.getHeaders()).toStrictEqual({
      "X-Custom-Header": "example",
      "X-Foo": "Foo",
      "X-Bar": "Bar"
    })
    avalanche.removeHeader("X-Foo")
    expect(avalanche.getHeaders()).toStrictEqual({
      "X-Custom-Header": "example",
      "X-Bar": "Bar"
    })
    avalanche.removeAllHeaders()
    expect(avalanche.getHeaders()).toStrictEqual({})
  })

  test("Customize request config", (): void => {
    expect(avalanche.getRequestConfig()).toStrictEqual({})
    avalanche.setRequestConfig("withCredentials", true)
    avalanche.setRequestConfig("withFoo", "Foo")
    avalanche.setRequestConfig("withBar", "Bar")
    expect(avalanche.getRequestConfig()).toStrictEqual({
      withCredentials: true,
      withFoo: "Foo",
      withBar: "Bar"
    })
    avalanche.removeRequestConfig("withFoo")
    expect(avalanche.getRequestConfig()).toStrictEqual({
      withCredentials: true,
      withBar: "Bar"
    })
    avalanche.removeAllRequestConfigs()
    expect(avalanche.getRequestConfig()).toStrictEqual({})
  })
})

describe("HTTP Operations", (): void => {
  const host: string = "127.0.0.1"
  const port: number = 8080
  const protocol: string = "http"
  const path: string = "/ext/testingrequests"
  let avalanche: Avalanche
  beforeAll((): void => {
    avalanche = new Avalanche(
      host,
      port,
      protocol,
      12345,
      undefined,
      undefined,
      undefined,
      true
    )
    avalanche.addAPI("testingrequests", TestAPI, path)
  })

  afterEach((): void => {
    mockAxios.reset()
  })

  test("GET works", async (): Promise<void> => {
    const input: string = "TestGET"
    const api: TestAPI = avalanche.api("testingrequests")
    const result: Promise<object> = api.TestGET(input, `/${input}`)
    const payload: object = {
      result: {
        output: input
      }
    }
    const responseObj: HttpResponse = {
      data: payload
    }
    mockAxios.mockResponse(responseObj)
    const response: any = await result
    expect(mockAxios.request).toHaveBeenCalledTimes(1)
    expect(response.output).toBe(input)
  })

  test("DELETE works", async (): Promise<void> => {
    const input: string = "TestDELETE"
    const api: TestAPI = avalanche.api("testingrequests")
    const axiosConfig: AxiosRequestConfig = {
      baseURL: `${protocol}://${host}:${port}`,
      responseType: "text"
    }
    const result: Promise<object> = api.TestDELETE(
      input,
      `/${input}`,
      axiosConfig
    )
    const payload: object = {
      result: {
        output: input
      }
    }
    const responseObj: HttpResponse = {
      data: payload
    }
    mockAxios.mockResponse(responseObj)
    const response: any = await result
    expect(mockAxios.request).toHaveBeenCalledTimes(1)
    expect(response.output).toBe(input)
  })

  test("POST works", async (): Promise<void> => {
    const input: string = "TestPOST"
    const api: TestAPI = avalanche.api("testingrequests")
    const result: Promise<object> = api.TestPOST(input, `/${input}`)
    const payload: object = {
      result: {
        output: input
      }
    }
    const responseObj: HttpResponse = {
      data: payload
    }
    mockAxios.mockResponse(responseObj)
    const response: any = await result
    expect(mockAxios.request).toHaveBeenCalledTimes(1)
    expect(response.output).toBe(input)
  })

  test("PUT works", async (): Promise<void> => {
    const input: string = "TestPUT"
    const api: TestAPI = avalanche.api("testingrequests")
    const result: Promise<object> = api.TestPUT(input, `/${input}`)
    const payload: object = {
      result: {
        output: input
      }
    }
    const responseObj: HttpResponse = {
      data: payload
    }
    mockAxios.mockResponse(responseObj)
    const response: any = await result
    expect(mockAxios.request).toHaveBeenCalledTimes(1)
    expect(response.output).toBe(input)
  })

  test("PATCH works", async (): Promise<void> => {
    const input: string = "TestPATCH"
    const api: TestAPI = avalanche.api("testingrequests")
    const result: Promise<object> = api.TestPATCH(input, `/${input}`)
    const payload: object = {
      result: {
        output: input
      }
    }
    const responseObj: HttpResponse = {
      data: payload
    }
    mockAxios.mockResponse(responseObj)
    const response: any = await result
    expect(mockAxios.request).toHaveBeenCalledTimes(1)
    expect(response.output).toBe(input)
  })
})

Выполнить команду


Для локальной разработки. Не используйте в интернете!