chore(medusa): Typeorm upgrade to 0.3.11 (#3041)

This commit is contained in:
Riqwan Thamir authored and GitHub committed 2023-02-15 16:25:30 +01:00
1 parent 8137061908
commit 121b42acfe
275 files changed
+3497 -3784

No files matched your search

+16
View File
@@ -0,0 +1,16 @@
---
"@medusajs/medusa": minor
"medusa-plugin-sendgrid": patch
"medusa-payment-stripe": patch
"medusa-plugin-algolia": patch
"medusa-source-shopify": patch
"medusa-core-utils": patch
"medusa-file-minio": patch
"medusa-interfaces": patch
"medusa-test-utils": patch
"@medusajs/stock-location": patch
"@medusajs/inventory": patch
"@medusajs/medusa-js": patch
---
chore(medusa): upgrade typeorm from 0.2.51 to 0.3.11
+2 -1
View File
@@ -58,8 +58,9 @@ jobs:
run: npm i -g @medusajs/medusa-cli run: npm i -g @medusajs/medusa-cli
- name: Create Medusa project - name: Create Medusa project
# TODO: Remove the branch when typeorm is no longer a dependency for starter
run: | run: |
medusa new cli-test medusa new cli-test 'https://github.com/medusajs/medusa-starter-default/tree/typeorm-upgrade'
working-directory: .. working-directory: ..
- name: Install postgres config - name: Install postgres config
@@ -470,7 +470,7 @@ describe("/admin/order-edits", () => {
withDeleted: true, withDeleted: true,
}) })
expect(orderEdit).toBeUndefined() expect(orderEdit).toBeNull()
expect(response.status).toEqual(200) expect(response.status).toEqual(200)
expect(response.data).toEqual({ expect(response.data).toEqual({
id, id,
@@ -534,7 +534,7 @@ describe("/admin/order-edits", () => {
withDeleted: true, withDeleted: true,
}) })
expect(orderEdit).toBeUndefined() expect(orderEdit).toBeNull()
expect(response.status).toEqual(200) expect(response.status).toEqual(200)
expect(response.data).toEqual({ expect(response.data).toEqual({
id: orderEditId, id: orderEditId,
@@ -2123,7 +2123,9 @@ describe("/admin/orders", () => {
const manager = dbConnection.manager const manager = dbConnection.manager
const customOptions = await manager.find(CustomShippingOption, { const customOptions = await manager.find(CustomShippingOption, {
where: {
shipping_option_id: "test-option", shipping_option_id: "test-option",
},
}) })
expect(response.status).toEqual(200) expect(response.status).toEqual(200)
@@ -23,7 +23,7 @@ const adminReqConfig = {
}, },
} }
jest.setTimeout(30000) jest.setTimeout(50000)
describe("/admin/price-lists", () => { describe("/admin/price-lists", () => {
let medusaProcess let medusaProcess
@@ -1108,36 +1108,18 @@ describe("/admin/price-lists", () => {
expect(response.status).toEqual(200) expect(response.status).toEqual(200)
expect(response.data.count).toEqual(2) expect(response.data.count).toEqual(2)
expect(response.data.products).toHaveLength(2) expect(response.data.products).toHaveLength(2)
expect(response.data.products).toEqual([ expect(response.data.products).toEqual(
expect.objectContaining({ expect.arrayContaining([
id: "test-prod-2",
variants: expect.arrayContaining([
expect.objectContaining({
id: "test-variant-3",
prices: expect.arrayContaining([
expect.objectContaining({ currency_code: "usd", amount: 100 }),
]),
}),
expect.objectContaining({
id: "test-variant-4",
prices: expect.arrayContaining([
expect.objectContaining({ currency_code: "usd", amount: 100 }),
expect.objectContaining({
currency_code: "usd",
amount: 150,
price_list_id: "test-list",
}),
]),
}),
]),
}),
expect.objectContaining({ expect.objectContaining({
id: "test-prod-1", id: "test-prod-1",
variants: expect.arrayContaining([ variants: expect.arrayContaining([
expect.objectContaining({ expect.objectContaining({
id: "test-variant-1", id: "test-variant-1",
prices: expect.arrayContaining([ prices: expect.arrayContaining([
expect.objectContaining({ currency_code: "usd", amount: 100 }), expect.objectContaining({
currency_code: "usd",
amount: 100,
}),
expect.objectContaining({ expect.objectContaining({
currency_code: "usd", currency_code: "usd",
amount: 150, amount: 150,
@@ -1148,12 +1130,44 @@ describe("/admin/price-lists", () => {
expect.objectContaining({ expect.objectContaining({
id: "test-variant-2", id: "test-variant-2",
prices: expect.arrayContaining([ prices: expect.arrayContaining([
expect.objectContaining({ currency_code: "usd", amount: 100 }), expect.objectContaining({
currency_code: "usd",
amount: 100,
}),
]),
}),
]),
}),
expect.objectContaining({
id: "test-prod-2",
variants: expect.arrayContaining([
expect.objectContaining({
id: "test-variant-3",
prices: expect.arrayContaining([
expect.objectContaining({
currency_code: "usd",
amount: 100,
}),
]),
}),
expect.objectContaining({
id: "test-variant-4",
prices: expect.arrayContaining([
expect.objectContaining({
currency_code: "usd",
amount: 100,
}),
expect.objectContaining({
currency_code: "usd",
amount: 150,
price_list_id: "test-list",
}),
]), ]),
}), }),
]), ]),
}), }),
]) ])
)
}) })
it("lists only product 2", async () => { it("lists only product 2", async () => {
@@ -2142,7 +2142,6 @@ describe("/admin/products", () => {
const variant = response.data.product.variants.find( const variant = response.data.product.variants.find(
(v) => v.id === variantId (v) => v.id === variantId
) )
expect(variant.prices.length).toEqual(data.prices.length) expect(variant.prices.length).toEqual(data.prices.length)
expect(variant.prices).toEqual( expect(variant.prices).toEqual(
@@ -2467,10 +2466,10 @@ describe("/admin/products", () => {
const api = useApi() const api = useApi()
const variantPre = await dbConnection.manager.findOne(ProductVariant, { const variantPre = await dbConnection.manager.findOne(ProductVariant, {
id: "test-variant", where: { id: "test-variant" },
}) })
expect(variantPre).not.toEqual(undefined) expect(variantPre).toBeTruthy()
const response = await api const response = await api
.delete("/admin/products/test-product", adminHeaders) .delete("/admin/products/test-product", adminHeaders)
@@ -2488,10 +2487,10 @@ describe("/admin/products", () => {
) )
const variant = await dbConnection.manager.findOne(ProductVariant, { const variant = await dbConnection.manager.findOne(ProductVariant, {
id: "test-variant", where: { id: "test-variant" },
}) })
expect(variant).toEqual(undefined) expect(variant).not.toBeTruthy()
}) })
it("successfully deletes a product variant and its associated option values", async () => { it("successfully deletes a product variant and its associated option values", async () => {
@@ -2499,10 +2498,10 @@ describe("/admin/products", () => {
// Validate that the option value exists // Validate that the option value exists
const optValPre = await dbConnection.manager.findOne(ProductOptionValue, { const optValPre = await dbConnection.manager.findOne(ProductOptionValue, {
variant_id: "test-variant_2", where: { variant_id: "test-variant_2" },
}) })
expect(optValPre).not.toEqual(undefined) expect(optValPre).toBeTruthy()
// Soft delete the variant // Soft delete the variant
const response = await api.delete( const response = await api.delete(
@@ -2515,20 +2514,18 @@ describe("/admin/products", () => {
// Validate that the option value was deleted // Validate that the option value was deleted
const optValPost = await dbConnection.manager.findOne( const optValPost = await dbConnection.manager.findOne(
ProductOptionValue, ProductOptionValue,
{ { where: { variant_id: "test-variant_2" } }
variant_id: "test-variant_2",
}
) )
expect(optValPost).toEqual(undefined) expect(optValPost).not.toBeTruthy()
// Validate that the option still exists in the DB with deleted_at // Validate that the option still exists in the DB with deleted_at
const optValDeleted = await dbConnection.manager.findOne( const optValDeleted = await dbConnection.manager.findOne(
ProductOptionValue, ProductOptionValue,
{ {
where: {
variant_id: "test-variant_2", variant_id: "test-variant_2",
}, },
{
withDeleted: true, withDeleted: true,
} }
) )
@@ -2546,10 +2543,10 @@ describe("/admin/products", () => {
// Validate that the option value exists // Validate that the option value exists
const optValPre = await dbConnection.manager.findOne(ProductOptionValue, { const optValPre = await dbConnection.manager.findOne(ProductOptionValue, {
variant_id: "test-variant_2", where: { variant_id: "test-variant_2" },
}) })
expect(optValPre).not.toEqual(undefined) expect(optValPre).toBeTruthy()
// Soft delete the product // Soft delete the product
const response = await api.delete( const response = await api.delete(
@@ -2563,19 +2560,19 @@ describe("/admin/products", () => {
const optValPost = await dbConnection.manager.findOne( const optValPost = await dbConnection.manager.findOne(
ProductOptionValue, ProductOptionValue,
{ {
variant_id: "test-variant_2", where: { variant_id: "test-variant_2" },
} }
) )
expect(optValPost).toEqual(undefined) expect(optValPost).not.toBeTruthy()
// Validate that the option still exists in the DB with deleted_at // Validate that the option still exists in the DB with deleted_at
const optValDeleted = await dbConnection.manager.findOne( const optValDeleted = await dbConnection.manager.findOne(
ProductOptionValue, ProductOptionValue,
{ {
where: {
variant_id: "test-variant_2", variant_id: "test-variant_2",
}, },
{
withDeleted: true, withDeleted: true,
} }
) )
@@ -2593,10 +2590,10 @@ describe("/admin/products", () => {
// Validate that the price exists // Validate that the price exists
const pricePre = await dbConnection.manager.findOne(MoneyAmount, { const pricePre = await dbConnection.manager.findOne(MoneyAmount, {
id: "test-price", where: { id: "test-price" },
}) })
expect(pricePre).not.toEqual(undefined) expect(pricePre).toBeTruthy()
// Soft delete the variant // Soft delete the variant
const response = await api.delete( const response = await api.delete(
@@ -2608,21 +2605,18 @@ describe("/admin/products", () => {
// Validate that the price was deleted // Validate that the price was deleted
const pricePost = await dbConnection.manager.findOne(MoneyAmount, { const pricePost = await dbConnection.manager.findOne(MoneyAmount, {
id: "test-price", where: { id: "test-price" },
}) })
expect(pricePost).toEqual(undefined) expect(pricePost).not.toBeTruthy()
// Validate that the price still exists in the DB with deleted_at // Validate that the price still exists in the DB with deleted_at
const optValDeleted = await dbConnection.manager.findOne( const optValDeleted = await dbConnection.manager.findOne(MoneyAmount, {
MoneyAmount, where: {
{
id: "test-price", id: "test-price",
}, },
{
withDeleted: true, withDeleted: true,
} })
)
expect(optValDeleted).toEqual( expect(optValDeleted).toEqual(
expect.objectContaining({ expect.objectContaining({
@@ -2637,10 +2631,10 @@ describe("/admin/products", () => {
// Validate that the price exists // Validate that the price exists
const pricePre = await dbConnection.manager.findOne(MoneyAmount, { const pricePre = await dbConnection.manager.findOne(MoneyAmount, {
id: "test-price", where: { id: "test-price" },
}) })
expect(pricePre).not.toEqual(undefined) expect(pricePre).toBeTruthy()
// Soft delete the product // Soft delete the product
const response = await api.delete( const response = await api.delete(
@@ -2652,21 +2646,18 @@ describe("/admin/products", () => {
// Validate that the price has been deleted // Validate that the price has been deleted
const pricePost = await dbConnection.manager.findOne(MoneyAmount, { const pricePost = await dbConnection.manager.findOne(MoneyAmount, {
id: "test-price", where: { id: "test-price" },
}) })
expect(pricePost).toEqual(undefined) expect(pricePost).not.toBeTruthy()
// Validate that the price still exists in the DB with deleted_at // Validate that the price still exists in the DB with deleted_at
const optValDeleted = await dbConnection.manager.findOne( const optValDeleted = await dbConnection.manager.findOne(MoneyAmount, {
MoneyAmount, where: {
{
id: "test-price", id: "test-price",
}, },
{
withDeleted: true, withDeleted: true,
} })
)
expect(optValDeleted).toEqual( expect(optValDeleted).toEqual(
expect.objectContaining({ expect.objectContaining({
@@ -92,7 +92,7 @@ describe("/admin/shipping-options", () => {
) )
}) })
it("fails as it is not allowed to set id from client side", async () => { it("fails to add a a requirement with an id if it does not exists", async () => {
const api = useApi() const api = useApi()
const payload = { const payload = {
@@ -123,7 +123,9 @@ describe("/admin/shipping-options", () => {
}) })
expect(res.status).toEqual(400) expect(res.status).toEqual(400)
expect(res.data.message).toEqual("ID does not exist") expect(res.data.message).toEqual(
"Shipping option requirement with id not_allowed does not exist"
)
}) })
it("it successfully updates a set of existing requirements", async () => { it("it successfully updates a set of existing requirements", async () => {
@@ -274,7 +276,9 @@ describe("/admin/shipping-options", () => {
const manager = dbConnection.manager const manager = dbConnection.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: {
type: ShippingProfile.default,
},
}) })
payload = { payload = {
@@ -521,7 +525,9 @@ describe("[MEDUSA_FF_TAX_INCLUSIVE_PRICING] /admin/shipping-options", () => {
const defaultProfile = await dbConnection.manager.findOne( const defaultProfile = await dbConnection.manager.findOne(
ShippingProfile, ShippingProfile,
{ {
type: "default", where: {
type: ShippingProfile.default,
},
} }
) )
@@ -75,7 +75,9 @@ describe("/admin/store", () => {
medusaProcess = await setupServer({ cwd }) medusaProcess = await setupServer({ cwd })
const manager = dbConnection.manager const manager = dbConnection.manager
const store = await manager.findOne(Store, { name: "Medusa Store" }) const store = await manager.findOne(Store, {
where: { name: "Medusa Store" },
})
await manager.query( await manager.query(
`INSERT INTO store_currencies (store_id, currency_code) VALUES ('${store.id}', 'dkk')` `INSERT INTO store_currencies (store_id, currency_code) VALUES ('${store.id}', 'dkk')`
) )
@@ -59,6 +59,7 @@ Object {
"title": "Test variant", "title": "Test variant",
"upc": "test-upc", "upc": "test-upc",
"updated_at": Any<String>, "updated_at": Any<String>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -150,6 +151,7 @@ Object {
"title": "Test variant", "title": "Test variant",
"upc": "test-upc", "upc": "test-upc",
"updated_at": Any<String>, "updated_at": Any<String>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -216,6 +218,7 @@ Object {
"title": "test2", "title": "test2",
"upc": null, "upc": null,
"updated_at": Any<String>, "updated_at": Any<String>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -314,6 +317,7 @@ Object {
"title": "Test variant", "title": "Test variant",
"upc": "test-upc", "upc": "test-upc",
"updated_at": Any<String>, "updated_at": Any<String>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -380,6 +384,7 @@ Object {
"title": "Test variant", "title": "Test variant",
"upc": "test-upc", "upc": "test-upc",
"updated_at": Any<String>, "updated_at": Any<String>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -52,7 +52,9 @@ describe("[MEDUSA_FF_TAX_INCLUSIVE_PRICING] Gift Card - Tax calculations", () =>
includes_tax: true, includes_tax: true,
}) })
customer = await simpleCustomerFactory(dbConnection, { password: 'medusatest' }) customer = await simpleCustomerFactory(dbConnection, {
password: "medusatest",
})
customerData = { customerData = {
email: customer.email, email: customer.email,
password: "medusatest", password: "medusatest",
@@ -64,15 +66,19 @@ describe("[MEDUSA_FF_TAX_INCLUSIVE_PRICING] Gift Card - Tax calculations", () =>
is_giftcard: true, is_giftcard: true,
discountable: false, discountable: false,
options: [{ id: "denom", title: "Denomination" }], options: [{ id: "denom", title: "Denomination" }],
variants: [{ variants: [
{
title: "Gift Card", title: "Gift Card",
prices: [{ prices: [
{
amount: 30000, amount: 30000,
currency: "usd", currency: "usd",
region_id: region.id, region_id: region.id,
}], },
],
options: [{ option_id: "denom", value: "Denomination" }], options: [{ option_id: "denom", value: "Denomination" }],
}] },
],
}) })
}) })
@@ -84,10 +90,12 @@ describe("[MEDUSA_FF_TAX_INCLUSIVE_PRICING] Gift Card - Tax calculations", () =>
const createCartRes = await api.post("/store/carts", { const createCartRes = await api.post("/store/carts", {
region_id: region.id, region_id: region.id,
items: [{ items: [
{
variant_id: product.variants[0].id, variant_id: product.variants[0].id,
quantity: 1, quantity: 1,
}], },
],
}) })
expect(createCartRes.status).toEqual(200) expect(createCartRes.status).toEqual(200)
@@ -112,8 +120,8 @@ describe("[MEDUSA_FF_TAX_INCLUSIVE_PRICING] Gift Card - Tax calculations", () =>
id: product.variants[0].id, id: product.variants[0].id,
product: expect.objectContaining({ product: expect.objectContaining({
is_giftcard: true, is_giftcard: true,
}) }),
}) }),
}), }),
]) ])
) )
@@ -142,10 +150,12 @@ describe("[MEDUSA_FF_TAX_INCLUSIVE_PRICING] Gift Card - Tax calculations", () =>
const getCartResponse = await api.get(`/store/carts/${cartFactory.id}`) const getCartResponse = await api.get(`/store/carts/${cartFactory.id}`)
const cart = getCartResponse.data.cart const cart = getCartResponse.data.cart
await api.post(`/store/carts/${cart.id}/payment-sessions`) await api.post(`/store/carts/${cart.id}/payment-sessions`)
const createdOrder = await api.post(`/store/carts/${cart.id}/complete-cart`) const createdOrder = await api.post(
`/store/carts/${cart.id}/complete-cart`
)
const createdGiftCards = await dbConnection.manager.find(GiftCard, { const createdGiftCards = await dbConnection.manager.find(GiftCard, {
where: { order_id: createdOrder.data.data.id } where: { order_id: createdOrder.data.data.id },
}) })
const createdGiftCard = createdGiftCards[0] const createdGiftCard = createdGiftCards[0]
@@ -166,14 +176,18 @@ describe("[MEDUSA_FF_TAX_INCLUSIVE_PRICING] Gift Card - Tax calculations", () =>
tax_rate: region.tax_rate, tax_rate: region.tax_rate,
}) })
const expensiveProduct = await simpleProductFactory(dbConnection, { const expensiveProduct = await simpleProductFactory(dbConnection, {
variants: [{ variants: [
{
title: "Product cost higher than gift card balance", title: "Product cost higher than gift card balance",
prices: [{ prices: [
{
amount: 50000, amount: 50000,
currency: "usd", currency: "usd",
region_id: region.id, region_id: region.id,
}], },
}] ],
},
],
}) })
const customerRes = await api.post("/store/customers", customerData, { const customerRes = await api.post("/store/customers", customerData, {
@@ -203,7 +217,9 @@ describe("[MEDUSA_FF_TAX_INCLUSIVE_PRICING] Gift Card - Tax calculations", () =>
const getCartResponse = await api.get(`/store/carts/${cartFactory.id}`) const getCartResponse = await api.get(`/store/carts/${cartFactory.id}`)
const cart = getCartResponse.data.cart const cart = getCartResponse.data.cart
await api.post(`/store/carts/${cart.id}/payment-sessions`) await api.post(`/store/carts/${cart.id}/payment-sessions`)
const createdOrder = await api.post(`/store/carts/${cart.id}/complete-cart`) const createdOrder = await api.post(
`/store/carts/${cart.id}/complete-cart`
)
expect(createdOrder.data.data).toEqual( expect(createdOrder.data.data).toEqual(
expect.objectContaining({ expect.objectContaining({
@@ -232,12 +248,12 @@ describe("[MEDUSA_FF_TAX_INCLUSIVE_PRICING] Gift Card - Tax calculations", () =>
refundable: 50000, refundable: 50000,
tax_lines: expect.arrayContaining([ tax_lines: expect.arrayContaining([
expect.objectContaining({ expect.objectContaining({
rate: 19 rate: 19,
}) }),
]),
})
]), ]),
}), }),
]),
})
) )
}) })
}) })
@@ -67,7 +67,9 @@ describe("/store/carts", () => {
}) })
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: {
type: ShippingProfile.default,
},
}) })
await manager.insert(Product, { await manager.insert(Product, {
id: "test-product", id: "test-product",
@@ -313,7 +315,7 @@ describe("/store/carts", () => {
MedusaError.Codes.INSUFFICIENT_INVENTORY MedusaError.Codes.INSUFFICIENT_INVENTORY
) )
let payments = await manager.find(Payment, { cart_id: cartId }) let payments = await manager.find(Payment, { where: { cart_id: cartId } })
expect(payments).toHaveLength(1) expect(payments).toHaveLength(1)
expect(payments).toContainEqual( expect(payments).toContainEqual(
expect.objectContaining({ expect.objectContaining({
@@ -338,7 +340,7 @@ describe("/store/carts", () => {
expect(responseSuccess.status).toEqual(200) expect(responseSuccess.status).toEqual(200)
expect(responseSuccess.data.type).toEqual("order") expect(responseSuccess.data.type).toEqual("order")
payments = await manager.find(Payment, { cart_id: cartId }) payments = await manager.find(Payment, { where: { cart_id: cartId } })
expect(payments).toHaveLength(2) expect(payments).toHaveLength(2)
expect(payments).toEqual( expect(payments).toEqual(
expect.arrayContaining([ expect.arrayContaining([
@@ -391,7 +393,9 @@ describe("/store/carts", () => {
expect(responseSuccess.status).toEqual(200) expect(responseSuccess.status).toEqual(200)
expect(responseSuccess.data.type).toEqual("order") expect(responseSuccess.data.type).toEqual("order")
const payments = await manager.find(Payment, { cart_id: cartId }) const payments = await manager.find(Payment, {
where: { cart_id: cartId },
})
expect(payments).toHaveLength(1) expect(payments).toHaveLength(1)
expect(payments).toContainEqual( expect(payments).toContainEqual(
expect.objectContaining({ expect.objectContaining({
@@ -48,7 +48,9 @@ describe("/store/carts", () => {
) )
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: {
type: ShippingProfile.default,
},
}) })
await manager.insert(Region, { await manager.insert(Region, {
@@ -1,5 +1,10 @@
const path = require("path") const path = require("path")
const { Region, ShippingProfile, ShippingOption } = require("@medusajs/medusa") const {
Region,
ShippingProfile,
ShippingOption,
ShippingProfileType,
} = require("@medusajs/medusa")
const setupServer = require("../../../helpers/setup-server") const setupServer = require("../../../helpers/setup-server")
const { useApi } = require("../../../helpers/use-api") const { useApi } = require("../../../helpers/use-api")
@@ -60,7 +65,9 @@ describe("/store/shipping-options", () => {
}) })
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: {
type: ShippingProfileType.DEFAULT,
},
}) })
await manager.insert(ShippingOption, { await manager.insert(ShippingOption, {
@@ -1,5 +1,9 @@
const path = require("path") const path = require("path")
const { ShippingProfile, ShippingOption } = require("@medusajs/medusa") const {
ShippingProfile,
ShippingOption,
ShippingProfileType,
} = require("@medusajs/medusa")
const setupServer = require("../../../helpers/setup-server") const setupServer = require("../../../helpers/setup-server")
const { useApi } = require("../../../helpers/use-api") const { useApi } = require("../../../helpers/use-api")
@@ -38,7 +42,9 @@ describe("/store/carts", () => {
) )
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: {
type: ShippingProfileType.DEFAULT,
},
}) })
await manager.insert(ShippingOption, { await manager.insert(ShippingOption, {
id: "return-option", id: "return-option",
@@ -1,4 +1,4 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import faker from "faker" import faker from "faker"
import { Address } from "@medusajs/medusa" import { Address } from "@medusajs/medusa"
@@ -11,7 +11,7 @@ export type AddressFactoryData = {
} }
export const simpleAddressFactory = async ( export const simpleAddressFactory = async (
connection: Connection, dataSource: DataSource,
data: AddressFactoryData = {}, data: AddressFactoryData = {},
seed?: number seed?: number
): Promise<Address> => { ): Promise<Address> => {
@@ -19,7 +19,7 @@ export const simpleAddressFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const address = manager.create(Address, { const address = manager.create(Address, {
id: `simple-id-${Math.random() * 1000}`, id: `simple-id-${Math.random() * 1000}`,
@@ -1,5 +1,5 @@
import { AnalyticsConfig } from "@medusajs/medusa" import { AnalyticsConfig } from "@medusajs/medusa"
import { Connection } from "typeorm" import { DataSource } from "typeorm"
export type AnalyticsConfigData = { export type AnalyticsConfigData = {
id?: string id?: string
@@ -9,10 +9,10 @@ export type AnalyticsConfigData = {
} }
export const simpleAnalyticsConfigFactory = async ( export const simpleAnalyticsConfigFactory = async (
connection: Connection, dataSource: DataSource,
data: AnalyticsConfigData = {} data: AnalyticsConfigData = {}
): Promise<AnalyticsConfig> => { ): Promise<AnalyticsConfig> => {
const manager = connection.manager const manager = dataSource.manager
const job = manager.create<AnalyticsConfig>(AnalyticsConfig, { const job = manager.create<AnalyticsConfig>(AnalyticsConfig, {
id: data.id ?? "test-analytics-config", id: data.id ?? "test-analytics-config",
@@ -1,4 +1,4 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import { BatchJob, BatchJobStatus } from "@medusajs/medusa" import { BatchJob, BatchJobStatus } from "@medusajs/medusa"
export type BatchJobFactoryData = { export type BatchJobFactoryData = {
@@ -12,10 +12,10 @@ export type BatchJobFactoryData = {
} }
export const simpleBatchJobFactory = async ( export const simpleBatchJobFactory = async (
connection: Connection, dataSource: DataSource,
data: BatchJobFactoryData = {} data: BatchJobFactoryData = {}
): Promise<BatchJob> => { ): Promise<BatchJob> => {
const manager = connection.manager const manager = dataSource.manager
const job = manager.create<BatchJob>(BatchJob, { const job = manager.create<BatchJob>(BatchJob, {
id: data.id, id: data.id,
@@ -1,6 +1,6 @@
import { Cart } from "@medusajs/medusa" import { Cart } from "@medusajs/medusa"
import faker from "faker" import faker from "faker"
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import { import {
AddressFactoryData, AddressFactoryData,
simpleAddressFactory, simpleAddressFactory,
@@ -32,7 +32,7 @@ export type CartFactoryData = {
} }
export const simpleCartFactory = async ( export const simpleCartFactory = async (
connection: Connection, dataSource: DataSource,
data: CartFactoryData = {}, data: CartFactoryData = {},
seed?: number seed?: number
): Promise<Cart> => { ): Promise<Cart> => {
@@ -40,37 +40,37 @@ export const simpleCartFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
let regionId: string let regionId: string
if (typeof data.region === "string") { if (typeof data.region === "string") {
regionId = data.region regionId = data.region
} else { } else {
const region = await simpleRegionFactory(connection, data.region) const region = await simpleRegionFactory(dataSource, data.region)
regionId = region.id regionId = region.id
} }
let customerId: string let customerId!: string
if (typeof data.customer === "string") { if (typeof data.customer === "string") {
customerId = data.customer customerId = data.customer
} else { } else {
if (data?.customer?.email) { if (data?.customer?.email) {
const customer = await simpleCustomerFactory(connection, data.customer) const customer = await simpleCustomerFactory(dataSource, data.customer)
customerId = customer.id customerId = customer.id
} else if (data.email) { } else if (data.email) {
const customer = await simpleCustomerFactory(connection, { const customer = await simpleCustomerFactory(dataSource, {
email: data.email, email: data.email,
}) })
customerId = customer.id customerId = customer.id
} }
} }
const address = await simpleAddressFactory(connection, data.shipping_address) const address = await simpleAddressFactory(dataSource, data.shipping_address)
let sales_channel let sales_channel
if (typeof data.sales_channel !== "undefined") { if (typeof data.sales_channel !== "undefined") {
sales_channel = await simpleSalesChannelFactory( sales_channel = await simpleSalesChannelFactory(
connection, dataSource,
data.sales_channel data.sales_channel
) )
} }
@@ -90,12 +90,12 @@ export const simpleCartFactory = async (
const shippingMethods = data.shipping_methods || [] const shippingMethods = data.shipping_methods || []
for (const sm of shippingMethods) { for (const sm of shippingMethods) {
await simpleShippingMethodFactory(connection, { ...sm, cart_id: id }) await simpleShippingMethodFactory(dataSource, { ...sm, cart_id: id })
} }
const items = data.line_items || [] const items = data.line_items || []
for (const item of items) { for (const item of items) {
await simpleLineItemFactory(connection, { ...item, cart_id: id }) await simpleLineItemFactory(dataSource, { ...item, cart_id: id })
} }
return cart return cart
@@ -1,8 +1,6 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import faker from "faker" import faker from "faker"
import { import { CustomShippingOption } from "@medusajs/medusa"
CustomShippingOption,
} from "@medusajs/medusa"
export type CustomShippingOptionFactoryData = { export type CustomShippingOptionFactoryData = {
id?: string id?: string
@@ -13,7 +11,7 @@ export type CustomShippingOptionFactoryData = {
} }
export const simpleCustomShippingOptionFactory = async ( export const simpleCustomShippingOptionFactory = async (
connection: Connection, dataSource: DataSource,
data: CustomShippingOptionFactoryData, data: CustomShippingOptionFactoryData,
seed?: number seed?: number
): Promise<CustomShippingOption> => { ): Promise<CustomShippingOption> => {
@@ -21,14 +19,14 @@ export const simpleCustomShippingOptionFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const customShippingOptionData = { const customShippingOptionData = {
id: data.id ?? `custon-simple-so-${Math.random() * 1000}`, id: data.id ?? `custon-simple-so-${Math.random() * 1000}`,
price: typeof data.price !== "undefined" ? data.price : 500, price: typeof data.price !== "undefined" ? data.price : 500,
cart_id: data.cart_id, cart_id: data.cart_id,
shipping_option_id: data.shipping_option_id, shipping_option_id: data.shipping_option_id,
metadata: data.metadata ?? {} metadata: data.metadata ?? {},
} }
const created = manager.create(CustomShippingOption, customShippingOptionData) const created = manager.create(CustomShippingOption, customShippingOptionData)
@@ -1,10 +1,7 @@
import faker from "faker" import faker from "faker"
import { Customer } from "@medusajs/medusa" import { DataSource } from "typeorm"
import { Connection } from "typeorm" import { Customer, CustomerGroup } from "@medusajs/medusa"
import { import { CustomerGroupFactoryData, simpleCustomerGroupFactory, } from "./simple-customer-group-factory"
CustomerGroupFactoryData,
simpleCustomerGroupFactory,
} from "./simple-customer-group-factory"
export type CustomerFactoryData = { export type CustomerFactoryData = {
id?: string id?: string
@@ -18,7 +15,7 @@ export type CustomerFactoryData = {
} }
export const simpleCustomerFactory = async ( export const simpleCustomerFactory = async (
connection: Connection, dataSource: DataSource,
data: CustomerFactoryData = {}, data: CustomerFactoryData = {},
seed?: number seed?: number
): Promise<Customer> => { ): Promise<Customer> => {
@@ -26,7 +23,7 @@ export const simpleCustomerFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const customerId = data.id || `simple-customer-${Math.random() * 1000}` const customerId = data.id || `simple-customer-${Math.random() * 1000}`
const c = manager.create(Customer, { const c = manager.create(Customer, {
@@ -49,9 +46,9 @@ export const simpleCustomerFactory = async (
const customer = await manager.save(c) const customer = await manager.save(c)
if (data.groups) { if (data.groups) {
const groups = [] const groups: CustomerGroup[] = []
for (const g of data.groups) { for (const g of data.groups) {
const created = await simpleCustomerGroupFactory(connection, g) const created = await simpleCustomerGroupFactory(dataSource, g)
groups.push(created) groups.push(created)
} }
@@ -1,6 +1,6 @@
import { CustomerGroup } from "@medusajs/medusa" import { CustomerGroup } from "@medusajs/medusa"
import faker from "faker" import faker from "faker"
import { Connection } from "typeorm" import { DataSource } from "typeorm"
export type CustomerGroupFactoryData = { export type CustomerGroupFactoryData = {
id?: string id?: string
@@ -8,7 +8,7 @@ export type CustomerGroupFactoryData = {
} }
export const simpleCustomerGroupFactory = async ( export const simpleCustomerGroupFactory = async (
connection: Connection, dataSource: DataSource,
data: CustomerGroupFactoryData = {}, data: CustomerGroupFactoryData = {},
seed?: number seed?: number
): Promise<CustomerGroup> => { ): Promise<CustomerGroup> => {
@@ -16,7 +16,7 @@ export const simpleCustomerGroupFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const customerGroupId = const customerGroupId =
data.id || `simple-customer-group-${Math.random() * 1000}` data.id || `simple-customer-group-${Math.random() * 1000}`
@@ -10,7 +10,7 @@ import { DiscountConditionProductTag } from "@medusajs/medusa/dist/models/discou
import { DiscountConditionProductType } from "@medusajs/medusa/dist/models/discount-condition-product-type" import { DiscountConditionProductType } from "@medusajs/medusa/dist/models/discount-condition-product-type"
import { DiscountConditionJoinTableForeignKey } from "@medusajs/medusa/dist/repositories/discount-condition" import { DiscountConditionJoinTableForeignKey } from "@medusajs/medusa/dist/repositories/discount-condition"
import faker from "faker" import faker from "faker"
import { Connection } from "typeorm" import { DataSource } from "typeorm"
export type DiscountConditionFactoryData = { export type DiscountConditionFactoryData = {
id?: string id?: string
@@ -66,7 +66,7 @@ const getJoinTableResourceIdentifiers = (type: string) => {
} }
export const simpleDiscountConditionFactory = async ( export const simpleDiscountConditionFactory = async (
connection: Connection, dataSource: DataSource,
data: DiscountConditionFactoryData, data: DiscountConditionFactoryData,
seed?: number seed?: number
): Promise<void> => { ): Promise<void> => {
@@ -74,7 +74,7 @@ export const simpleDiscountConditionFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
let resources = [] let resources = []
@@ -2,13 +2,13 @@ import {
AllocationType, AllocationType,
Discount, Discount,
DiscountRule, DiscountRule,
DiscountRuleType DiscountRuleType,
} from "@medusajs/medusa" } from "@medusajs/medusa"
import faker from "faker" import faker from "faker"
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import { import {
DiscountConditionFactoryData, DiscountConditionFactoryData,
simpleDiscountConditionFactory simpleDiscountConditionFactory,
} from "./simple-discount-condition-factory" } from "./simple-discount-condition-factory"
export type DiscountRuleFactoryData = { export type DiscountRuleFactoryData = {
@@ -29,7 +29,7 @@ export type DiscountFactoryData = {
} }
export const simpleDiscountFactory = async ( export const simpleDiscountFactory = async (
connection: Connection, dataSource: DataSource,
data: DiscountFactoryData = {}, data: DiscountFactoryData = {},
seed?: number seed?: number
): Promise<Discount> => { ): Promise<Discount> => {
@@ -37,7 +37,7 @@ export const simpleDiscountFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const ruleData = data.rule ?? ({} as DiscountRuleFactoryData) const ruleData = data.rule ?? ({} as DiscountRuleFactoryData)
const ruleToSave = manager.create(DiscountRule, { const ruleToSave = manager.create(DiscountRule, {
@@ -51,7 +51,7 @@ export const simpleDiscountFactory = async (
if (data?.rule?.conditions) { if (data?.rule?.conditions) {
for (const condition of data.rule.conditions) { for (const condition of data.rule.conditions) {
await simpleDiscountConditionFactory( await simpleDiscountConditionFactory(
connection, dataSource,
{ ...condition, rule_id: dRule.id }, { ...condition, rule_id: dRule.id },
1 1
) )
@@ -1,6 +1,6 @@
import { GiftCard } from "@medusajs/medusa" import { GiftCard } from "@medusajs/medusa"
import faker from "faker" import faker from "faker"
import { Connection } from "typeorm" import { DataSource } from "typeorm"
export type GiftCardFactoryData = { export type GiftCardFactoryData = {
id?: string id?: string
@@ -12,7 +12,7 @@ export type GiftCardFactoryData = {
} }
export const simpleGiftCardFactory = async ( export const simpleGiftCardFactory = async (
connection: Connection, dataSource: DataSource,
data: GiftCardFactoryData, data: GiftCardFactoryData,
seed?: number seed?: number
): Promise<GiftCard> => { ): Promise<GiftCard> => {
@@ -20,7 +20,7 @@ export const simpleGiftCardFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const toSave = manager.create(GiftCard, { const toSave = manager.create(GiftCard, {
id: data.id, id: data.id,
@@ -1,4 +1,4 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import faker from "faker" import faker from "faker"
import { LineItem, LineItemAdjustment, LineItemTaxLine } from "@medusajs/medusa" import { LineItem, LineItemAdjustment, LineItemTaxLine } from "@medusajs/medusa"
@@ -36,7 +36,7 @@ export type LineItemFactoryData = {
} }
export const simpleLineItemFactory = async ( export const simpleLineItemFactory = async (
connection: Connection, dataSource: DataSource,
data: LineItemFactoryData, data: LineItemFactoryData,
seed?: number seed?: number
): Promise<LineItem> => { ): Promise<LineItem> => {
@@ -52,7 +52,7 @@ export const simpleLineItemFactory = async (
Math Math
} }
const manager = connection.manager const manager = dataSource.manager
const id = data.id || `simple-line-${Math.random() * 1000}` const id = data.id || `simple-line-${Math.random() * 1000}`
const toSave = manager.create(LineItem, { const toSave = manager.create(LineItem, {
@@ -1,4 +1,4 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import { OrderFactoryData, simpleOrderFactory } from "./simple-order-factory" import { OrderFactoryData, simpleOrderFactory } from "./simple-order-factory"
import { OrderEdit } from "@medusajs/medusa" import { OrderEdit } from "@medusajs/medusa"
@@ -22,13 +22,13 @@ export type OrderEditFactoryData = {
} }
export const simpleOrderEditFactory = async ( export const simpleOrderEditFactory = async (
connection: Connection, dataSource: DataSource,
data: OrderEditFactoryData = {} data: OrderEditFactoryData = {}
): Promise<OrderEdit> => { ): Promise<OrderEdit> => {
const manager = connection.manager const manager = dataSource.manager
if (!data.order_id) { if (!data.order_id) {
const order = await simpleOrderFactory(connection, data.order) const order = await simpleOrderFactory(dataSource, data.order)
data.order_id = order.id data.order_id = order.id
} }
@@ -1,4 +1,4 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import faker from "faker" import faker from "faker"
import { import {
Discount, Discount,
@@ -51,7 +51,7 @@ export type OrderFactoryData = {
} }
export const simpleOrderFactory = async ( export const simpleOrderFactory = async (
connection: Connection, dataSource: DataSource,
data: OrderFactoryData = {} as OrderFactoryData, data: OrderFactoryData = {} as OrderFactoryData,
seed?: number seed?: number
): Promise<Order> => { ): Promise<Order> => {
@@ -59,7 +59,7 @@ export const simpleOrderFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
let currencyCode: string let currencyCode: string
let regionId: string let regionId: string
@@ -70,16 +70,16 @@ export const simpleOrderFactory = async (
regionId = data.region regionId = data.region
taxRate = data.tax_rate as number taxRate = data.tax_rate as number
} else { } else {
const region = await simpleRegionFactory(connection, data.region) const region = await simpleRegionFactory(dataSource, data.region)
taxRate = taxRate =
(typeof data.tax_rate !== "undefined" ? data.tax_rate : region.tax_rate) as number (typeof data.tax_rate !== "undefined" ? data.tax_rate : region.tax_rate) as number
currencyCode = region.currency_code currencyCode = region.currency_code
regionId = region.id regionId = region.id
} }
const address = await simpleAddressFactory(connection, data.shipping_address) const address = await simpleAddressFactory(dataSource, data.shipping_address)
const customer = await simpleCustomerFactory(connection, { const customer = await simpleCustomerFactory(dataSource, {
...data.customer, ...data.customer,
email: data.email ?? undefined, email: data.email ?? undefined,
}) })
@@ -87,14 +87,14 @@ export const simpleOrderFactory = async (
let discounts: Discount[] = [] let discounts: Discount[] = []
if (typeof data.discounts !== "undefined") { if (typeof data.discounts !== "undefined") {
discounts = await Promise.all( discounts = await Promise.all(
data.discounts.map((d) => simpleDiscountFactory(connection, d, seed)) data.discounts.map((d) => simpleDiscountFactory(dataSource, d, seed))
) )
} }
let sales_channel let sales_channel
if (typeof data.sales_channel !== "undefined") { if (typeof data.sales_channel !== "undefined") {
sales_channel = await simpleSalesChannelFactory( sales_channel = await simpleSalesChannelFactory(
connection, dataSource,
data.sales_channel data.sales_channel
) )
} }
@@ -120,7 +120,7 @@ export const simpleOrderFactory = async (
const shippingMethods = data.shipping_methods || [] const shippingMethods = data.shipping_methods || []
for (const sm of shippingMethods) { for (const sm of shippingMethods) {
await simpleShippingMethodFactory(connection, { ...sm, order_id: order.id }) await simpleShippingMethodFactory(dataSource, { ...sm, order_id: order.id })
} }
const items = const items =
@@ -136,7 +136,7 @@ export const simpleOrderFactory = async (
}) || [] }) || []
for (const item of items) { for (const item of items) {
await simpleLineItemFactory(connection, { ...item, order_id: id } as unknown as LineItemFactoryData) await simpleLineItemFactory(dataSource, { ...item, order_id: id } as unknown as LineItemFactoryData)
} }
return order return order
@@ -1,9 +1,5 @@
import { import { OrderEditItemChangeType, OrderItemChange } from "@medusajs/medusa"
OrderEdit, import { DataSource } from "typeorm"
OrderEditItemChangeType,
OrderItemChange,
} from "@medusajs/medusa"
import { Connection } from "typeorm"
type OrderItemChangeData = { type OrderItemChangeData = {
id: string id: string
@@ -14,10 +10,10 @@ type OrderItemChangeData = {
} }
export const simpleOrderItemChangeFactory = async ( export const simpleOrderItemChangeFactory = async (
connection: Connection, dataSource: DataSource,
data: OrderItemChangeData data: OrderItemChangeData
) => { ) => {
const manager = connection.manager const manager = dataSource.manager
const change = manager.create<OrderItemChange>(OrderItemChange, { const change = manager.create<OrderItemChange>(OrderItemChange, {
id: data.id, id: data.id,
type: data.type, type: data.type,
@@ -1,14 +1,14 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import { simpleRegionFactory } from "./simple-region-factory" import { simpleRegionFactory } from "./simple-region-factory"
import { simplePaymentFactory } from "./simple-payment-factory" import { simplePaymentFactory } from "./simple-payment-factory"
import { Payment, PaymentCollection } from "@medusajs/medusa" import { Payment, PaymentCollection } from "@medusajs/medusa"
export const simplePaymentCollectionFactory = async ( export const simplePaymentCollectionFactory = async (
connection: Connection, dataSource: DataSource,
data: Partial<PaymentCollection> = {} data: Partial<PaymentCollection> = {}
): Promise<PaymentCollection> => { ): Promise<PaymentCollection> => {
const manager = connection.manager const manager = dataSource.manager
const defaultData = { const defaultData = {
currency_code: data.currency_code ?? "usd", currency_code: data.currency_code ?? "usd",
@@ -19,7 +19,7 @@ export const simplePaymentCollectionFactory = async (
} }
if (!data.region && !data.region_id) { if (!data.region && !data.region_id) {
data.region = await simpleRegionFactory(connection, { data.region = await simpleRegionFactory(dataSource, {
id: data.region_id || "test-region", id: data.region_id || "test-region",
currency_code: defaultData.currency_code, currency_code: defaultData.currency_code,
}) })
@@ -32,7 +32,7 @@ export const simplePaymentCollectionFactory = async (
payment.currency_code = payment.currency_code ?? defaultData.currency_code payment.currency_code = payment.currency_code ?? defaultData.currency_code
const savedPayment = await simplePaymentFactory( const savedPayment = await simplePaymentFactory(
connection, dataSource,
payment as any payment as any
) )
payments.push(savedPayment) payments.push(savedPayment)
@@ -1,4 +1,4 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import { Payment } from "@medusajs/medusa" import { Payment } from "@medusajs/medusa"
export type PaymentFactoryData = { export type PaymentFactoryData = {
@@ -12,11 +12,11 @@ export type PaymentFactoryData = {
} }
export const simplePaymentFactory = async ( export const simplePaymentFactory = async (
connection: Connection, dataSource: DataSource,
data: PaymentFactoryData, data: PaymentFactoryData,
_?: number _?: number
): Promise<Payment> => { ): Promise<Payment> => {
const manager = connection.manager const manager = dataSource.manager
let captured_at = data.captured let captured_at = data.captured
if (typeof captured_at === "boolean") { if (typeof captured_at === "boolean") {
@@ -6,7 +6,7 @@ import {
PriceListType, PriceListType,
} from "@medusajs/medusa" } from "@medusajs/medusa"
import faker from "faker" import faker from "faker"
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import { simpleCustomerGroupFactory } from "./simple-customer-group-factory" import { simpleCustomerGroupFactory } from "./simple-customer-group-factory"
type ProductListPrice = { type ProductListPrice = {
@@ -30,7 +30,7 @@ export type PriceListFactoryData = {
} }
export const simplePriceListFactory = async ( export const simplePriceListFactory = async (
connection: Connection, dataSource: DataSource,
data: PriceListFactoryData = {}, data: PriceListFactoryData = {},
seed?: number seed?: number
): Promise<PriceList> => { ): Promise<PriceList> => {
@@ -38,7 +38,7 @@ export const simplePriceListFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const listId = data.id || `simple-price-list-${Math.random() * 1000}` const listId = data.id || `simple-price-list-${Math.random() * 1000}`
@@ -46,7 +46,7 @@ export const simplePriceListFactory = async (
if (typeof data.customer_groups !== "undefined") { if (typeof data.customer_groups !== "undefined") {
customerGroups = await Promise.all( customerGroups = await Promise.all(
data.customer_groups.map((group) => data.customer_groups.map((group) =>
simpleCustomerGroupFactory(connection, { id: group }) simpleCustomerGroupFactory(dataSource, { id: group })
) )
) )
} }
@@ -1,12 +1,12 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import { ProductCategory } from "@medusajs/medusa" import { ProductCategory } from "@medusajs/medusa"
export const simpleProductCategoryFactory = async ( export const simpleProductCategoryFactory = async (
connection: Connection, dataSource: DataSource,
data: Partial<ProductCategory> = {} data: Partial<ProductCategory> = {}
): Promise<ProductCategory> => { ): Promise<ProductCategory> => {
const manager = connection.manager const manager = dataSource.manager
const category = manager.create(ProductCategory, data) const productCategory = manager.create(ProductCategory, data)
return await manager.save(category) return await manager.save(productCategory)
} }
@@ -1,4 +1,4 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import faker from "faker" import faker from "faker"
import { ProductCollection } from "@medusajs/medusa" import { ProductCollection } from "@medusajs/medusa"
@@ -11,7 +11,7 @@ export const simpleProductCollectionFactory = async <
TData extends Data | Data[] = Data | Data[], TData extends Data | Data[] = Data | Data[],
TResult = TData extends Array<Data> ? ProductCollection[] : ProductCollection TResult = TData extends Array<Data> ? ProductCollection[] : ProductCollection
>( >(
connection: Connection, dataSource: DataSource,
data?: TData, data?: TData,
seed?: number seed?: number
): Promise<TResult> => { ): Promise<TResult> => {
@@ -19,7 +19,7 @@ export const simpleProductCollectionFactory = async <
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
data = data || [{ data = data || [{
title: faker.datatype.string(10), title: faker.datatype.string(10),
@@ -8,7 +8,7 @@ import {
Store, Store,
} from "@medusajs/medusa" } from "@medusajs/medusa"
import faker from "faker" import faker from "faker"
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import { import {
ProductVariantFactoryData, ProductVariantFactoryData,
simpleProductVariantFactory, simpleProductVariantFactory,
@@ -32,22 +32,26 @@ export type ProductFactoryData = {
} }
export const simpleProductFactory = async ( export const simpleProductFactory = async (
connection: Connection, dataSource: DataSource,
data: ProductFactoryData = {}, data: ProductFactoryData = {},
seed?: number seed?: number
): Promise<Product | undefined> => { ): Promise<Product | undefined | null> => {
if (typeof seed !== "undefined") { if (typeof seed !== "undefined") {
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
where: {
type: ShippingProfileType.DEFAULT, type: ShippingProfileType.DEFAULT,
}
}) })
const gcProfile = await manager.findOne(ShippingProfile, { const gcProfile = await manager.findOne(ShippingProfile, {
where: {
type: ShippingProfileType.GIFT_CARD, type: ShippingProfileType.GIFT_CARD,
}
}) })
let sales_channels let sales_channels
@@ -55,18 +59,20 @@ export const simpleProductFactory = async (
sales_channels = await Promise.all( sales_channels = await Promise.all(
data.sales_channels.map( data.sales_channels.map(
async (salesChannel) => async (salesChannel) =>
await simpleSalesChannelFactory(connection, salesChannel) await simpleSalesChannelFactory(dataSource, salesChannel)
) )
) )
} else { } else {
const store = await manager.findOne(Store, { const stores = await manager.find(Store, {
relations: ["default_sales_channel"], relations: { default_sales_channel: true },
}) })
const store = stores[0]
if (store?.default_sales_channel) { if (store?.default_sales_channel) {
sales_channels = [store.default_sales_channel] sales_channels = [store.default_sales_channel]
} else { } else {
const salesChannel = await simpleSalesChannelFactory(connection, { const salesChannel = await simpleSalesChannelFactory(dataSource, {
id: `default-${Math.random() * 1000}`, id: `default-${Math.random() * 1000}`,
is_default: true, is_default: true,
}) })
@@ -144,12 +150,16 @@ export const simpleProductFactory = async (
{ option_id: optionId, value: faker.commerce.productAdjective() }, { option_id: optionId, value: faker.commerce.productAdjective() },
] ]
} }
await simpleProductVariantFactory(connection, factoryData) await simpleProductVariantFactory(dataSource, factoryData)
} }
return await manager.findOne( return await manager.findOne(
Product, Product,
{ id: prodId }, {
{ relations: ["tags", "variants", "variants.prices"] } where: {
id: prodId
},
relations: { tags: true, variants: { prices: true }}
}
) )
} }
@@ -1,4 +1,4 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import faker from "faker" import faker from "faker"
import { ProductTaxRate, TaxRate } from "@medusajs/medusa" import { ProductTaxRate, TaxRate } from "@medusajs/medusa"
@@ -15,7 +15,7 @@ export type ProductTaxRateFactoryData = {
} }
export const simpleProductTaxRateFactory = async ( export const simpleProductTaxRateFactory = async (
connection: Connection, dataSource: DataSource,
data: ProductTaxRateFactoryData, data: ProductTaxRateFactoryData,
seed?: number seed?: number
): Promise<ProductTaxRate> => { ): Promise<ProductTaxRate> => {
@@ -23,7 +23,7 @@ export const simpleProductTaxRateFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
let rateId: string let rateId: string
if (typeof data.rate === "string") { if (typeof data.rate === "string") {
@@ -1,4 +1,4 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import faker from "faker" import faker from "faker"
import { ProductTypeTaxRate, TaxRate } from "@medusajs/medusa" import { ProductTypeTaxRate, TaxRate } from "@medusajs/medusa"
@@ -15,7 +15,7 @@ export type ProductTypeTaxRateFactoryData = {
} }
export const simpleProductTypeTaxRateFactory = async ( export const simpleProductTypeTaxRateFactory = async (
connection: Connection, dataSource: DataSource,
data: ProductTypeTaxRateFactoryData, data: ProductTypeTaxRateFactoryData,
seed?: number seed?: number
): Promise<ProductTypeTaxRate> => { ): Promise<ProductTypeTaxRate> => {
@@ -23,7 +23,7 @@ export const simpleProductTypeTaxRateFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
let rateId: string let rateId: string
if (typeof data.rate === "string") { if (typeof data.rate === "string") {
@@ -1,9 +1,9 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import faker from "faker" import faker from "faker"
import { import {
MoneyAmount,
ProductOptionValue, ProductOptionValue,
ProductVariant, ProductVariant,
MoneyAmount,
} from "@medusajs/medusa" } from "@medusajs/medusa"
export type ProductVariantFactoryData = { export type ProductVariantFactoryData = {
@@ -18,7 +18,7 @@ export type ProductVariantFactoryData = {
} }
export const simpleProductVariantFactory = async ( export const simpleProductVariantFactory = async (
connection: Connection, dataSource: DataSource,
data: ProductVariantFactoryData, data: ProductVariantFactoryData,
seed?: number seed?: number
): Promise<ProductVariant> => { ): Promise<ProductVariant> => {
@@ -26,7 +26,7 @@ export const simpleProductVariantFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const id = data.id || `simple-variant-${Math.random() * 1000}` const id = data.id || `simple-variant-${Math.random() * 1000}`
const toSave = manager.create(ProductVariant, { const toSave = manager.create(ProductVariant, {
@@ -1,5 +1,5 @@
import faker from "faker" import faker from "faker"
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import { PublishableApiKey } from "@medusajs/medusa" import { PublishableApiKey } from "@medusajs/medusa"
@@ -12,10 +12,10 @@ export type PublishableApiKeyData = {
} }
export const simplePublishableApiKeyFactory = async ( export const simplePublishableApiKeyFactory = async (
connection: Connection, dataSource: DataSource,
data: PublishableApiKeyData = {} data: PublishableApiKeyData = {}
): Promise<PublishableApiKey> => { ): Promise<PublishableApiKey> => {
const manager = connection.manager const manager = dataSource.manager
const pubKey = manager.create(PublishableApiKey, { const pubKey = manager.create(PublishableApiKey, {
...data, ...data,
@@ -1,4 +1,4 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import faker from "faker" import faker from "faker"
import { Region } from "@medusajs/medusa" import { Region } from "@medusajs/medusa"
@@ -15,7 +15,7 @@ export type RegionFactoryData = {
} }
export const simpleRegionFactory = async ( export const simpleRegionFactory = async (
connection: Connection, dataSource: DataSource,
data: RegionFactoryData = {}, data: RegionFactoryData = {},
seed?: number seed?: number
): Promise<Region> => { ): Promise<Region> => {
@@ -23,7 +23,7 @@ export const simpleRegionFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const regionId = data.id || `simple-region-${Math.random() * 1000}` const regionId = data.id || `simple-region-${Math.random() * 1000}`
const r = manager.create(Region, { const r = manager.create(Region, {
@@ -1,18 +1,18 @@
import { Product, SalesChannel } from "@medusajs/medusa" import { Product, SalesChannel } from "@medusajs/medusa"
import faker from "faker" import faker from "faker"
import { Connection } from "typeorm" import { DataSource } from "typeorm"
export type SalesChannelFactoryData = { export type SalesChannelFactoryData = {
name?: string name?: string
description?: string description?: string
is_disabled?: boolean is_disabled?: boolean
id?: string id?: string
products?: Product[], products?: Product[]
is_default?: boolean is_default?: boolean
} }
export const simpleSalesChannelFactory = async ( export const simpleSalesChannelFactory = async (
connection: Connection, dataSource: DataSource,
data: SalesChannelFactoryData = {}, data: SalesChannelFactoryData = {},
seed?: number seed?: number
): Promise<SalesChannel> => { ): Promise<SalesChannel> => {
@@ -20,7 +20,7 @@ export const simpleSalesChannelFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
let salesChannel = manager.create(SalesChannel, { let salesChannel = manager.create(SalesChannel, {
id: data.id ?? `simple-id-${Math.random() * 1000}`, id: data.id ?? `simple-id-${Math.random() * 1000}`,
@@ -1,6 +1,6 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import faker from "faker" import faker from "faker"
import { ShippingMethodTaxLine, ShippingMethod } from "@medusajs/medusa" import { ShippingMethod, ShippingMethodTaxLine } from "@medusajs/medusa"
import { import {
ShippingOptionFactoryData, ShippingOptionFactoryData,
@@ -19,7 +19,7 @@ export type ShippingMethodFactoryData = {
} }
export const simpleShippingMethodFactory = async ( export const simpleShippingMethodFactory = async (
connection: Connection, dataSource: DataSource,
data: ShippingMethodFactoryData, data: ShippingMethodFactoryData,
seed?: number seed?: number
): Promise<ShippingMethod> => { ): Promise<ShippingMethod> => {
@@ -27,14 +27,14 @@ export const simpleShippingMethodFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
let shippingOptionId: string let shippingOptionId: string
if (typeof data.shipping_option === "string") { if (typeof data.shipping_option === "string") {
shippingOptionId = data.shipping_option shippingOptionId = data.shipping_option
} else { } else {
const option = await simpleShippingOptionFactory( const option = await simpleShippingOptionFactory(
connection, dataSource,
data.shipping_option data.shipping_option
) )
shippingOptionId = option.id shippingOptionId = option.id
@@ -6,7 +6,7 @@ import {
ShippingProfileType, ShippingProfileType,
} from "@medusajs/medusa" } from "@medusajs/medusa"
import faker from "faker" import faker from "faker"
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import { simpleRegionFactory } from "./simple-region-factory" import { simpleRegionFactory } from "./simple-region-factory"
export type ShippingOptionFactoryData = { export type ShippingOptionFactoryData = {
@@ -28,7 +28,7 @@ type ShippingOptionRequirementData = {
} }
export const simpleShippingOptionFactory = async ( export const simpleShippingOptionFactory = async (
connection: Connection, dataSource: DataSource,
data: ShippingOptionFactoryData = {}, data: ShippingOptionFactoryData = {},
seed?: number seed?: number
): Promise<ShippingOption> => { ): Promise<ShippingOption> => {
@@ -36,19 +36,23 @@ export const simpleShippingOptionFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
where: {
type: ShippingProfileType.DEFAULT, type: ShippingProfileType.DEFAULT,
}
}) })
const gcProfile = await manager.findOne(ShippingProfile, { const gcProfile = await manager.findOne(ShippingProfile, {
where: {
type: ShippingProfileType.GIFT_CARD, type: ShippingProfileType.GIFT_CARD,
}
}) })
let region_id = data.region_id let region_id = data.region_id
if (!region_id) { if (!region_id) {
const { id } = await simpleRegionFactory(connection) const { id } = await simpleRegionFactory(dataSource)
region_id = id region_id = id
} }
@@ -1,4 +1,4 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import faker from "faker" import faker from "faker"
import { ShippingTaxRate, TaxRate } from "@medusajs/medusa" import { ShippingTaxRate, TaxRate } from "@medusajs/medusa"
@@ -15,7 +15,7 @@ export type ShippingTaxRateFactoryData = {
} }
export const simpleShippingTaxRateFactory = async ( export const simpleShippingTaxRateFactory = async (
connection: Connection, dataSource: DataSource,
data: ShippingTaxRateFactoryData, data: ShippingTaxRateFactoryData,
seed?: number seed?: number
): Promise<ShippingTaxRate> => { ): Promise<ShippingTaxRate> => {
@@ -23,7 +23,7 @@ export const simpleShippingTaxRateFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
let rateId: string let rateId: string
if (typeof data.rate === "string") { if (typeof data.rate === "string") {
@@ -1,4 +1,4 @@
import { Connection } from "typeorm" import { DataSource } from "typeorm"
import faker from "faker" import faker from "faker"
import { TaxRate } from "@medusajs/medusa" import { TaxRate } from "@medusajs/medusa"
@@ -10,7 +10,7 @@ export type TaxRateFactoryData = {
} }
export const simpleTaxRateFactory = async ( export const simpleTaxRateFactory = async (
connection: Connection, dataSource: DataSource,
data: TaxRateFactoryData, data: TaxRateFactoryData,
seed?: number seed?: number
): Promise<TaxRate> => { ): Promise<TaxRate> => {
@@ -18,7 +18,7 @@ export const simpleTaxRateFactory = async (
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const toSave = manager.create(TaxRate, { const toSave = manager.create(TaxRate, {
region_id: data.region_id, region_id: data.region_id,
@@ -1,8 +1,8 @@
const Scrypt = require("scrypt-kdf") const Scrypt = require("scrypt-kdf")
const { User } = require("@medusajs/medusa") const { User } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
const buf = await Scrypt.kdf("secret_password", { logN: 1, r: 1, p: 1 }) const buf = await Scrypt.kdf("secret_password", { logN: 1, r: 1, p: 1 })
const password_hash = buf.toString("base64") const password_hash = buf.toString("base64")
@@ -11,8 +11,8 @@ const {
ProductOption, ProductOption,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
const yesterday = ((today) => new Date(today.setDate(today.getDate() - 1)))( const yesterday = ((today) => new Date(today.setDate(today.getDate() - 1)))(
new Date() new Date()
@@ -23,7 +23,7 @@ module.exports = async (connection, data = {}) => {
) )
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: { type: ShippingProfile.default },
}) })
const collection = manager.create(ProductCollection, { const collection = manager.create(ProductCollection, {
@@ -1,7 +1,7 @@
const { Region } = require("@medusajs/medusa") const { Region } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
await manager.insert(Region, { await manager.insert(Region, {
id: "region-product-import-0", id: "region-product-import-0",
+5 -4
View File
@@ -16,9 +16,10 @@ const {
PaymentSession, PaymentSession,
CustomerGroup, CustomerGroup,
PriceList, PriceList,
ShippingProfileType,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const yesterday = ((today) => new Date(today.setDate(today.getDate() - 1)))( const yesterday = ((today) => new Date(today.setDate(today.getDate() - 1)))(
new Date() new Date()
) )
@@ -31,14 +32,14 @@ module.exports = async (connection, data = {}) => {
const tenDaysFromToday = ((today) => const tenDaysFromToday = ((today) =>
new Date(today.setDate(today.getDate() + 10)))(new Date()) new Date(today.setDate(today.getDate() + 10)))(new Date())
const manager = connection.manager const manager = dataSource.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: { type: ShippingProfileType.DEFAULT },
}) })
const gcProfile = await manager.findOne(ShippingProfile, { const gcProfile = await manager.findOne(ShippingProfile, {
type: "gift_card", where: { type: ShippingProfileType.GIFT_CARD },
}) })
await manager.insert(Address, { await manager.insert(Address, {
@@ -6,8 +6,8 @@ const {
Return, Return,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
let orderWithClaim = manager.create(Order, { let orderWithClaim = manager.create(Order, {
id: "order-with-claim", id: "order-with-claim",
@@ -1,7 +1,7 @@
const { Customer, Address, CustomerGroup } = require("@medusajs/medusa") const { Customer, Address, CustomerGroup } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
const testAddr = await manager.create(Address, { const testAddr = await manager.create(Address, {
id: "test-address", id: "test-address",
@@ -4,8 +4,8 @@ const {
Discount, Discount,
DiscountRule, DiscountRule,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
await manager.insert(Region, { await manager.insert(Region, {
id: "test-region", id: "test-region",
@@ -14,17 +14,18 @@ const {
Discount, Discount,
DiscountRule, DiscountRule,
Payment, Payment,
ShippingProfileType,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
const { simpleSalesChannelFactory } = require("../factories") const { simpleSalesChannelFactory } = require("../factories")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: { type: ShippingProfileType.DEFAULT },
}) })
const salesChannel = await simpleSalesChannelFactory(connection, { const salesChannel = await simpleSalesChannelFactory(dataSource, {
id: "sales-channel", id: "sales-channel",
is_default: true, is_default: true,
}) })
@@ -13,17 +13,18 @@ const {
ShippingOption, ShippingOption,
ShippingProfile, ShippingProfile,
Swap, Swap,
ShippingProfileType,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
const { simpleSalesChannelFactory } = require("../factories") const { simpleSalesChannelFactory } = require("../factories")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: { type: ShippingProfileType.DEFAULT },
}) })
const salesChannel = await simpleSalesChannelFactory(connection, { const salesChannel = await simpleSalesChannelFactory(dataSource, {
id: "test-channel", id: "test-channel",
is_default: true, is_default: true,
}) })
@@ -1,7 +1,7 @@
const { Region, PriceList, MoneyAmount } = require("@medusajs/medusa") const { Region, PriceList, MoneyAmount } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
const priceListNoCustomerGroups = await manager.create(PriceList, { const priceListNoCustomerGroups = await manager.create(PriceList, {
id: "pl_no_customer_groups", id: "pl_no_customer_groups",
@@ -9,9 +9,10 @@ const {
Region, Region,
Cart, Cart,
PriceList, PriceList,
ShippingProfileType,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const yesterday = ((today) => new Date(today.setDate(today.getDate() - 1)))( const yesterday = ((today) => new Date(today.setDate(today.getDate() - 1)))(
new Date() new Date()
) )
@@ -24,10 +25,10 @@ module.exports = async (connection, data = {}) => {
const tenDaysFromToday = ((today) => const tenDaysFromToday = ((today) =>
new Date(today.setDate(today.getDate() + 10)))(new Date()) new Date(today.setDate(today.getDate() + 10)))(new Date())
const manager = connection.manager const manager = dataSource.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: { type: ShippingProfileType.DEFAULT },
}) })
await manager.insert(Region, { await manager.insert(Region, {
@@ -8,14 +8,16 @@ const {
ShippingProfile, ShippingProfile,
ProductVariant, ProductVariant,
Image, Image,
Store, ShippingProfileType,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: {
type: ShippingProfileType.DEFAULT,
},
}) })
const coll = await manager.create(ProductCollection, { const coll = await manager.create(ProductCollection, {
@@ -3,10 +3,11 @@ const {
ShippingProfile, ShippingProfile,
ShippingOption, ShippingOption,
ShippingOptionRequirement, ShippingOptionRequirement,
ShippingProfileType,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
await manager.insert(Region, { await manager.insert(Region, {
id: "region", id: "region",
@@ -16,7 +17,7 @@ module.exports = async (connection, data = {}) => {
}) })
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: { type: ShippingProfileType.DEFAULT },
}) })
await manager.insert(ShippingOption, { await manager.insert(ShippingOption, {
@@ -10,10 +10,11 @@ const {
Image, Image,
Cart, Cart,
PriceList, PriceList,
ShippingProfileType,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
const yesterday = ((today) => new Date(today.setDate(today.getDate() - 1)))( const yesterday = ((today) => new Date(today.setDate(today.getDate() - 1)))(
new Date() new Date()
@@ -48,7 +49,7 @@ module.exports = async (connection, data = {}) => {
await manager.save(priceList1) await manager.save(priceList1)
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: { type: ShippingProfileType.DEFAULT },
}) })
const coll = manager.create(ProductCollection, { const coll = manager.create(ProductCollection, {
+3 -3
View File
@@ -16,12 +16,12 @@ const { Region } = require("@medusajs/medusa/dist/models/region")
let regionId let regionId
let region let region
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
regionId = "test-region" regionId = "test-region"
region = await manager.findOne(Region, { id: regionId }) region = await manager.findOne(Region, { where: { id: regionId } })
let orderWithSwap = manager.create(Order, { let orderWithSwap = manager.create(Order, {
id: "order-with-swap", id: "order-with-swap",
+2 -2
View File
@@ -11,8 +11,8 @@ const expires_at = new Date()
expires_at.setDate(expires_at.getDate() + 8) expires_at.setDate(expires_at.getDate() + 8)
module.exports = async (connection, data = {}) => { module.exports = async (dataSource, data = {}) => {
const manager = connection.manager const manager = dataSource.manager
const memberUser = await manager.create(User, { const memberUser = await manager.create(User, {
id: "member-user", id: "member-user",
+1 -1
View File
@@ -12,7 +12,7 @@
"@medusajs/medusa": "*", "@medusajs/medusa": "*",
"faker": "^5.5.3", "faker": "^5.5.3",
"medusa-interfaces": "*", "medusa-interfaces": "*",
"typeorm": "^0.2.31" "typeorm": "^0.3.11"
}, },
"devDependencies": { "devDependencies": {
"@babel/cli": "^7.12.10", "@babel/cli": "^7.12.10",
+19 -17
View File
@@ -2,7 +2,7 @@ const path = require("path")
const { getConfigFile } = require("medusa-core-utils") const { getConfigFile } = require("medusa-core-utils")
const { dropDatabase } = require("pg-god") const { dropDatabase } = require("pg-god")
const { createConnection } = require("typeorm") const { DataSource } = require("typeorm")
const dbFactory = require("./use-template-db") const dbFactory = require("./use-template-db")
const DB_HOST = process.env.DB_HOST const DB_HOST = process.env.DB_HOST
@@ -27,13 +27,13 @@ const keepTables = [
"currency", "currency",
] ]
let connectionType = "postgresql" let dataSourceType = "postgresql"
const DbTestUtil = { const DbTestUtil = {
db_: null, db_: null,
setDb: function (connection) { setDb: function (dataSource) {
this.db_ = connection this.db_ = dataSource
}, },
clear: async function () { clear: async function () {
@@ -47,7 +47,7 @@ const DbTestUtil = {
const manager = this.db_.manager const manager = this.db_.manager
if (connectionType === "sqlite") { if (dataSourceType === "sqlite") {
await manager.query(`PRAGMA foreign_keys = OFF`) await manager.query(`PRAGMA foreign_keys = OFF`)
} else { } else {
await manager.query(`SET session_replication_role = 'replica';`) await manager.query(`SET session_replication_role = 'replica';`)
@@ -64,7 +64,7 @@ const DbTestUtil = {
await manager.query(`DELETE await manager.query(`DELETE
FROM "${entity.tableName}";`) FROM "${entity.tableName}";`)
} }
if (connectionType === "sqlite") { if (dataSourceType === "sqlite") {
await manager.query(`PRAGMA foreign_keys = ON`) await manager.query(`PRAGMA foreign_keys = ON`)
} else { } else {
await manager.query(`SET session_replication_role = 'origin';`) await manager.query(`SET session_replication_role = 'origin';`)
@@ -72,7 +72,7 @@ const DbTestUtil = {
}, },
shutdown: async function () { shutdown: async function () {
await this.db_.close() await this.db_.destroy()
return await dropDatabase({ DB_NAME }, pgGodCredentials) return await dropDatabase({ DB_NAME }, pgGodCredentials)
}, },
} }
@@ -88,14 +88,12 @@ module.exports = {
require("@medusajs/medusa/dist/loaders/feature-flags").default require("@medusajs/medusa/dist/loaders/feature-flags").default
const featureFlagsRouter = featureFlagsLoader({ featureFlags }) const featureFlagsRouter = featureFlagsLoader({ featureFlags })
const modelsLoader = require("@medusajs/medusa/dist/loaders/models").default const modelsLoader = require("@medusajs/medusa/dist/loaders/models").default
const entities = modelsLoader({}, { register: false }) const entities = modelsLoader({}, { register: false })
if (projectConfig.database_type === "sqlite") { if (projectConfig.database_type === "sqlite") {
connectionType = "sqlite" dataSourceType = "sqlite"
const dbConnection = await createConnection({ const dataSource = new DataSource({
type: "sqlite", type: "sqlite",
database: projectConfig.database_database, database: projectConfig.database_database,
synchronize: true, synchronize: true,
@@ -103,8 +101,10 @@ module.exports = {
extra: database_extra ?? {}, extra: database_extra ?? {},
}) })
instance.setDb(dbConnection) const dbDataSource = await dataSource.initialize()
return dbConnection
instance.setDb(dbDataSource)
return dbDataSource
} else { } else {
await dbFactory.createFromTemplate(DB_NAME) await dbFactory.createFromTemplate(DB_NAME)
@@ -138,7 +138,7 @@ module.exports = {
(e) => typeof e.isFeatureEnabled === "undefined" || e.isFeatureEnabled() (e) => typeof e.isFeatureEnabled === "undefined" || e.isFeatureEnabled()
) )
const dbConnection = await createConnection({ const dbDataSource = new DataSource({
type: "postgres", type: "postgres",
url: DB_URL, url: DB_URL,
entities: enabledEntities.concat(moduleModels), entities: enabledEntities.concat(moduleModels),
@@ -147,10 +147,12 @@ module.exports = {
name: "integration-tests", name: "integration-tests",
}) })
await dbConnection.runMigrations() await dbDataSource.initialize()
instance.setDb(dbConnection) await dbDataSource.runMigrations()
return dbConnection
instance.setDb(dbDataSource)
return dbDataSource
} }
}, },
useDb: function () { useDb: function () {
+28 -27
View File
@@ -4,13 +4,15 @@ require("dotenv").config({ path: path.join(__dirname, "../.env.test") })
const { getConfigFile } = require("medusa-core-utils") const { getConfigFile } = require("medusa-core-utils")
const { createDatabase, dropDatabase } = require("pg-god") const { createDatabase, dropDatabase } = require("pg-god")
const { createConnection, getConnection } = require("typeorm") const { DataSource } = require("typeorm")
const DB_HOST = process.env.DB_HOST const DB_HOST = process.env.DB_HOST
const DB_USERNAME = process.env.DB_USERNAME const DB_USERNAME = process.env.DB_USERNAME
const DB_PASSWORD = process.env.DB_PASSWORD const DB_PASSWORD = process.env.DB_PASSWORD
const DB_URL = `postgres://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}` const DB_URL = `postgres://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}`
let masterDataSource
const pgGodCredentials = { const pgGodCredentials = {
user: DB_USERNAME, user: DB_USERNAME,
password: DB_PASSWORD, password: DB_PASSWORD,
@@ -19,16 +21,14 @@ const pgGodCredentials = {
class DatabaseFactory { class DatabaseFactory {
constructor() { constructor() {
this.connection_ = null this.dataSource_ = null
this.masterConnectionName = "master" this.masterDataSourceName = "master"
this.templateDbName = "medusa-integration-template" this.templateDbName = "medusa-integration-template"
} }
async createTemplateDb_({ cwd }) { async createTemplateDb_({ cwd }) {
const { configModule } = getConfigFile(cwd, `medusa-config`) const { configModule } = getConfigFile(cwd, `medusa-config`)
const dataSource = await this.getMasterDataSource()
const connection = await this.getMasterConnection()
const migrationDir = path.resolve( const migrationDir = path.resolve(
path.join( path.join(
__dirname, __dirname,
@@ -68,51 +68,52 @@ class DatabaseFactory {
pgGodCredentials pgGodCredentials
) )
const templateDbConnection = await createConnection({ const templateDbDataSource = new DataSource({
type: "postgres", type: "postgres",
name: "templateConnection", name: "templateDataSource",
url: `${DB_URL}/${this.templateDbName}`, url: `${DB_URL}/${this.templateDbName}`,
migrations: enabledMigrations.concat(moduleMigrations), migrations: enabledMigrations.concat(moduleMigrations),
}) })
await templateDbConnection.runMigrations() await templateDbDataSource.initialize()
await templateDbConnection.close()
return connection await templateDbDataSource.runMigrations()
await templateDbDataSource.destroy()
return dataSource
} }
async getMasterConnection() { async getMasterDataSource() {
try { masterDataSource = masterDataSource || (await this.createMasterDataSource())
return getConnection(this.masterConnectionName) return masterDataSource
} catch (err) {
return await this.createMasterConnection()
}
} }
async createMasterConnection() { async createMasterDataSource() {
const connection = await createConnection({ const dataSource = new DataSource({
type: "postgres", type: "postgres",
name: this.masterConnectionName, name: this.masterDataSourceName,
url: `${DB_URL}`, url: `${DB_URL}`,
}) })
await dataSource.initialize()
return connection return dataSource
} }
async createFromTemplate(dbName) { async createFromTemplate(dbName) {
const connection = await this.getMasterConnection() const dataSource = await this.getMasterDataSource()
await connection.query(`DROP DATABASE IF EXISTS "${dbName}";`) await dataSource.query(`DROP DATABASE IF EXISTS "${dbName}";`)
await connection.query( await dataSource.query(
`CREATE DATABASE "${dbName}" TEMPLATE "${this.templateDbName}";` `CREATE DATABASE "${dbName}" TEMPLATE "${this.templateDbName}";`
) )
} }
async destroy() { async destroy() {
const connection = await this.getMasterConnection() const dataSource = await this.getMasterDataSource()
await connection.query(`DROP DATABASE IF EXISTS "${this.templateDbName}";`) await dataSource.query(`DROP DATABASE IF EXISTS "${this.templateDbName}";`)
await connection.close() await dataSource.destroy()
} }
} }
@@ -302,7 +302,8 @@ describe("Inventory Items endpoints", () => {
const response = await api.get(`/admin/inventory-items`, adminHeaders) const response = await api.get(`/admin/inventory-items`, adminHeaders)
expect(response.data.inventory_items).toEqual([ expect(response.data.inventory_items).toHaveLength(1)
expect(response.data.inventory_items[0]).toEqual(
expect.objectContaining({ expect.objectContaining({
id: inventoryItemId, id: inventoryItemId,
sku: "MY_SKU", sku: "MY_SKU",
@@ -359,8 +360,8 @@ describe("Inventory Items endpoints", () => {
available_quantity: 5, available_quantity: 5,
}), }),
]), ]),
}), })
]) )
}) })
it("When deleting an inventory item it removes the product variants associated to it", async () => { it("When deleting an inventory item it removes the product variants associated to it", async () => {
@@ -98,6 +98,7 @@ Object {
"title": "Practical Granite Pizza", "title": "Practical Granite Pizza",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -254,6 +255,7 @@ Object {
"title": "Practical Granite Pizza", "title": "Practical Granite Pizza",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -407,6 +409,7 @@ Object {
"title": "Practical Granite Pizza", "title": "Practical Granite Pizza",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -525,6 +528,7 @@ Object {
"title": "Practical Granite Pizza", "title": "Practical Granite Pizza",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -709,6 +713,7 @@ Object {
"title": "Practical Granite Pizza", "title": "Practical Granite Pizza",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -875,6 +880,7 @@ Object {
"title": "Practical Granite Pizza", "title": "Practical Granite Pizza",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -1130,6 +1136,7 @@ Object {
"title": "Practical Granite Pizza", "title": "Practical Granite Pizza",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -1384,6 +1391,7 @@ Object {
"title": "Practical Granite Pizza", "title": "Practical Granite Pizza",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -1598,6 +1606,7 @@ Object {
"title": "Practical Granite Pizza", "title": "Practical Granite Pizza",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -1716,6 +1725,7 @@ Object {
"title": "Practical Granite Pizza", "title": "Practical Granite Pizza",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -1900,6 +1910,7 @@ Object {
"title": "Practical Granite Pizza", "title": "Practical Granite Pizza",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -2061,6 +2072,7 @@ Object {
"title": "Small Wooden Computer", "title": "Small Wooden Computer",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -2169,6 +2181,7 @@ Object {
"title": "Practical Granite Pizza", "title": "Practical Granite Pizza",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -2291,6 +2304,7 @@ Object {
"title": "Small Wooden Computer", "title": "Small Wooden Computer",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -2407,6 +2421,7 @@ Object {
"title": "Small Wooden Computer", "title": "Small Wooden Computer",
"upc": null, "upc": null,
"updated_at": Any<Date>, "updated_at": Any<Date>,
"variant_rank": 0,
"weight": null, "weight": null,
"width": null, "width": null,
}, },
@@ -2414,7 +2429,6 @@ Object {
}, },
], ],
"allow_backorder": true, "allow_backorder": true,
"beforeInsert": [Function],
"canceled_at": null, "canceled_at": null,
"cart_id": Any<String>, "cart_id": Any<String>,
"confirmed_at": Any<Date>, "confirmed_at": Any<Date>,
@@ -6,7 +6,7 @@ const { setPort, useApi } = require("../../../helpers/use-api")
const adminSeeder = require("../../helpers/admin-seeder") const adminSeeder = require("../../helpers/admin-seeder")
jest.setTimeout(30000) jest.setTimeout(50000)
const { const {
simpleOrderFactory, simpleOrderFactory,
@@ -343,8 +343,6 @@ describe("medusa-plugin-sendgrid", () => {
expect(response.status).toEqual(200) expect(response.status).toEqual(200)
expect(response.status).toEqual(200)
const swap = response.data.order.swaps[0] const swap = response.data.order.swaps[0]
const returnOrder = swap.return_order const returnOrder = swap.return_order
await api.post( await api.post(
@@ -421,7 +419,6 @@ describe("medusa-plugin-sendgrid", () => {
price: 500, price: 500,
}) })
const api = useApi() const api = useApi()
const response = await api.post( const response = await api.post(
`/admin/orders/${order.id}/claims`, `/admin/orders/${order.id}/claims`,
{ {
@@ -557,11 +554,14 @@ describe("medusa-plugin-sendgrid", () => {
phone: "12353245", phone: "12353245",
}, },
}) })
await api.post(`/store/carts/${cartId}/shipping-methods`, { await api.post(`/store/carts/${cartId}/shipping-methods`, {
option_id: shippingOut.id, option_id: shippingOut.id,
}) })
await api.post(`/store/carts/${cartId}/payment-sessions`) await api.post(`/store/carts/${cartId}/payment-sessions`)
await api.post(`/store/carts/${cartId}/complete`) await api.post(`/store/carts/${cartId}/complete`)
const { data: fulfillmentData } = await api.post( const { data: fulfillmentData } = await api.post(
`/admin/orders/${order.id}/swaps/${swapId}/fulfillments`, `/admin/orders/${order.id}/swaps/${swapId}/fulfillments`,
{}, {},
@@ -741,7 +741,6 @@ describe("medusa-plugin-sendgrid", () => {
const order = await createReturnableOrder(dbConnection) const order = await createReturnableOrder(dbConnection)
const api = useApi() const api = useApi()
const response = await api.post( const response = await api.post(
`/admin/orders/${order.id}/swaps`, `/admin/orders/${order.id}/swaps`,
{ {
@@ -1,17 +1,8 @@
import { Connection } from "typeorm" import { Connection } from "typeorm"
import faker from "faker" import faker from "faker"
import { import { Product, ProductOption, ProductType, ShippingProfile, ShippingProfileType, } from "@medusajs/medusa"
ShippingProfileType,
ShippingProfile,
Product,
ProductType,
ProductOption,
} from "@medusajs/medusa"
import { import { ProductVariantFactoryData, simpleProductVariantFactory, } from "./simple-product-variant-factory"
simpleProductVariantFactory,
ProductVariantFactoryData,
} from "./simple-product-variant-factory"
export type ProductFactoryData = { export type ProductFactoryData = {
id?: string id?: string
@@ -34,11 +25,11 @@ export const simpleProductFactory = async (
const manager = connection.manager const manager = connection.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: ShippingProfileType.DEFAULT, where: { type: ShippingProfileType.DEFAULT },
}) })
const gcProfile = await manager.findOne(ShippingProfile, { const gcProfile = await manager.findOne(ShippingProfile, {
type: ShippingProfileType.GIFT_CARD, where: { type: ShippingProfileType.GIFT_CARD },
}) })
let typeId: string let typeId: string
@@ -1,11 +1,6 @@
import { Connection } from "typeorm" import { Connection } from "typeorm"
import faker from "faker" import faker from "faker"
import { import { ShippingOption, ShippingOptionPriceType, ShippingProfile, ShippingProfileType, } from "@medusajs/medusa"
ShippingOptionPriceType,
ShippingProfile,
ShippingOption,
ShippingProfileType,
} from "@medusajs/medusa"
export type ShippingOptionFactoryData = { export type ShippingOptionFactoryData = {
name?: string name?: string
@@ -26,11 +21,11 @@ export const simpleShippingOptionFactory = async (
const manager = connection.manager const manager = connection.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: ShippingProfileType.DEFAULT, where: { type: ShippingProfileType.DEFAULT },
}) })
const gcProfile = await manager.findOne(ShippingProfile, { const gcProfile = await manager.findOne(ShippingProfile, {
type: ShippingProfileType.GIFT_CARD, where: { type: ShippingProfileType.GIFT_CARD },
}) })
const created = manager.create(ShippingOption, { const created = manager.create(ShippingOption, {
@@ -1,22 +1,27 @@
import { SalesChannel, Store } from "@medusajs/medusa" import { SalesChannel, Store } from "@medusajs/medusa"
import faker from "faker" import faker from "faker"
import { Connection } from "typeorm" import { DataSource, Not, IsNull } from "typeorm"
export type StoreFactoryData = { export type StoreFactoryData = {
swap_link_template?: string swap_link_template?: string
} }
export const simpleStoreFactory = async ( export const simpleStoreFactory = async (
connection: Connection, dataSource: DataSource,
data: StoreFactoryData = {}, data: StoreFactoryData = {},
seed?: number seed?: number
): Promise<Store> => { ): Promise<Store | undefined> => {
if (typeof seed !== "undefined") { if (typeof seed !== "undefined") {
faker.seed(seed) faker.seed(seed)
} }
const manager = connection.manager const manager = dataSource.manager
const store = await manager.findOne(Store) const stores = await manager.find(Store, { where: { id: Not(IsNull()) } })
const store = stores[0]
if (!store) {
return
}
store.swap_link_template = data.swap_link_template ?? "something/{cart_id}" store.swap_link_template = data.swap_link_template ?? "something/{cart_id}"
@@ -14,6 +14,7 @@ const {
LineItem, LineItem,
Payment, Payment,
PaymentSession, PaymentSession,
ShippingProfileType,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (connection, data = {}) => {
@@ -34,11 +35,15 @@ module.exports = async (connection, data = {}) => {
const manager = connection.manager const manager = connection.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: {
type: ShippingProfileType.DEFAULT,
},
}) })
const gcProfile = await manager.findOne(ShippingProfile, { const gcProfile = await manager.findOne(ShippingProfile, {
type: "gift_card", where: {
type: ShippingProfileType.GIFT_CARD,
},
}) })
await manager.insert(Address, { await manager.insert(Address, {
@@ -14,13 +14,16 @@ const {
Discount, Discount,
DiscountRule, DiscountRule,
Payment, Payment,
ShippingProfileType,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (connection, data = {}) => {
const manager = connection.manager const manager = connection.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: {
type: ShippingProfileType.DEFAULT,
},
}) })
await manager.insert(Product, { await manager.insert(Product, {
@@ -13,13 +13,16 @@ const {
ShippingOption, ShippingOption,
ShippingProfile, ShippingProfile,
Swap, Swap,
ShippingProfileType,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (connection, data = {}) => {
const manager = connection.manager const manager = connection.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: {
type: ShippingProfileType.DEFAULT,
},
}) })
await manager.insert(Product, { await manager.insert(Product, {
@@ -8,13 +8,16 @@ const {
ShippingProfile, ShippingProfile,
ProductVariant, ProductVariant,
Image, Image,
ShippingProfileType,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (connection, data = {}) => {
const manager = connection.manager const manager = connection.manager
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: {
type: ShippingProfileType.DEFAULT,
},
}) })
const coll = manager.create(ProductCollection, { const coll = manager.create(ProductCollection, {
@@ -3,6 +3,7 @@ const {
ShippingProfile, ShippingProfile,
ShippingOption, ShippingOption,
ShippingOptionRequirement, ShippingOptionRequirement,
ShippingProfileType,
} = require("@medusajs/medusa") } = require("@medusajs/medusa")
module.exports = async (connection, data = {}) => { module.exports = async (connection, data = {}) => {
@@ -16,7 +17,9 @@ module.exports = async (connection, data = {}) => {
}) })
const defaultProfile = await manager.findOne(ShippingProfile, { const defaultProfile = await manager.findOne(ShippingProfile, {
type: "default", where: {
type: ShippingProfileType.DEFAULT,
},
}) })
await manager.insert(ShippingOption, { await manager.insert(ShippingOption, {
+1 -1
View File
@@ -14,7 +14,7 @@
"medusa-fulfillment-webshipper": "*", "medusa-fulfillment-webshipper": "*",
"medusa-interfaces": "*", "medusa-interfaces": "*",
"medusa-plugin-sendgrid": "*", "medusa-plugin-sendgrid": "*",
"typeorm": "^0.2.31" "typeorm": "^0.3.11"
}, },
"devDependencies": { "devDependencies": {
"@babel/cli": "^7.12.10", "@babel/cli": "^7.12.10",
@@ -48,7 +48,7 @@ describe("Product Categories", () => {
is_active: false is_active: false
}) })
productCategoryRepository = dbConnection.manager.getCustomRepository(ProductCategoryRepository) productCategoryRepository = dbConnection.manager.withRepository(ProductCategoryRepository)
}) })
it("can fetch all root categories", async () => { it("can fetch all root categories", async () => {
@@ -133,7 +133,7 @@ describe("Product Categories", () => {
} }
) )
productCategoryRepository = dbConnection.manager.getCustomRepository(ProductCategoryRepository) productCategoryRepository = dbConnection.manager.withRepository(ProductCategoryRepository)
}) })
it("fetches all active categories", async () => { it("fetches all active categories", async () => {
@@ -200,7 +200,7 @@ describe("Product Categories", () => {
const [ categories, count ] = await productCategoryRepository.getFreeTextSearchResultsAndCount( const [ categories, count ] = await productCategoryRepository.getFreeTextSearchResultsAndCount(
{ {
where: { id: a11.id }, where: { id: a11.id },
relations: ['parent_category', 'category_children'], relations: { parent_category: true, category_children: true },
}, },
) )
+1 -1
View File
@@ -10,7 +10,7 @@
"dependencies": { "dependencies": {
"@medusajs/medusa": "*", "@medusajs/medusa": "*",
"medusa-interfaces": "*", "medusa-interfaces": "*",
"typeorm": "^0.2.31" "typeorm": "^0.3.11"
}, },
"devDependencies": { "devDependencies": {
"@babel/cli": "^7.12.10", "@babel/cli": "^7.12.10",
+1 -1
View File
@@ -57,7 +57,7 @@
"typedoc-plugin-markdown": "^3.13.4", "typedoc-plugin-markdown": "^3.13.4",
"typedoc-plugin-merge-modules": "^4.0.1", "typedoc-plugin-merge-modules": "^4.0.1",
"typedoc-plugin-reference-excluder": "^1.0.0", "typedoc-plugin-reference-excluder": "^1.0.0",
"typeorm": "^0.2.31" "typeorm": "^0.3.11"
}, },
"lint-staged": { "lint-staged": {
"*.{js,jsx,ts,tsx}": "yarn run lint", "*.{js,jsx,ts,tsx}": "yarn run lint",
+2 -4
View File
@@ -21,6 +21,7 @@
"cross-env": "^5.2.1", "cross-env": "^5.2.1",
"jest": "^25.5.4", "jest": "^25.5.4",
"ts-jest": "^25.5.1", "ts-jest": "^25.5.1",
"typeorm": "^0.3.11",
"typescript": "^4.4.4" "typescript": "^4.4.4"
}, },
"scripts": { "scripts": {
@@ -32,9 +33,6 @@
}, },
"peerDependencies": { "peerDependencies": {
"@medusajs/medusa": "1.7.7", "@medusajs/medusa": "1.7.7",
"medusa-interfaces": "1.3.6" "typeorm": "^0.3.11"
},
"dependencies": {
"typeorm": "^0.2.31"
} }
} }
@@ -1,11 +1,11 @@
import { DeepPartial, EntityManager } from "typeorm" import { DeepPartial, EntityManager, FindManyOptions } from "typeorm"
import { isDefined, MedusaError } from "medusa-core-utils" import { isDefined, MedusaError } from "medusa-core-utils"
import { import {
FindConfig,
buildQuery, buildQuery,
IEventBusService,
FilterableInventoryItemProps,
CreateInventoryItemInput, CreateInventoryItemInput,
FilterableInventoryItemProps,
FindConfig,
IEventBusService,
InventoryItemDTO, InventoryItemDTO,
TransactionBaseService, TransactionBaseService,
} from "@medusajs/medusa" } from "@medusajs/medusa"
@@ -87,7 +87,7 @@ export default class InventoryItemService extends TransactionBaseService {
const manager = this.getManager() const manager = this.getManager()
const itemRepository = manager.getRepository(InventoryItem) const itemRepository = manager.getRepository(InventoryItem)
const query = buildQuery({ id: inventoryItemId }, config) const query = buildQuery({ id: inventoryItemId }, config) as FindManyOptions
const [inventoryItem] = await itemRepository.find(query) const [inventoryItem] = await itemRepository.find(query)
if (!inventoryItem) { if (!inventoryItem) {
@@ -1,10 +1,10 @@
import { DeepPartial, EntityManager } from "typeorm" import { DeepPartial, EntityManager, FindManyOptions } from "typeorm"
import { isDefined, MedusaError } from "medusa-core-utils" import { isDefined, MedusaError } from "medusa-core-utils"
import { import {
FindConfig,
buildQuery, buildQuery,
FilterableInventoryLevelProps,
CreateInventoryLevelInput, CreateInventoryLevelInput,
FilterableInventoryLevelProps,
FindConfig,
IEventBusService, IEventBusService,
TransactionBaseService, TransactionBaseService,
} from "@medusajs/medusa" } from "@medusajs/medusa"
@@ -52,7 +52,7 @@ export default class InventoryLevelService extends TransactionBaseService {
const manager = this.getManager() const manager = this.getManager()
const levelRepository = manager.getRepository(InventoryLevel) const levelRepository = manager.getRepository(InventoryLevel)
const query = buildQuery(selector, config) const query = buildQuery(selector, config) as FindManyOptions
return await levelRepository.find(query) return await levelRepository.find(query)
} }
@@ -69,7 +69,7 @@ export default class InventoryLevelService extends TransactionBaseService {
const manager = this.getManager() const manager = this.getManager()
const levelRepository = manager.getRepository(InventoryLevel) const levelRepository = manager.getRepository(InventoryLevel)
const query = buildQuery(selector, config) const query = buildQuery(selector, config) as FindManyOptions
return await levelRepository.findAndCount(query) return await levelRepository.findAndCount(query)
} }
@@ -94,7 +94,7 @@ export default class InventoryLevelService extends TransactionBaseService {
const manager = this.getManager() const manager = this.getManager()
const levelRepository = manager.getRepository(InventoryLevel) const levelRepository = manager.getRepository(InventoryLevel)
const query = buildQuery({ id: inventoryLevelId }, config) const query = buildQuery({ id: inventoryLevelId }, config) as FindManyOptions
const [inventoryLevel] = await levelRepository.find(query) const [inventoryLevel] = await levelRepository.find(query)
if (!inventoryLevel) { if (!inventoryLevel) {
@@ -1,4 +1,4 @@
import { EntityManager } from "typeorm" import { EntityManager, FindManyOptions } from "typeorm"
import { isDefined, MedusaError } from "medusa-core-utils" import { isDefined, MedusaError } from "medusa-core-utils"
import { import {
FindConfig, FindConfig,
@@ -62,7 +62,7 @@ export default class ReservationItemService extends TransactionBaseService {
const manager = this.getManager() const manager = this.getManager()
const itemRepository = manager.getRepository(ReservationItem) const itemRepository = manager.getRepository(ReservationItem)
const query = buildQuery(selector, config) const query = buildQuery(selector, config) as FindManyOptions
return await itemRepository.find(query) return await itemRepository.find(query)
} }
@@ -79,7 +79,7 @@ export default class ReservationItemService extends TransactionBaseService {
const manager = this.getManager() const manager = this.getManager()
const itemRepository = manager.getRepository(ReservationItem) const itemRepository = manager.getRepository(ReservationItem)
const query = buildQuery(selector, config) const query = buildQuery(selector, config) as FindManyOptions
return await itemRepository.findAndCount(query) return await itemRepository.findAndCount(query)
} }
@@ -104,7 +104,7 @@ export default class ReservationItemService extends TransactionBaseService {
const manager = this.getManager() const manager = this.getManager()
const reservationItemRepository = manager.getRepository(ReservationItem) const reservationItemRepository = manager.getRepository(ReservationItem)
const query = buildQuery({ id: reservationItemId }, config) const query = buildQuery({ id: reservationItemId }, config) as FindManyOptions
const [reservationItem] = await reservationItemRepository.find(query) const [reservationItem] = await reservationItemRepository.find(query)
if (!reservationItem) { if (!reservationItem) {
+15 -7
View File
@@ -1,6 +1,8 @@
import { EntityManager, ILike } from "typeorm" import { EntityManager, FindOptionsWhere, ILike } from "typeorm"
import { import {
buildLegacyFieldsListFrom,
buildQuery, buildQuery,
ExtendedFindConfig,
FilterableInventoryItemProps, FilterableInventoryItemProps,
FindConfig, FindConfig,
} from "@medusajs/medusa" } from "@medusajs/medusa"
@@ -12,14 +14,19 @@ export function getListQuery(
config: FindConfig<InventoryItem> = { relations: [], skip: 0, take: 10 } config: FindConfig<InventoryItem> = { relations: [], skip: 0, take: 10 }
) { ) {
const inventoryItemRepository = manager.getRepository(InventoryItem) const inventoryItemRepository = manager.getRepository(InventoryItem)
const query = buildQuery(selector, config)
const { q, ...selectorRest } = selector
const query = buildQuery(selectorRest, config) as ExtendedFindConfig<InventoryItem> & {
where: FindOptionsWhere<InventoryItem & {
location_id?: string
}>
}
const queryBuilder = inventoryItemRepository.createQueryBuilder("inv_item") const queryBuilder = inventoryItemRepository.createQueryBuilder("inv_item")
if (query.where.q) { if (q) {
query.where.sku = ILike(`%${query.where.q as string}%`) query.where.sku = ILike(`%${q}%`)
delete query.where.q
} }
if ("location_id" in query.where) { if ("location_id" in query.where) {
@@ -50,7 +57,8 @@ export function getListQuery(
} }
if (query.select) { if (query.select) {
queryBuilder.select(query.select.map((s) => "inv_item." + s)) const legacySelect = buildLegacyFieldsListFrom(query.select)
queryBuilder.select(legacySelect.map((s) => "inv_item." + s))
} }
if (query.order) { if (query.order) {
@@ -25,7 +25,7 @@ type ComputePropertyNames<
* ``` * ```
*/ */
export const transformIdableFields = < export const transformIdableFields = <
T = Record<string, unknown>, T extends object = Record<string, unknown>,
TFields extends (keyof T | string)[] = (keyof T | string)[], TFields extends (keyof T | string)[] = (keyof T | string)[],
TOutput = { TOutput = {
[P in ComputePropertyNames<T, keyof T & string, TFields>]: P extends keyof T [P in ComputePropertyNames<T, keyof T & string, TFields>]: P extends keyof T
+3 -3
View File
@@ -26,10 +26,10 @@
"medusa-interfaces": "^1.3.6" "medusa-interfaces": "^1.3.6"
}, },
"scripts": { "scripts": {
"prepare": "cross-env NODE_ENV=production yarn run build",
"test": "jest --passWithNoTests src",
"build": "babel src --out-dir dist/ --ignore '**/__tests__','**/__mocks__'", "build": "babel src --out-dir dist/ --ignore '**/__tests__','**/__mocks__'",
"watch": "babel -w src --out-dir dist/ --ignore '**/__tests__','**/__mocks__'" "prepare": "cross-env NODE_ENV=production yarn run build",
"watch": "babel -w src --out-dir dist/ --ignore '**/__tests__','**/__mocks__'",
"test": "jest --passWithNoTests src"
}, },
"peerDependencies": { "peerDependencies": {
"medusa-interfaces": "1.3.6" "medusa-interfaces": "1.3.6"
-1
View File
@@ -33,7 +33,6 @@
"jest": "^25.5.4", "jest": "^25.5.4",
"medusa-core-utils": "^1.1.39", "medusa-core-utils": "^1.1.39",
"medusa-test-utils": "^1.1.37", "medusa-test-utils": "^1.1.37",
"typeorm": "^0.2.29",
"typescript": "^4.4.4" "typescript": "^4.4.4"
}, },
"peerDependencies": { "peerDependencies": {
@@ -1,33 +1,6 @@
import BaseService from "../base-service" import BaseService from "../base-service"
import { In, Not } from "typeorm"
describe("BaseService", () => { describe("BaseService", () => {
describe("buildQuery_", () => {
const baseService = new BaseService()
it("successfully creates query", () => {
const q = baseService.buildQuery_(
{
id: "1234",
test1: ["123", "12", "1"],
test2: Not("this"),
},
{
relations: ["1234"],
}
)
expect(q).toEqual({
where: {
id: "1234",
test1: In(["123", "12", "1"]),
test2: Not("this"),
},
relations: ["1234"],
})
})
})
describe("addDecorator", () => { describe("addDecorator", () => {
const baseService = new BaseService() const baseService = new BaseService()
+7 -135
View File
@@ -1,11 +1,12 @@
import { MedusaError } from "medusa-core-utils" // Import from dist to avoid circular deps which result in the base service to be undefined
import { FindOperator, In, Raw } from "typeorm" import { buildQuery, setMetadata, validateId } from "@medusajs/medusa/dist/utils"
/** /**
* Common functionality for Services * Common functionality for Services
* @interface * @interface
* @deprecated use TransactionBaseService from @medusajs/medusa instead
*/ */
class BaseService { export default class BaseService {
constructor() { constructor() {
this.decorators_ = [] this.decorators_ = []
} }
@@ -19,93 +20,7 @@ class BaseService {
* Used to build TypeORM queries. * Used to build TypeORM queries.
*/ */
buildQuery_(selector, config = {}) { buildQuery_(selector, config = {}) {
const build = (obj) => { return buildQuery(selector, config)
const where = Object.entries(obj).reduce((acc, [key, value]) => {
// Undefined values indicate that they have no significance to the query.
// If the query is looking for rows where a column is not set it should use null instead of undefined
if (typeof value === "undefined") {
return acc
}
switch (true) {
case value instanceof FindOperator:
acc[key] = value
break
case Array.isArray(value):
acc[key] = In([...value])
break
case value !== null && typeof value === "object":
const subquery = []
Object.entries(value).map(([modifier, val]) => {
switch (modifier) {
case "lt":
subquery.push({ operator: "<", value: val })
break
case "gt":
subquery.push({ operator: ">", value: val })
break
case "lte":
subquery.push({ operator: "<=", value: val })
break
case "gte":
subquery.push({ operator: ">=", value: val })
break
default:
acc[key] = value
break
}
})
if (subquery.length) {
acc[key] = Raw(
(a) =>
subquery
.map((s, index) => `${a} ${s.operator} :${index}`)
.join(" AND "),
subquery.map((s) => s.value)
)
}
break
default:
acc[key] = value
break
}
return acc
}, {})
return where
}
const query = {
where: build(selector),
}
if ("deleted_at" in selector) {
query.withDeleted = true
}
if ("skip" in config) {
query.skip = config.skip
}
if ("take" in config) {
query.take = config.take
}
if ("relations" in config) {
query.relations = config.relations
}
if ("select" in config) {
query.select = config.select
}
if ("order" in config) {
query.order = config.order
}
return query
} }
/** /**
@@ -117,32 +32,7 @@ class BaseService {
* @returns {string} the rawId given that nothing failed * @returns {string} the rawId given that nothing failed
*/ */
validateId_(rawId, config = {}) { validateId_(rawId, config = {}) {
const { prefix, length } = config return validateId(rawId, config)
if (!rawId) {
throw new MedusaError(
MedusaError.Types.INVALID_DATA,
`Failed to validate id: ${rawId}`
)
}
if (prefix || length) {
const [pre, rand] = rawId.split("_")
if (prefix && pre !== prefix) {
throw new MedusaError(
MedusaError.Types.INVALID_DATA,
`The provided id: ${rawId} does not adhere to prefix constraint: ${prefix}`
)
}
if (length && length !== rand.length) {
throw new MedusaError(
MedusaError.Types.INVALID_DATA,
`The provided id: ${rawId} does not adhere to length constraint: ${length}`
)
}
}
return rawId
} }
shouldRetryTransaction(err) { shouldRetryTransaction(err) {
@@ -249,24 +139,7 @@ class BaseService {
* @return {Promise} resolves to the updated result. * @return {Promise} resolves to the updated result.
*/ */
setMetadata_(obj, metadata) { setMetadata_(obj, metadata) {
const existing = obj.metadata || {} return setMetadata(obj, metadata)
const newData = {}
for (const [key, value] of Object.entries(metadata)) {
if (typeof key !== "string") {
throw new MedusaError(
MedusaError.Types.INVALID_ARGUMENT,
"Key type is invalid. Metadata keys must be strings"
)
}
newData[key] = value
}
const updated = {
...existing,
...newData,
}
return updated
} }
/** /**
@@ -295,4 +168,3 @@ class BaseService {
}, Promise.resolve(obj)) }, Promise.resolve(obj))
} }
} }
export default BaseService
@@ -1,6 +1,7 @@
import SendGrid from "@sendgrid/mail" import SendGrid from "@sendgrid/mail"
import { humanizeAmount, zeroDecimalCurrencies } from "medusa-core-utils" import { humanizeAmount, zeroDecimalCurrencies } from "medusa-core-utils"
import { NotificationService } from "medusa-interfaces" import { NotificationService } from "medusa-interfaces"
import { IsNull, Not } from "typeorm"
class SendGridService extends NotificationService { class SendGridService extends NotificationService {
static identifier = "sendgrid" static identifier = "sendgrid"
@@ -621,7 +622,7 @@ class SendGridService extends NotificationService {
{ {
id: returnRequest.items.map(({ item_id }) => item_id), id: returnRequest.items.map(({ item_id }) => item_id),
}, },
{ relations: ["tax_lines"] } { relations: ["tax_lines", "variant", "variant.product"] }
) )
// Fetch the order // Fetch the order
@@ -629,6 +630,7 @@ class SendGridService extends NotificationService {
select: ["total"], select: ["total"],
relations: [ relations: [
"items", "items",
"items.variant",
"items.tax_lines", "items.tax_lines",
"discounts", "discounts",
"discounts.rule", "discounts.rule",
@@ -712,20 +714,22 @@ class SendGridService extends NotificationService {
async swapReceivedData({ id }) { async swapReceivedData({ id }) {
const store = await this.storeService_.retrieve() const store = await this.storeService_.retrieve()
const swap = await this.swapService_.retrieve(id, { const swap = await this.swapService_.retrieve(id, {
relations: [ relations: [
"additional_items", "additional_items",
"additional_items.tax_lines", "additional_items.tax_lines",
"additional_items.variant",
"return_order", "return_order",
"return_order.items", "return_order.items",
"return_order.items.item", "return_order.items.item",
"return_order.items.item.variant",
"return_order.shipping_method", "return_order.shipping_method",
"return_order.shipping_method.shipping_option", "return_order.shipping_method.shipping_option",
], ],
}) })
const returnRequest = swap.return_order const returnRequest = swap.return_order
const items = await this.lineItemService_.list( const items = await this.lineItemService_.list(
{ {
id: returnRequest.items.map(({ item_id }) => item_id), id: returnRequest.items.map(({ item_id }) => item_id),
@@ -752,16 +756,19 @@ class SendGridService extends NotificationService {
select: ["total"], select: ["total"],
relations: [ relations: [
"items", "items",
"items.variant",
"discounts", "discounts",
"discounts.rule", "discounts.rule",
"shipping_address", "shipping_address",
"swaps", "swaps",
"swaps.additional_items", "swaps.additional_items",
"swaps.additional_items.tax_lines", "swaps.additional_items.tax_lines",
"swaps.additional_items.variant",
], ],
}) })
const cart = await this.cartService_.retrieve(swap.cart_id, { const cart = await this.cartService_.retrieve(swap.cart_id, {
relations: ["items", "items.variant", "items.variant.product"],
select: [ select: [
"total", "total",
"tax_total", "tax_total",
@@ -770,8 +777,8 @@ class SendGridService extends NotificationService {
"subtotal", "subtotal",
], ],
}) })
const currencyCode = order.currency_code.toUpperCase()
const currencyCode = order.currency_code.toUpperCase()
const decoratedItems = await Promise.all( const decoratedItems = await Promise.all(
cart.items.map(async (i) => { cart.items.map(async (i) => {
const totals = await this.totalsService_.getLineItemTotals(i, cart, { const totals = await this.totalsService_.getLineItemTotals(i, cart, {
@@ -837,10 +844,11 @@ class SendGridService extends NotificationService {
} }
async swapCreatedData({ id }) { async swapCreatedData({ id }) {
const store = await this.storeService_.retrieve() const store = await this.storeService_.retrieve({ where: { id: Not(IsNull()) } })
const swap = await this.swapService_.retrieve(id, { const swap = await this.swapService_.retrieve(id, {
relations: [ relations: [
"additional_items", "additional_items",
"additional_items.variant.product",
"additional_items.tax_lines", "additional_items.tax_lines",
"return_order", "return_order",
"return_order.items", "return_order.items",
@@ -857,7 +865,7 @@ class SendGridService extends NotificationService {
id: returnRequest.items.map(({ item_id }) => item_id), id: returnRequest.items.map(({ item_id }) => item_id),
}, },
{ {
relations: ["tax_lines"], relations: ["tax_lines", "variant", "variant.product"],
} }
) )
@@ -878,6 +886,8 @@ class SendGridService extends NotificationService {
select: ["total"], select: ["total"],
relations: [ relations: [
"items", "items",
"items.variant",
"items.variant.product",
"items.tax_lines", "items.tax_lines",
"discounts", "discounts",
"discounts.rule", "discounts.rule",
@@ -885,6 +895,7 @@ class SendGridService extends NotificationService {
"swaps", "swaps",
"swaps.additional_items", "swaps.additional_items",
"swaps.additional_items.tax_lines", "swaps.additional_items.tax_lines",
"swaps.additional_items.variant",
], ],
}) })
@@ -896,6 +907,7 @@ class SendGridService extends NotificationService {
"shipping_total", "shipping_total",
"subtotal", "subtotal",
], ],
relations: ["items", "items.variant", "items.variant.product"]
}) })
const currencyCode = order.currency_code.toUpperCase() const currencyCode = order.currency_code.toUpperCase()
@@ -977,6 +989,8 @@ class SendGridService extends NotificationService {
"shipping_methods", "shipping_methods",
"shipping_methods.tax_lines", "shipping_methods.tax_lines",
"additional_items", "additional_items",
"additional_items.variant",
"additional_items.variant.product",
"additional_items.tax_lines", "additional_items.tax_lines",
"return_order", "return_order",
"return_order.items", "return_order.items",
@@ -988,10 +1002,14 @@ class SendGridService extends NotificationService {
"region", "region",
"items", "items",
"items.tax_lines", "items.tax_lines",
"items.variant",
"items.variant.product",
"discounts", "discounts",
"discounts.rule", "discounts.rule",
"swaps", "swaps",
"swaps.additional_items", "swaps.additional_items",
"swaps.additional_items.variant",
"swaps.additional_items.variant.product",
"swaps.additional_items.tax_lines", "swaps.additional_items.tax_lines",
], ],
}) })
@@ -1004,6 +1022,11 @@ class SendGridService extends NotificationService {
"shipping_total", "shipping_total",
"subtotal", "subtotal",
], ],
relations: [
"items",
"items.variant",
"items.variant.product",
]
}) })
const returnRequest = swap.return_order const returnRequest = swap.return_order
@@ -1012,7 +1035,7 @@ class SendGridService extends NotificationService {
id: returnRequest.items.map(({ item_id }) => item_id), id: returnRequest.items.map(({ item_id }) => item_id),
}, },
{ {
relations: ["tax_lines"], relations: ["tax_lines", "variant", "variant.product"],
} }
) )
@@ -1118,7 +1141,13 @@ class SendGridService extends NotificationService {
async claimShipmentCreatedData({ id, fulfillment_id }) { async claimShipmentCreatedData({ id, fulfillment_id }) {
const claim = await this.claimService_.retrieve(id, { const claim = await this.claimService_.retrieve(id, {
relations: ["order", "order.items", "order.shipping_address"], relations: [
"order",
"order.items",
"order.items.variant",
"order.items.variant.product",
"order.shipping_address"
],
}) })
const shipment = await this.fulfillmentService_.retrieve(fulfillment_id, { const shipment = await this.fulfillmentService_.retrieve(fulfillment_id, {
@@ -1,17 +1,17 @@
export default { export default {
getRepository: function (repo) { getRepository: function (repo) {
return repo; return repo
}, },
getCustomRepository: function (repo) { withRepository: function (repo) {
return repo; return repo
}, },
transaction: function (isolationOrCb, cb) { transaction: function (isolationOrCb, cb) {
if (typeof isolationOrCb === "string") { if (typeof isolationOrCb === "string") {
return cb(this); return cb(this)
} else { } else {
return isolationOrCb(this); return isolationOrCb(this)
} }
}, },
}; }
@@ -12,6 +12,7 @@ class MockRepo {
save, save,
findAndCount, findAndCount,
del, del,
count,
}) { }) {
this.create_ = create; this.create_ = create;
this.update_ = update; this.update_ = update;
@@ -28,45 +29,45 @@ class MockRepo {
} }
setFindOne(fn) { setFindOne(fn) {
this.findOne_ = fn; this.findOne_ = fn
} }
create = jest.fn().mockImplementation((...args) => { create = jest.fn().mockImplementation((...args) => {
if (this.create_) { if (this.create_) {
return this.create_(...args); return this.create_(...args)
} }
return {}; return {}
}); })
softRemove = jest.fn().mockImplementation((...args) => { softRemove = jest.fn().mockImplementation((...args) => {
if (this.softRemove_) { if (this.softRemove_) {
return this.softRemove_(...args); return this.softRemove_(...args)
} }
return {}; return {}
}); })
remove = jest.fn().mockImplementation((...args) => { remove = jest.fn().mockImplementation((...args) => {
if (this.remove_) { if (this.remove_) {
return this.remove_(...args); return this.remove_(...args)
} }
return {}; return {}
}); })
update = jest.fn().mockImplementation((...args) => { update = jest.fn().mockImplementation((...args) => {
if (this.update_) { if (this.update_) {
return this.update_(...args); return this.update_(...args)
} }
}); })
findOneOrFail = jest.fn().mockImplementation((...args) => { findOneOrFail = jest.fn().mockImplementation((...args) => {
if (this.findOneOrFail_) { if (this.findOneOrFail_) {
return this.findOneOrFail_(...args); return this.findOneOrFail_(...args)
} }
}); })
findOneWithRelations = jest.fn().mockImplementation((...args) => { findOneWithRelations = jest.fn().mockImplementation((...args) => {
if (this.findOneWithRelations_) { if (this.findOneWithRelations_) {
return this.findOneWithRelations_(...args); return this.findOneWithRelations_(...args)
} }
}); })
findOne = jest.fn().mockImplementation((...args) => { findOne = jest.fn().mockImplementation((...args) => {
if (this.findOne_) { if (this.findOne_) {
return this.findOne_(...args); return this.findOne_(...args)
} }
}); });
findDescendantsTree = jest.fn().mockImplementation((...args) => { findDescendantsTree = jest.fn().mockImplementation((...args) => {
@@ -76,40 +77,46 @@ class MockRepo {
}); });
findOneOrFail = jest.fn().mockImplementation((...args) => { findOneOrFail = jest.fn().mockImplementation((...args) => {
if (this.findOneOrFail_) { if (this.findOneOrFail_) {
return this.findOneOrFail_(...args); return this.findOneOrFail_(...args)
} }
}); })
find = jest.fn().mockImplementation((...args) => { find = jest.fn().mockImplementation((...args) => {
if (this.find_) { if (this.find_) {
return this.find_(...args); return this.find_(...args)
} }
}); })
softRemove = jest.fn().mockImplementation((...args) => { softRemove = jest.fn().mockImplementation((...args) => {
if (this.softRemove_) { if (this.softRemove_) {
return this.softRemove_(...args); return this.softRemove_(...args)
} }
}); })
save = jest.fn().mockImplementation((...args) => { save = jest.fn().mockImplementation((...args) => {
if (this.save_) { if (this.save_) {
return this.save_(...args); return this.save_(...args)
} }
return Promise.resolve(...args); return Promise.resolve(...args)
}); })
findAndCount = jest.fn().mockImplementation((...args) => { findAndCount = jest.fn().mockImplementation((...args) => {
if (this.findAndCount_) { if (this.findAndCount_) {
return this.findAndCount_(...args); return this.findAndCount_(...args)
} }
return {}; return {}
}); })
count = jest.fn().mockImplementation((...args) => {
if (this.count_) {
return this.count(...args)
}
return {}
})
delete = jest.fn().mockImplementation((...args) => { delete = jest.fn().mockImplementation((...args) => {
if (this.delete_) { if (this.delete_) {
return this.delete_(...args); return this.delete_(...args)
} }
return {}; return {}
}); })
} }
export default (methods = {}) => { export default (methods = {}) => {
return new MockRepo(methods); return new MockRepo(methods)
}; }
+1 -1
View File
@@ -45,7 +45,7 @@
}, },
"peerDependencies": { "peerDependencies": {
"medusa-interfaces": "1.3.6", "medusa-interfaces": "1.3.6",
"typeorm": "0.2.x" "typeorm": "^0.3.11"
}, },
"dependencies": { "dependencies": {
"@medusajs/medusa-cli": "^1.3.8", "@medusajs/medusa-cli": "^1.3.8",
@@ -18,9 +18,14 @@ export const getVariantsByInventoryItemId = async (
inventoryItems.map((item) => item.id) inventoryItems.map((item) => item.id)
) )
const variants = await productVariantService.list({ const variants = await productVariantService.list(
{
id: variantInventory.map((varInventory) => varInventory.variant_id), id: variantInventory.map((varInventory) => varInventory.variant_id),
}) },
{
relations: ["product"],
}
)
const variantMap = new Map(variants.map((variant) => [variant.id, variant])) const variantMap = new Map(variants.map((variant) => [variant.id, variant]))
return variantInventory.reduce((acc, cur) => { return variantInventory.reduce((acc, cur) => {
@@ -142,9 +142,11 @@ export default async (req, res) => {
relations: [ relations: [
"cart", "cart",
"items", "items",
"items.variant",
"items.tax_lines", "items.tax_lines",
"swaps", "swaps",
"swaps.additional_items", "swaps.additional_items",
"swaps.additional_items.variant",
"swaps.additional_items.tax_lines", "swaps.additional_items.tax_lines",
], ],
}) })
@@ -319,6 +319,7 @@ export const defaultAdminOrdersRelations = [
"claims.shipping_methods", "claims.shipping_methods",
"claims.shipping_address", "claims.shipping_address",
"claims.additional_items", "claims.additional_items",
"claims.additional_items.variant",
"claims.fulfillments", "claims.fulfillments",
"claims.fulfillments.tracking_links", "claims.fulfillments.tracking_links",
"claims.claim_items", "claims.claim_items",
@@ -334,6 +335,7 @@ export const defaultAdminOrdersRelations = [
"swaps.shipping_methods.tax_lines", "swaps.shipping_methods.tax_lines",
"swaps.shipping_address", "swaps.shipping_address",
"swaps.additional_items", "swaps.additional_items",
"swaps.additional_items.variant",
"swaps.fulfillments", "swaps.fulfillments",
"swaps.fulfillments.tracking_links", "swaps.fulfillments.tracking_links",
] ]
@@ -33,7 +33,7 @@ export default (app, featureFlagRouter: FlagRouter) => {
return app return app
} }
export const defaultFields = [ export const defaultFields: (keyof ShippingOption)[] = [
"id", "id",
"name", "name",
"region_id", "region_id",
@@ -14,6 +14,8 @@ import { EntityManager } from "typeorm"
import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing"
import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators" import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators"
import { validator } from "../../../../utils/validator" import { validator } from "../../../../utils/validator"
import { ShippingOptionService } from "../../../../services"
import { UpdateShippingOptionInput } from "../../../../types/shipping-options"
/** /**
* @oas [post] /shipping-options/{id} * @oas [post] /shipping-options/{id}
@@ -92,9 +94,14 @@ import { validator } from "../../../../utils/validator"
export default async (req, res) => { export default async (req, res) => {
const { option_id } = req.params const { option_id } = req.params
const validated = await validator(AdminPostShippingOptionsOptionReq, req.body) const validated = (await validator(
AdminPostShippingOptionsOptionReq,
req.body
)) as UpdateShippingOptionInput
const optionService = req.scope.resolve("shippingOptionService") const optionService: ShippingOptionService = req.scope.resolve(
"shippingOptionService"
)
const manager: EntityManager = req.scope.resolve("manager") const manager: EntityManager = req.scope.resolve("manager")
await manager.transaction(async (transactionManager) => { await manager.transaction(async (transactionManager) => {
@@ -13,6 +13,7 @@ const defaultRelations = [
"shipping_methods", "shipping_methods",
"cart", "cart",
"cart.items", "cart.items",
"cart.items.variant",
"cart.items.adjustments", "cart.items.adjustments",
] ]
@@ -32,6 +32,7 @@ export const defaultAdminSwapRelations = [
"shipping_methods", "shipping_methods",
"cart", "cart",
"cart.items", "cart.items",
"cart.items.variant",
"cart.items.adjustments", "cart.items.adjustments",
] ]
@@ -57,6 +57,8 @@ export const defaultAdminVariantFields: (keyof ProductVariant)[] = [
"created_at", "created_at",
"updated_at", "updated_at",
"metadata", "metadata",
"deleted_at",
"manage_inventory",
] ]
/** /**
Loaded 100 of 275 files, more files were not shown because too many files have changed in this diff. Show more