Fix/cascading product variant deletion (#570)

* testing for deletes of variants when a product is deleted

* remove variants with products

* test using direct db query

* formatting

* removed unused imports
This commit is contained in:
Philip Korsholm
2021-10-22 09:20:59 +02:00
committed by GitHub
parent b0226b1975
commit 6b83653bf6
2 changed files with 45 additions and 6 deletions

View File

@@ -6,6 +6,7 @@ const { initDb, useDb } = require("../../../helpers/use-db")
const adminSeeder = require("../../helpers/admin-seeder")
const productSeeder = require("../../helpers/product-seeder")
const { ProductVariant } = require("@medusajs/medusa")
jest.setTimeout(50000)
@@ -105,7 +106,7 @@ describe("/admin/products", () => {
status: "proposed",
}
//update test-product status to proposed
// update test-product status to proposed
await api
.post("/admin/products/test-product", payload, {
headers: {
@@ -423,7 +424,7 @@ describe("/admin/products", () => {
],
variants: [
{
id: "test-variant", //expect.stringMatching(/^test-variant*/),
id: "test-variant", // expect.stringMatching(/^test-variant*/),
created_at: expect.any(String),
updated_at: expect.any(String),
product_id: expect.stringMatching(/^test-*/),
@@ -446,7 +447,7 @@ describe("/admin/products", () => {
],
},
{
id: "test-variant_2", //expect.stringMatching(/^test-variant*/),
id: "test-variant_2", // expect.stringMatching(/^test-variant*/),
created_at: expect.any(String),
updated_at: expect.any(String),
product_id: expect.stringMatching(/^test-*/),
@@ -519,7 +520,7 @@ describe("/admin/products", () => {
options: [],
variants: [
{
id: "test-variant_4", //expect.stringMatching(/^test-variant*/),
id: "test-variant_4", // expect.stringMatching(/^test-variant*/),
created_at: expect.any(String),
updated_at: expect.any(String),
product_id: expect.stringMatching(/^test-*/),
@@ -542,7 +543,7 @@ describe("/admin/products", () => {
],
},
{
id: "test-variant_3", //expect.stringMatching(/^test-variant*/),
id: "test-variant_3", // expect.stringMatching(/^test-variant*/),
created_at: expect.any(String),
updated_at: expect.any(String),
product_id: expect.stringMatching(/^test-*/),
@@ -1074,6 +1075,41 @@ describe("/admin/products", () => {
)
})
it("successfully deletes a product and variants", async () => {
const api = useApi()
const variantPre = await dbConnection.manager.findOne(ProductVariant, {
id: "test-variant",
})
expect(variantPre).not.toEqual(undefined)
const response = await api
.delete("/admin/products/test-product", {
headers: {
Authorization: "Bearer test_token",
},
})
.catch((err) => {
console.log(err)
})
expect(response.status).toEqual(200)
expect(response.data).toEqual(
expect.objectContaining({
id: "test-product",
deleted: true,
})
)
const variant = await dbConnection.manager.findOne(ProductVariant, {
id: "test-variant",
})
expect(variant).toEqual(undefined)
})
it("successfully creates product with soft-deleted product handle and deletes it again", async () => {
const api = useApi()

View File

@@ -468,7 +468,10 @@ class ProductService extends BaseService {
const productRepo = manager.getCustomRepository(this.productRepository_)
// Should not fail, if product does not exist, since delete is idempotent
const product = await productRepo.findOne({ where: { id: productId } })
const product = await productRepo.findOne(
{ id: productId },
{ relations: ["variants"] }
)
if (!product) return Promise.resolve()