feat(medusa): Separate money amount and variant (#4906)

* initial changes

* working test

* final changes to product tests

* update integration tests

* update price list integration tests

* update integration tests

* update unit tests

* update plugin integration tests

* remove catch from integration test

* undo change

* add andWhere

* update upsertCurrencyMoneyAmount method

* undo line item changes

* undo changes

* update deprecated method

* Update packages/medusa/src/migrations/1692953518123-drop_money_amount_constraints_for_pricing_module.ts

Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com>

* rename joinTable

* update with joinTable entity

* update load methods

* remove await create

* re-add context test

* update price list behavior for prices

* update price list snapshots

* re-add admin seeder

* pr feedback

* fix unit tests

* fix plugin integration tests

* initial review changes

* redo changes to variant creation

---------

Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com>
Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
Philip Korsholm
2023-09-13 13:26:20 +02:00
committed by GitHub
parent 3d68be2b6b
commit 5d10c46bb1
52 changed files with 2465 additions and 910 deletions

View File

@@ -21,7 +21,9 @@ Object {
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
Object {
"amount": 80,
@@ -34,7 +36,9 @@ Object {
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
Object {
"amount": 50,
@@ -47,7 +51,9 @@ Object {
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
],
"starts_at": "2022-07-01T00:00:00.000Z",
@@ -87,7 +93,9 @@ Object {
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
Object {
"amount": 80,
@@ -100,7 +108,9 @@ Object {
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
Object {
"amount": 50,
@@ -113,7 +123,9 @@ Object {
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
Object {
"amount": 85,
@@ -126,7 +138,9 @@ Object {
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant_1",
"variants": Any<Array>,
},
Object {
"amount": 10,
@@ -139,7 +153,9 @@ Object {
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
],
"starts_at": "2022-09-01T00:00:00.000Z",
@@ -161,7 +177,9 @@ Object {
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
}
`;
@@ -178,7 +196,9 @@ Array [
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
Object {
"amount": 35,
@@ -191,7 +211,9 @@ Array [
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
Object {
"amount": 25,
@@ -204,7 +226,9 @@ Array [
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
]
`;
@@ -222,7 +246,9 @@ Array [
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
Object {
"amount": 80,
@@ -235,7 +261,9 @@ Array [
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
Object {
"amount": 50,
@@ -248,7 +276,9 @@ Array [
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
Object {
"amount": 45,
@@ -261,7 +291,9 @@ Array [
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
Object {
"amount": 35,
@@ -274,7 +306,9 @@ Array [
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
Object {
"amount": 25,
@@ -287,8 +321,9 @@ Array [
"price_list_id": "pl_no_customer_groups",
"region_id": null,
"updated_at": Any<String>,
"variant": Any<Object>,
"variant_id": "test-variant",
"variants": Any<Array>,
},
]
`;

View File

@@ -1177,7 +1177,7 @@ describe("/admin/orders", () => {
const manager = dbConnection.manager
// add a shipping method so we can fulfill the swap
const sm = await manager.create(ShippingMethod, {
const sm = manager.create(ShippingMethod, {
id: "test-method-swap-cart",
swap_id: sid,
shipping_option_id: "test-option",
@@ -1654,7 +1654,7 @@ describe("/admin/orders", () => {
)
})
it.only("fails to lists all orders with an invalid status", async () => {
it("fails to lists all orders with an invalid status", async () => {
expect.assertions(3)
const api = useApi()

View File

@@ -168,6 +168,8 @@ describe("/admin/price-lists", () => {
price_list_id: "pl_no_customer_groups",
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
},
{
id: expect.any(String),
@@ -179,6 +181,8 @@ describe("/admin/price-lists", () => {
price_list_id: "pl_no_customer_groups",
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
},
{
id: expect.any(String),
@@ -190,6 +194,8 @@ describe("/admin/price-lists", () => {
price_list_id: "pl_no_customer_groups",
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
},
],
created_at: expect.any(String),
@@ -452,6 +458,8 @@ describe("/admin/price-lists", () => {
region_id: null,
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
deleted_at: null,
},
{
@@ -461,6 +469,8 @@ describe("/admin/price-lists", () => {
min_quantity: 101,
max_quantity: 500,
variant_id: "test-variant",
variant: expect.any(Object),
variants: expect.any(Array),
price_list_id: "pl_no_customer_groups",
region_id: null,
created_at: expect.any(String),
@@ -474,6 +484,8 @@ describe("/admin/price-lists", () => {
min_quantity: 501,
max_quantity: 1000,
variant_id: "test-variant",
variant: expect.any(Object),
variants: expect.any(Array),
price_list_id: "pl_no_customer_groups",
region_id: null,
created_at: expect.any(String),
@@ -485,6 +497,8 @@ describe("/admin/price-lists", () => {
amount: 85,
currency_code: "usd",
variant_id: "test-variant_1",
variant: expect.any(Object),
variants: expect.any(Array),
price_list_id: "pl_no_customer_groups",
min_quantity: null,
max_quantity: null,
@@ -498,6 +512,8 @@ describe("/admin/price-lists", () => {
amount: 10,
currency_code: "usd",
variant_id: "test-variant",
variant: expect.any(Object),
variants: expect.any(Array),
price_list_id: "pl_no_customer_groups",
min_quantity: null,
max_quantity: null,
@@ -560,6 +576,8 @@ describe("/admin/price-lists", () => {
region_id: null,
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
})
})
@@ -690,6 +708,8 @@ describe("/admin/price-lists", () => {
variant_id: "test-variant",
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
},
{
id: expect.any(String),
@@ -701,6 +721,8 @@ describe("/admin/price-lists", () => {
variant_id: "test-variant",
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
},
{
id: expect.any(String),
@@ -712,6 +734,8 @@ describe("/admin/price-lists", () => {
variant_id: "test-variant",
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
},
{
id: expect.any(String),
@@ -723,6 +747,8 @@ describe("/admin/price-lists", () => {
max_quantity: 2000,
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
},
{
id: expect.any(String),
@@ -734,6 +760,8 @@ describe("/admin/price-lists", () => {
max_quantity: 3000,
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
},
{
id: expect.any(String),
@@ -745,6 +773,8 @@ describe("/admin/price-lists", () => {
max_quantity: 4000,
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
},
])
})
@@ -802,6 +832,8 @@ describe("/admin/price-lists", () => {
max_quantity: 2000,
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
},
{
id: expect.any(String),
@@ -813,6 +845,8 @@ describe("/admin/price-lists", () => {
max_quantity: 3000,
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
},
{
id: expect.any(String),
@@ -824,6 +858,8 @@ describe("/admin/price-lists", () => {
max_quantity: 4000,
created_at: expect.any(String),
updated_at: expect.any(String),
variant: expect.any(Object),
variants: expect.any(Array),
},
])
})

View File

@@ -372,10 +372,10 @@ describe("/admin/products", () => {
expect(expectedVariantPrices).toEqual(
expect.arrayContaining([
expect.objectContaining({
id: "test-price4",
id: "test-price_4",
}),
expect.objectContaining({
id: "test-price3",
id: "test-price_3",
}),
])
)
@@ -1665,6 +1665,7 @@ describe("/admin/products", () => {
it("successfully updates a variant's price by changing an existing price (given a region_id)", async () => {
const api = useApi()
const data = {
prices: [
{
@@ -1745,6 +1746,7 @@ describe("/admin/products", () => {
expect.objectContaining({
amount: 100,
currency_code: "usd",
id: "test-price",
}),
expect.objectContaining({
amount: 4500,

View File

@@ -222,14 +222,14 @@ describe("/admin/products [MEDUSA_FF_PRODUCT_CATEGORIES=true]", () => {
})
const manager = dbConnection.manager
categoryWithProduct = await manager.create(ProductCategory, {
categoryWithProduct = manager.create(ProductCategory, {
id: categoryWithProductId,
name: "category with Product",
products: [{ id: testProductId }],
})
await manager.save(categoryWithProduct)
categoryWithoutProduct = await manager.create(ProductCategory, {
categoryWithoutProduct = manager.create(ProductCategory, {
id: categoryWithoutProductId,
name: "category without product",
})

View File

@@ -1,5 +1,7 @@
const path = require("path")
import { ReturnReason, ShippingMethod } from "@medusajs/medusa"
import { createReturnableOrder } from "../claims"
const setupServer = require("../../../environment-helpers/setup-server")
@@ -77,7 +79,7 @@ describe("/admin/returns", () => {
const manager = dbConnection.manager
// add a shipping method so we can fulfill the swap
const sm = await manager.create(ShippingMethod, {
const sm = manager.create(ShippingMethod, {
id: "test-method-swap-cart",
swap_id: sid,
shipping_option_id: "test-option",

View File

@@ -196,28 +196,23 @@ describe("Price list import batch job", () => {
expect(priceListRes.data.price_list.prices).toEqual(
expect.arrayContaining([
expect.objectContaining({
variant_id: "test-pl-variant",
currency_code: "usd",
amount: 1111,
}),
expect.objectContaining({
variant_id: "test-pl-variant",
currency_code: "eur",
region_id: "test-pl-region",
amount: 2222,
}),
expect.objectContaining({
variant_id: "test-pl-variant",
currency_code: "jpy",
amount: 3333,
}),
expect.objectContaining({
variant_id: "test-pl-sku-variant",
currency_code: "usd",
amount: 4444,
}),
expect.objectContaining({
variant_id: "test-pl-sku-variant",
currency_code: "eur",
region_id: "test-pl-region",
amount: 5555,

View File

@@ -86,13 +86,13 @@ describe("Promotions", () => {
expect(variant.prices).toEqual(
expect.arrayContaining([
expect.objectContaining({
id: "test-price1",
id: "test-price-1",
region_id: "test-region",
currency_code: "usd",
amount: 120,
}),
expect.objectContaining({
id: "test-price3",
id: "test-price-3",
region_id: "test-region",
currency_code: "usd",
price_list_id: "pl",
@@ -141,13 +141,13 @@ describe("Promotions", () => {
expect(variant.prices).toEqual(
expect.arrayContaining([
expect.objectContaining({
id: "test-price1",
id: "test-price-1",
region_id: "test-region",
currency_code: "usd",
amount: 120,
}),
expect.objectContaining({
id: "test-price3",
id: "test-price-3",
region_id: "test-region",
currency_code: "usd",
price_list_id: "pl",
@@ -436,13 +436,13 @@ describe("Promotions", () => {
expect(variant.prices).toEqual(
expect.arrayContaining([
expect.objectContaining({
id: "test-price1",
id: "test-price-1",
region_id: "test-region",
currency_code: "usd",
amount: 120,
}),
expect.objectContaining({
id: "test-price3",
id: "test-price-3",
region_id: "test-region",
currency_code: "usd",
price_list_id: "pl",

View File

@@ -804,13 +804,13 @@ describe("tax inclusive prices", () => {
expect(variant.prices).toEqual(
expect.arrayContaining([
expect.objectContaining({
id: "test-price1",
id: "test-price-1",
region_id: "test-region",
currency_code: "usd",
amount: 120,
}),
expect.objectContaining({
id: "test-price3",
id: "test-price-3",
region_id: "test-region",
currency_code: "usd",
price_list_id: "pl",
@@ -859,13 +859,13 @@ describe("tax inclusive prices", () => {
expect(variant.prices).toEqual(
expect.arrayContaining([
expect.objectContaining({
id: "test-price1",
id: "test-price-1",
region_id: "test-region",
currency_code: "usd",
amount: 120,
}),
expect.objectContaining({
id: "test-price3",
id: "test-price-3",
region_id: "test-region",
currency_code: "usd",
price_list_id: "pl",
@@ -1154,13 +1154,13 @@ describe("tax inclusive prices", () => {
expect(variant.prices).toEqual(
expect.arrayContaining([
expect.objectContaining({
id: "test-price1",
id: "test-price-1",
region_id: "test-region",
currency_code: "usd",
amount: 120,
}),
expect.objectContaining({
id: "test-price3",
id: "test-price-3",
region_id: "test-region",
currency_code: "usd",
price_list_id: "pl",

View File

@@ -32,6 +32,7 @@ const {
const {
simpleCustomerGroupFactory,
} = require("../../../../factories/simple-customer-group-factory")
const { ProductVariantMoneyAmount } = require("@medusajs/medusa")
jest.setTimeout(30000)
@@ -144,7 +145,6 @@ describe("/store/carts", () => {
await dbConnection.manager.save(priceList1)
const ma_sale_1 = dbConnection.manager.create(MoneyAmount, {
variant_id: prodSale.variants[0].id,
currency_code: "usd",
amount: 800,
price_list_id: "pl_current",
@@ -152,6 +152,12 @@ describe("/store/carts", () => {
await dbConnection.manager.save(ma_sale_1)
await dbConnection.manager.insert(ProductVariantMoneyAmount, {
id: `${prodSale.variants[0].id}-${ma_sale_1.id}`,
variant_id: prodSale.variants[0].id,
money_amount_id: ma_sale_1.id,
})
const api = useApi()
const response = await api
@@ -2289,7 +2295,7 @@ describe("/store/carts", () => {
await cartSeeder(dbConnection)
const manager = dbConnection.manager
const _cart = await manager.create(Cart, {
const _cart = manager.create(Cart, {
id: "test-cart-with-cso",
customer_id: "some-customer",
email: "some-customer@email.com",