t3-code-android-nightly/.repos/effect-smol/packages/effect/test/http/Template.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

38 lines
1.5 KiB
TypeScript

import { assert, describe, it } from "@effect/vitest"
import { Deferred, Effect, Fiber, Stream } from "effect"
import { Template } from "effect/http"
import { TestClock } from "effect/testing"
describe("Template", () => {
it.effect("preserves template segment order", () =>
Effect.gen(function*() {
const fiber = yield* Stream.runCollect(
Template.stream`a${Effect.delay(Effect.succeed("slow"), "1 second")}b${"fast"}c`
).pipe(Effect.forkChild)
yield* Effect.yieldNow
yield* TestClock.adjust("1 second")
const chunks = yield* Fiber.join(fiber)
assert.strictEqual(chunks.join(""), "aslowbfastc")
}))
it.effect("evaluates effect interpolations concurrently", () =>
Effect.gen(function*() {
const firstStarted = yield* Deferred.make<void>()
const secondStarted = yield* Deferred.make<void>()
const releaseFirst = yield* Deferred.make<void>()
const fiber = yield* Template.stream`${
Deferred.succeed(firstStarted, void 0).pipe(
Effect.andThen(Deferred.await(releaseFirst)),
Effect.as("first")
)
}${Deferred.succeed(secondStarted, void 0).pipe(Effect.as("second"))}`.pipe(
Stream.runCollect,
Effect.forkChild
)
yield* Deferred.await(firstStarted)
yield* Effect.yieldNow
assert.isTrue(yield* Deferred.isDone(secondStarted))
yield* Deferred.succeed(releaseFirst, void 0)
assert.deepStrictEqual(yield* Fiber.join(fiber), ["first", "second"])
}))
})