Files
medusa-store/packages/medusa-react/test/hooks/admin/inventory-items/mutations.test.ts
Rares Stefan 12d304307a feat(medusa-js, medusa-react, medusa): Prepare API for admin implementations (#3110)
********What********
Add `joinSalesChannels util to stock locations

Add the following endpoints to medusa-react
- inventory items
    - mutations
        - update
        - delete
        - update location level
        - delete location level
        - create location level
    - queries
        - list inventory items
        - get inventory item
        - list location levels
- Stock locations
    - mutations
        - create stock location
        - update stock location
        - delete stock location
    - queries
        - list stock locations
        - get stock locatoin
- Variants
    - queries
        - get inventory
- Reservations
    - mutations
        - create reservation
        - update reservation
        - delete reservation
    - queries
        - list reservations
        - get reservation
- sales channels 
  - mutations
    - associate location with sc
    - remove location association

**Why**
- Update clients to reflect new api endpoints in the core with inventory modules

Co-authored-by: Philip Korsholm <88927411+pKorsholm@users.noreply.github.com>
2023-02-16 08:49:48 +00:00

145 lines
3.6 KiB
TypeScript

import {
useAdminUpdateInventoryItem,
useAdminDeleteInventoryItem,
useAdminUpdateLocationLevel,
useAdminDeleteLocationLevel,
useAdminCreateLocationLevel,
} from "../../../../src/"
import { renderHook } from "@testing-library/react-hooks"
import { createWrapper } from "../../../utils"
describe("useAdminUpdateInventoryItem hook", () => {
test("updates an inventory item", async () => {
const payload = {
sku: "test-sku",
}
const { result, waitFor } = renderHook(
() => useAdminUpdateInventoryItem("inventory-item-id"),
{
wrapper: createWrapper(),
}
)
result.current.mutate(payload)
await waitFor(() => result.current.isSuccess)
expect(result.current.data.response.status).toEqual(200)
expect(result.current.data.inventory_item).toEqual(
expect.objectContaining({
id: "inventory-item-id",
sku: "test-sku",
})
)
})
})
describe("useAdminDeleteInventoryItem hook", () => {
test("Deletes an inventory item", async () => {
const { result, waitFor } = renderHook(
() => useAdminDeleteInventoryItem("inventory-item-id"),
{
wrapper: createWrapper(),
}
)
result.current.mutate()
await waitFor(() => result.current.isSuccess)
expect(result.current.data.response.status).toEqual(200)
expect(result.current.data).toEqual(
expect.objectContaining({
id: "inventory-item-id",
deleted: true,
})
)
})
})
describe("useAdminUpdateLocationLevel hook", () => {
test("Updates a location level", async () => {
const payload = {
incoming_quantity: 10,
}
const { result, waitFor } = renderHook(
() => useAdminUpdateLocationLevel("inventory-item-id"),
{
wrapper: createWrapper(),
}
)
result.current.mutate({ ...payload, stockLocationId: "location_id"})
await waitFor(() => result.current.isSuccess)
expect(result.current.data.response.status).toEqual(200)
expect(result.current.data.inventory_item).toEqual(
expect.objectContaining({
id: "inventory-item-id",
location_levels: [
expect.objectContaining({
incoming_quantity: 10,
}),
],
})
)
})
})
describe("useAdminDeleteLocationLevel hook", () => {
test("removes a location level", async () => {
const { result, waitFor } = renderHook(
() => useAdminDeleteLocationLevel("inventory-item-id"),
{
wrapper: createWrapper(),
}
)
result.current.mutate("location_id")
await waitFor(() => result.current.isSuccess)
expect(result.current.data.response.status).toEqual(200)
expect(result.current.data.inventory_item).toEqual(
expect.objectContaining({
id: "inventory-item-id",
location_levels: [],
})
)
})
})
describe("useAdminCreateLocationLevel hook", () => {
test("creates a location level", async () => {
const payload = {
location_id: "loc_1",
incoming_quantity: 10,
stocked_quantity: 10,
}
const { result, waitFor } = renderHook(
() => useAdminCreateLocationLevel("inventory-item-id"),
{
wrapper: createWrapper(),
}
)
result.current.mutate(payload)
await waitFor(() => result.current.isSuccess)
expect(result.current.data.response.status).toEqual(200)
expect(result.current.data.inventory_item).toEqual(
expect.objectContaining({
id: "inventory-item-id",
location_levels: expect.arrayContaining([
expect.objectContaining({ ...payload }),
]),
})
)
})
})