Feat(medusa) - delete cascade modules associations (#3190)
* delete cascade sales channel x locations, variant x inventory item
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
const path = require("path")
|
||||
|
||||
const { bootstrapApp } = require("../../../helpers/bootstrap-app")
|
||||
const { initDb, useDb } = require("../../../helpers/use-db")
|
||||
const { setPort, useApi } = require("../../../helpers/use-api")
|
||||
|
||||
const adminSeeder = require("../../helpers/admin-seeder")
|
||||
|
||||
jest.setTimeout(30000)
|
||||
|
||||
describe("Sales channels", () => {
|
||||
let appContainer
|
||||
let dbConnection
|
||||
let express
|
||||
|
||||
beforeAll(async () => {
|
||||
const cwd = path.resolve(path.join(__dirname, "..", ".."))
|
||||
dbConnection = await initDb({ cwd })
|
||||
const { container, app, port } = await bootstrapApp({ cwd })
|
||||
appContainer = container
|
||||
|
||||
setPort(port)
|
||||
express = app.listen(port, (err) => {
|
||||
process.send(port)
|
||||
})
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
const db = useDb()
|
||||
await db.shutdown()
|
||||
express.close()
|
||||
})
|
||||
|
||||
afterEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
const db = useDb()
|
||||
return await db.teardown()
|
||||
})
|
||||
|
||||
describe("Stock Locations", () => {
|
||||
it("When deleting a sales channel, removes all associated locations with it", async () => {
|
||||
await adminSeeder(dbConnection)
|
||||
const api = useApi()
|
||||
|
||||
const stockLocationService = appContainer.resolve("stockLocationService")
|
||||
const salesChannelService = appContainer.resolve("salesChannelService")
|
||||
const salesChannelLocationService = appContainer.resolve(
|
||||
"salesChannelLocationService"
|
||||
)
|
||||
|
||||
const loc = await stockLocationService.create({
|
||||
name: "warehouse",
|
||||
})
|
||||
const loc2 = await stockLocationService.create({
|
||||
name: "other place",
|
||||
})
|
||||
|
||||
const sc = await salesChannelService.create({ name: "channel test" })
|
||||
|
||||
await salesChannelLocationService.associateLocation(sc.id, loc.id)
|
||||
await salesChannelLocationService.associateLocation(sc.id, loc2.id)
|
||||
|
||||
expect(await salesChannelService.retrieve(sc.id)).toEqual(
|
||||
expect.objectContaining({
|
||||
id: sc.id,
|
||||
name: "channel test",
|
||||
})
|
||||
)
|
||||
|
||||
expect(
|
||||
await salesChannelLocationService.listLocations(sc.id)
|
||||
).toHaveLength(2)
|
||||
|
||||
await api.delete(`/admin/sales-channels/${sc.id}`, {
|
||||
headers: { Authorization: "Bearer test_token" },
|
||||
})
|
||||
|
||||
await expect(salesChannelService.retrieve(sc.id)).rejects.toThrowError()
|
||||
|
||||
await expect(
|
||||
salesChannelLocationService.listLocations(sc.id)
|
||||
).rejects.toThrowError()
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,93 @@
|
||||
const path = require("path")
|
||||
|
||||
const { bootstrapApp } = require("../../../helpers/bootstrap-app")
|
||||
const { initDb, useDb } = require("../../../helpers/use-db")
|
||||
const { setPort, useApi } = require("../../../helpers/use-api")
|
||||
|
||||
const adminSeeder = require("../../helpers/admin-seeder")
|
||||
|
||||
jest.setTimeout(30000)
|
||||
|
||||
describe("Sales channels", () => {
|
||||
let appContainer
|
||||
let dbConnection
|
||||
let express
|
||||
|
||||
beforeAll(async () => {
|
||||
const cwd = path.resolve(path.join(__dirname, "..", ".."))
|
||||
dbConnection = await initDb({ cwd })
|
||||
const { container, app, port } = await bootstrapApp({ cwd })
|
||||
appContainer = container
|
||||
|
||||
setPort(port)
|
||||
express = app.listen(port, (err) => {
|
||||
process.send(port)
|
||||
})
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
const db = useDb()
|
||||
await db.shutdown()
|
||||
express.close()
|
||||
})
|
||||
|
||||
afterEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
const db = useDb()
|
||||
return await db.teardown()
|
||||
})
|
||||
|
||||
describe("Stock Locations", () => {
|
||||
it("When deleting a stock location, removes all associated sales channels with it", async () => {
|
||||
await adminSeeder(dbConnection)
|
||||
const api = useApi()
|
||||
|
||||
const stockLocationService = appContainer.resolve("stockLocationService")
|
||||
const salesChannelService = appContainer.resolve("salesChannelService")
|
||||
const salesChannelLocationService = appContainer.resolve(
|
||||
"salesChannelLocationService"
|
||||
)
|
||||
|
||||
const loc = await stockLocationService.create({
|
||||
name: "warehouse",
|
||||
})
|
||||
|
||||
const saleChannel = await salesChannelService.create({
|
||||
name: "channel test",
|
||||
})
|
||||
|
||||
const otherChannel = await salesChannelService.create({
|
||||
name: "yet another channel",
|
||||
})
|
||||
|
||||
await salesChannelLocationService.associateLocation(
|
||||
saleChannel.id,
|
||||
loc.id
|
||||
)
|
||||
await salesChannelLocationService.associateLocation(
|
||||
otherChannel.id,
|
||||
loc.id
|
||||
)
|
||||
|
||||
expect(
|
||||
await salesChannelLocationService.listLocations(saleChannel.id)
|
||||
).toHaveLength(1)
|
||||
|
||||
expect(
|
||||
await salesChannelLocationService.listLocations(otherChannel.id)
|
||||
).toHaveLength(1)
|
||||
|
||||
await api.delete(`/admin/stock-locations/${loc.id}`, {
|
||||
headers: { Authorization: "Bearer test_token" },
|
||||
})
|
||||
|
||||
expect(
|
||||
await salesChannelLocationService.listLocations(saleChannel.id)
|
||||
).toHaveLength(0)
|
||||
|
||||
expect(
|
||||
await salesChannelLocationService.listLocations(otherChannel.id)
|
||||
).toHaveLength(0)
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,94 @@
|
||||
const path = require("path")
|
||||
|
||||
const { bootstrapApp } = require("../../../helpers/bootstrap-app")
|
||||
const { initDb, useDb } = require("../../../helpers/use-db")
|
||||
const { setPort, useApi } = require("../../../helpers/use-api")
|
||||
|
||||
const adminSeeder = require("../../helpers/admin-seeder")
|
||||
|
||||
jest.setTimeout(30000)
|
||||
|
||||
describe("Sales channels", () => {
|
||||
let appContainer
|
||||
let dbConnection
|
||||
let express
|
||||
|
||||
beforeAll(async () => {
|
||||
const cwd = path.resolve(path.join(__dirname, "..", ".."))
|
||||
dbConnection = await initDb({ cwd })
|
||||
const { container, app, port } = await bootstrapApp({ cwd })
|
||||
appContainer = container
|
||||
|
||||
setPort(port)
|
||||
express = app.listen(port, (err) => {
|
||||
process.send(port)
|
||||
})
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
const db = useDb()
|
||||
await db.shutdown()
|
||||
express.close()
|
||||
})
|
||||
|
||||
afterEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
const db = useDb()
|
||||
return await db.teardown()
|
||||
})
|
||||
|
||||
describe("Stock Locations", () => {
|
||||
it("When listing a sales channel, it brings all associated locations with it", async () => {
|
||||
await adminSeeder(dbConnection)
|
||||
|
||||
const stockLocationService = appContainer.resolve("stockLocationService")
|
||||
const salesChannelService = appContainer.resolve("salesChannelService")
|
||||
const salesChannelLocationService = appContainer.resolve(
|
||||
"salesChannelLocationService"
|
||||
)
|
||||
|
||||
const loc = await stockLocationService.create({
|
||||
name: "warehouse",
|
||||
})
|
||||
const loc2 = await stockLocationService.create({
|
||||
name: "other place",
|
||||
})
|
||||
|
||||
const sc = await salesChannelService.create({ name: "channel test" })
|
||||
|
||||
await salesChannelLocationService.associateLocation(sc.id, loc.id)
|
||||
await salesChannelLocationService.associateLocation(sc.id, loc2.id)
|
||||
|
||||
expect(
|
||||
await salesChannelLocationService.listLocations(sc.id)
|
||||
).toHaveLength(2)
|
||||
|
||||
const [channels] = await salesChannelService.listAndCount(
|
||||
{},
|
||||
{
|
||||
relations: ["locations"],
|
||||
}
|
||||
)
|
||||
const createdSC = channels.find((c) => c.id === sc.id)
|
||||
|
||||
expect(channels).toHaveLength(2)
|
||||
expect(createdSC.locations).toHaveLength(2)
|
||||
expect(createdSC).toEqual(
|
||||
expect.objectContaining({
|
||||
id: sc.id,
|
||||
name: "channel test",
|
||||
locations: expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
sales_channel_id: sc.id,
|
||||
location_id: loc.id,
|
||||
}),
|
||||
expect.objectContaining({
|
||||
sales_channel_id: sc.id,
|
||||
location_id: loc2.id,
|
||||
}),
|
||||
]),
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user