t3-code-android-nightly/.repos/effect-smol/packages/effect/test/workflow/Workflow.test.ts
Julius Marminge 6f9cea00ae
chore(refs): sync Effect and Alchemy references to 4.0.1 and beta.80 (#16170)
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-05 13:22:30 -07:00

40 lines
1.6 KiB
TypeScript

import { assert, describe, it } from "@effect/vitest"
import { Effect, Exit, Fiber, Scheduler } from "effect"
import { Workflow } from "effect/workflow"
import { WorkflowInstance } from "effect/workflow/WorkflowEngine"
describe("Workflow.wrapActivityResult", () => {
it.effect("releases acquisition interrupted before the body starts", () =>
Effect.gen(function*() {
const workflow = Workflow.make("ActivityInterruption", {
payload: {},
idempotencyKey: () => "activity-interruption"
})
const instance = WorkflowInstance.initial(workflow, "acquisition")
const scheduler = new class extends Scheduler.MixedScheduler {
yielded = false
override shouldYield(fiber: Fiber.Fiber<unknown, unknown>): boolean {
if (this.yielded || instance.activityState.count !== 1) return super.shouldYield(fiber)
this.yielded = true
return true
}
}()
let entered = false
const fiber = yield* Workflow.wrapActivityResult(
Effect.sync(() => {
entered = true
}),
() => false
).pipe(
Effect.provideService(WorkflowInstance, instance),
Effect.provideService(Scheduler.Scheduler, scheduler),
Effect.forkChild({ startImmediately: true })
)
assert.isTrue(scheduler.yielded)
yield* Fiber.interrupt(fiber)
assert.isTrue(Exit.hasInterrupts(yield* Fiber.await(fiber)))
assert.isFalse(entered)
assert.strictEqual(instance.activityState.count, 0)
yield* instance.activityState.latch.await
}))
})