import { useCreateCustomer, useUpdateMe } from "../../../../src/"
import { renderHook } from "@testing-library/react-hooks"
import { fixtures } from "../../../../mocks/data"
import { createWrapper } from "../../../utils"

describe("useCreateCustomer hook", () => {
  test("creates a new customer", async () => {
    const customer = {
      first_name: "john",
      last_name: "wick",
      email: "johnwick@medusajs.com",
      password: "supersecret",
      phone: "111111",
    }

    const { result, waitFor } = renderHook(() => useCreateCustomer(), {
      wrapper: createWrapper(),
    })

    result.current.mutate(customer)

    await waitFor(() => result.current.isSuccess)

    expect(result.current.data.response.status).toEqual(200)
    expect(result.current.data.customer).toEqual({
      ...fixtures.get("customer"),
      ...customer,
    })
  })
})

describe("useUpdateMe hook", () => {
  test("updates current customer", async () => {
    const customer = {
      first_name: "lebron",
      last_name: "james",
      email: "lebronjames@medusajs.com",
      password: "supersecret",
      phone: "111111",
    }

    const { result, waitFor } = renderHook(() => useUpdateMe(), {
      wrapper: createWrapper(),
    })

    result.current.mutate({
      id: "cus_test",
      ...customer,
    })

    await waitFor(() => result.current.isSuccess)

    expect(result.current.data.response.status).toEqual(200)
    expect(result.current.data.customer).toEqual({
      ...fixtures.get("customer"),
      ...customer,
    })
  })
})
