feat(medusa): skip draft orders on order list (#10195)
This commit is contained in:
@@ -13,6 +13,7 @@ import {
|
|||||||
export async function createOrderSeeder({
|
export async function createOrderSeeder({
|
||||||
api,
|
api,
|
||||||
container,
|
container,
|
||||||
|
storeHeaderOverride,
|
||||||
productOverride,
|
productOverride,
|
||||||
additionalProducts,
|
additionalProducts,
|
||||||
stockChannelOverride,
|
stockChannelOverride,
|
||||||
@@ -20,13 +21,19 @@ export async function createOrderSeeder({
|
|||||||
}: {
|
}: {
|
||||||
api: any
|
api: any
|
||||||
container: MedusaContainer
|
container: MedusaContainer
|
||||||
|
storeHeaderOverride?: any
|
||||||
productOverride?: AdminProduct
|
productOverride?: AdminProduct
|
||||||
stockChannelOverride?: AdminStockLocation
|
stockChannelOverride?: AdminStockLocation
|
||||||
additionalProducts?: { variant_id: string; quantity: number }[]
|
additionalProducts?: { variant_id: string; quantity: number }[]
|
||||||
inventoryItemOverride?: AdminInventoryItem
|
inventoryItemOverride?: AdminInventoryItem
|
||||||
}) {
|
}) {
|
||||||
const publishableKey = await generatePublishableKey(container)
|
const publishableKey = await generatePublishableKey(container)
|
||||||
const storeHeaders = generateStoreHeaders({ publishableKey })
|
|
||||||
|
const storeHeaders =
|
||||||
|
storeHeaderOverride ??
|
||||||
|
generateStoreHeaders({
|
||||||
|
publishableKey,
|
||||||
|
})
|
||||||
|
|
||||||
const region = (
|
const region = (
|
||||||
await api.post(
|
await api.post(
|
||||||
|
|||||||
@@ -0,0 +1,138 @@
|
|||||||
|
import { medusaIntegrationTestRunner } from "@medusajs/test-utils"
|
||||||
|
import { ModuleRegistrationName } from "@medusajs/utils"
|
||||||
|
import {
|
||||||
|
adminHeaders,
|
||||||
|
createAdminUser,
|
||||||
|
generatePublishableKey,
|
||||||
|
generateStoreHeaders,
|
||||||
|
} from "../../../../helpers/create-admin-user"
|
||||||
|
import { setupTaxStructure } from "../../../../modules/__tests__/fixtures"
|
||||||
|
import { createAuthenticatedCustomer } from "../../../../modules/helpers/create-authenticated-customer"
|
||||||
|
import { createOrderSeeder } from "../../fixtures/order"
|
||||||
|
|
||||||
|
jest.setTimeout(300000)
|
||||||
|
|
||||||
|
medusaIntegrationTestRunner({
|
||||||
|
testSuite: ({ dbConnection, getContainer, api }) => {
|
||||||
|
let order,
|
||||||
|
draftOrder,
|
||||||
|
seeder,
|
||||||
|
storeHeaders,
|
||||||
|
customer,
|
||||||
|
storeHeadersWithCustomer
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const container = getContainer()
|
||||||
|
|
||||||
|
await setupTaxStructure(container.resolve(ModuleRegistrationName.TAX))
|
||||||
|
await createAdminUser(dbConnection, adminHeaders, container)
|
||||||
|
const publishableKey = await generatePublishableKey(container)
|
||||||
|
storeHeaders = generateStoreHeaders({ publishableKey })
|
||||||
|
|
||||||
|
const result = await createAuthenticatedCustomer(api, storeHeaders, {
|
||||||
|
first_name: "tony",
|
||||||
|
last_name: "stark",
|
||||||
|
email: "tony@stark-industries.com",
|
||||||
|
})
|
||||||
|
|
||||||
|
customer = result.customer
|
||||||
|
storeHeadersWithCustomer = {
|
||||||
|
headers: {
|
||||||
|
...storeHeaders.headers,
|
||||||
|
authorization: `Bearer ${result.jwt}`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
seeder = await createOrderSeeder({
|
||||||
|
api,
|
||||||
|
container: getContainer(),
|
||||||
|
storeHeaderOverride: storeHeadersWithCustomer,
|
||||||
|
})
|
||||||
|
order = seeder.order
|
||||||
|
order = (await api.get(`/admin/orders/${order.id}`, adminHeaders)).data
|
||||||
|
.order
|
||||||
|
|
||||||
|
const payload = {
|
||||||
|
email: "test@test.test",
|
||||||
|
region_id: seeder.region.id,
|
||||||
|
status: "completed",
|
||||||
|
shipping_methods: [
|
||||||
|
{
|
||||||
|
shipping_option_id: seeder.shippingOption.id,
|
||||||
|
amount: 10,
|
||||||
|
name: "test",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
const draftOrderResposne = await api.post(
|
||||||
|
"/admin/draft-orders?fields=+is_draft_order",
|
||||||
|
payload,
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
await api.post(
|
||||||
|
`/admin/orders/${draftOrderResposne.data.draft_order.id}/complete`,
|
||||||
|
{},
|
||||||
|
adminHeaders
|
||||||
|
)
|
||||||
|
|
||||||
|
draftOrder = draftOrderResposne.data.draft_order
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("GET /store/orders", () => {
|
||||||
|
it("should successfully list non draft orders", async () => {
|
||||||
|
const response = await api.get(
|
||||||
|
`/store/orders`,
|
||||||
|
storeHeadersWithCustomer
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(response.data.orders).toHaveLength(1)
|
||||||
|
expect(response.data.orders).toEqual([
|
||||||
|
expect.objectContaining({
|
||||||
|
id: order.id,
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should throw an error when customer isn't authenticated", async () => {
|
||||||
|
const { response } = await api
|
||||||
|
.get(`/store/orders`, storeHeaders)
|
||||||
|
.catch((e) => e)
|
||||||
|
|
||||||
|
expect(response.status).toEqual(401)
|
||||||
|
expect(response.data.message).toEqual("Unauthorized")
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe("GET /store/orders/:id", () => {
|
||||||
|
it("should successfully fetch non draft order", async () => {
|
||||||
|
const response = await api.get(
|
||||||
|
`/store/orders/${order.id}`,
|
||||||
|
storeHeadersWithCustomer
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(response.data.order).toEqual(
|
||||||
|
expect.objectContaining({
|
||||||
|
id: order.id,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
// TODO: This should have thrown an error, but doesn't seem to.
|
||||||
|
it.skip("should throw an error when fetching draft order", async () => {
|
||||||
|
const response = await api
|
||||||
|
.get(
|
||||||
|
`/store/orders/${draftOrder.id}?fields=+is_draft_order`,
|
||||||
|
storeHeaders
|
||||||
|
)
|
||||||
|
.catch((e) => e)
|
||||||
|
|
||||||
|
expect(response.status).toEqual(404)
|
||||||
|
expect(response.data.message).toEqual(
|
||||||
|
`Order with id: ${draftOrder.id} was not found`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
@@ -20,6 +20,7 @@ export const getOrderDetailWorkflow = createWorkflow(
|
|||||||
getOrderDetailWorkflowId,
|
getOrderDetailWorkflowId,
|
||||||
(
|
(
|
||||||
input: WorkflowData<{
|
input: WorkflowData<{
|
||||||
|
filters?: { is_draft_order?: boolean; customer_id?: string }
|
||||||
fields: string[]
|
fields: string[]
|
||||||
order_id: string
|
order_id: string
|
||||||
version?: number
|
version?: number
|
||||||
@@ -36,13 +37,14 @@ export const getOrderDetailWorkflow = createWorkflow(
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const variables = transform({ input }, ({ input }) => {
|
||||||
|
return { ...input.filters, id: input.order_id, version: input.version }
|
||||||
|
})
|
||||||
|
|
||||||
const order: OrderDTO = useRemoteQueryStep({
|
const order: OrderDTO = useRemoteQueryStep({
|
||||||
entry_point: "orders",
|
entry_point: "orders",
|
||||||
fields,
|
fields,
|
||||||
variables: {
|
variables,
|
||||||
id: input.order_id,
|
|
||||||
version: input.version,
|
|
||||||
},
|
|
||||||
list: false,
|
list: false,
|
||||||
throw_if_key_not_found: true,
|
throw_if_key_not_found: true,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ export const GET = async (
|
|||||||
input: {
|
input: {
|
||||||
fields: req.remoteQueryConfig.fields,
|
fields: req.remoteQueryConfig.fields,
|
||||||
order_id: req.params.id,
|
order_id: req.params.id,
|
||||||
|
filters: {
|
||||||
|
is_draft_order: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
|
import { validateAndTransformQuery } from "@medusajs/framework"
|
||||||
import {
|
import {
|
||||||
MiddlewareRoute,
|
MiddlewareRoute,
|
||||||
validateAndTransformBody,
|
validateAndTransformBody,
|
||||||
} from "@medusajs/framework/http"
|
} from "@medusajs/framework/http"
|
||||||
import { authenticate } from "../../../utils/middlewares/authenticate-middleware"
|
import { authenticate } from "../../../utils/middlewares/authenticate-middleware"
|
||||||
import { validateAndTransformQuery } from "@medusajs/framework"
|
|
||||||
import * as QueryConfig from "./query-config"
|
import * as QueryConfig from "./query-config"
|
||||||
import {
|
import {
|
||||||
|
StoreAcceptOrderTransfer,
|
||||||
StoreGetOrderParams,
|
StoreGetOrderParams,
|
||||||
StoreGetOrdersParams,
|
StoreGetOrdersParams,
|
||||||
StoreAcceptOrderTransfer,
|
|
||||||
StoreRequestOrderTransfer,
|
StoreRequestOrderTransfer,
|
||||||
} from "./validators"
|
} from "./validators"
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ export const GET = async (
|
|||||||
const variables = {
|
const variables = {
|
||||||
filters: {
|
filters: {
|
||||||
...req.filterableFields,
|
...req.filterableFields,
|
||||||
|
is_draft_order: false,
|
||||||
customer_id: req.auth_context.actor_id,
|
customer_id: req.auth_context.actor_id,
|
||||||
},
|
},
|
||||||
...req.remoteQueryConfig.pagination,
|
...req.remoteQueryConfig.pagination,
|
||||||
|
|||||||
Reference in New Issue
Block a user