Files
medusa-store/integration-tests/plugins/factories/simple-cart-factory.ts
Philip Korsholm 5e405be02c feat(medusa): Remove reservations for all line items when an order edit is accepted (#3544)
**What**
- Remove all allocations to line items once an order edit is confirmed

**Why**
- Since all line items of an order are discarded once an order edit is confirmed it will orphan the reservations causing inconsistencies with the stock
2023-03-30 09:56:10 +00:00

73 lines
1.9 KiB
TypeScript

import {
AddressFactoryData,
simpleAddressFactory,
} from "./simple-address-factory"
import { Connection, DataSource } from "typeorm"
import {
LineItemFactoryData,
simpleLineItemFactory,
} from "./simple-line-item-factory"
import { RegionFactoryData, simpleRegionFactory } from "./simple-region-factory"
import {
ShippingMethodFactoryData,
simpleShippingMethodFactory,
} from "./simple-shipping-method-factory"
import { Cart } from "@medusajs/medusa"
import faker from "faker"
export type CartFactoryData = {
id?: string
region?: RegionFactoryData | string
email?: string | null
line_items?: LineItemFactoryData[]
shipping_address?: AddressFactoryData
shipping_methods?: ShippingMethodFactoryData[]
sales_channel_id?: string
}
export const simpleCartFactory = async (
dataSource: DataSource,
data: CartFactoryData = {},
seed: number
): Promise<Cart> => {
if (typeof seed !== "undefined") {
faker.seed(seed)
}
const manager = dataSource.manager
let regionId: string
if (typeof data.region === "string") {
regionId = data.region
} else {
const region = await simpleRegionFactory(dataSource, data.region)
regionId = region.id
}
const address = await simpleAddressFactory(dataSource, data.shipping_address)
const id = data.id || `simple-cart-${Math.random() * 1000}`
const toSave = manager.create(Cart, {
id,
email:
typeof data.email !== "undefined" ? data.email : faker.internet.email(),
region_id: regionId,
shipping_address_id: address.id,
sales_channel_id: data.sales_channel_id || null,
})
const cart = await manager.save(toSave)
const shippingMethods = data.shipping_methods || []
for (const sm of shippingMethods) {
await simpleShippingMethodFactory(dataSource, { ...sm, cart_id: id })
}
const items = data.line_items
for (const item of items || []) {
await simpleLineItemFactory(dataSource, { ...item, cart_id: id })
}
return cart
}