feat: Ensure async workflow executions have access to shared container (#8157)

* feat: Ensure async workflow executions have access to shared container

* fix: Register workflow worker on application start
This commit is contained in:
Stevche Radevski
2024-07-17 12:17:48 +02:00
committed by GitHub
parent 1acfdc4ffe
commit 26d600b6db
15 changed files with 140 additions and 38 deletions

View File

@@ -6,8 +6,10 @@ import {
} from "@medusajs/workflows-sdk"
export const createScheduled = (name: string, schedule?: SchedulerOptions) => {
const workflowScheduledStepInvoke = jest.fn((input, context) => {
return new StepResponse({})
const workflowScheduledStepInvoke = jest.fn((input, { container }) => {
return new StepResponse({
testValue: container.resolve("test-value"),
})
})
const step = createStep("step_1", workflowScheduledStepInvoke)

View File

@@ -17,7 +17,7 @@ import {
TransactionHandlerType,
TransactionStepState,
} from "@medusajs/utils"
import { asValue } from "awilix"
import { asFunction, asValue } from "awilix"
import { knex } from "knex"
import { setTimeout } from "timers/promises"
import "../__fixtures__"
@@ -54,6 +54,7 @@ describe("Workflow Orchestrator module", function () {
query: remoteQuery,
modules,
sharedContainer,
onApplicationStart,
} = await MedusaApp({
sharedContainer: container,
sharedResourcesConfig: {
@@ -73,6 +74,8 @@ describe("Workflow Orchestrator module", function () {
},
})
await onApplicationStart()
query = remoteQuery
sharedContainer_ = sharedContainer!
@@ -381,5 +384,21 @@ describe("Workflow Orchestrator module", function () {
"Tried to execute a scheduled workflow with ID remove-scheduled that does not exist, removing it from the scheduler."
)
})
it("the scheduled workflow should have access to the shared container", async () => {
sharedContainer_.register(
"test-value",
asFunction(() => "test")
)
const spy = await createScheduled("remove-scheduled", {
cron: "* * * * * *",
})
await setTimeout(1100)
expect(spy).toHaveBeenCalledTimes(1)
expect(spy).toHaveReturnedWith(
expect.objectContaining({ output: { testValue: "test" } })
)
})
})
})