chore: generate
This commit is contained in:
@@ -196,8 +196,8 @@ type RecordReplayOptions = {
|
|||||||
|
|
||||||
## Layout
|
## Layout
|
||||||
|
|
||||||
| File | Purpose |
|
| File | Purpose |
|
||||||
| -------------- | -------------------------------------------------------------------------------- |
|
| -------------- | --------------------------------------------------------------------------- |
|
||||||
| `effect.ts` | `cassetteLayer` / `recordingLayer` — the `HttpClient` adapter. |
|
| `effect.ts` | `cassetteLayer` / `recordingLayer` — the `HttpClient` adapter. |
|
||||||
| `websocket.ts` | `makeWebSocketExecutor` — WebSocket record/replay. |
|
| `websocket.ts` | `makeWebSocketExecutor` — WebSocket record/replay. |
|
||||||
| `cassette.ts` | `Cassette.Service` — `fileSystem` / `memory` adapters, error types. |
|
| `cassette.ts` | `Cassette.Service` — `fileSystem` / `memory` adapters, error types. |
|
||||||
|
|||||||
@@ -120,7 +120,12 @@ export const fileSystem = (
|
|||||||
Effect.map((files) =>
|
Effect.map((files) =>
|
||||||
files
|
files
|
||||||
.filter((file) => file.endsWith(".json"))
|
.filter((file) => file.endsWith(".json"))
|
||||||
.map((file) => path.relative(directory, file).replace(/\\/g, "/").replace(/\.json$/, ""))
|
.map((file) =>
|
||||||
|
path
|
||||||
|
.relative(directory, file)
|
||||||
|
.replace(/\\/g, "/")
|
||||||
|
.replace(/\.json$/, ""),
|
||||||
|
)
|
||||||
.toSorted((a, b) => a.localeCompare(b)),
|
.toSorted((a, b) => a.localeCompare(b)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -102,7 +102,9 @@ export const recordingLayer = (
|
|||||||
}
|
}
|
||||||
yield* cassetteService
|
yield* cassetteService
|
||||||
.append(name, interaction, options.metadata)
|
.append(name, interaction, options.metadata)
|
||||||
.pipe(Effect.catchTag("UnsafeCassetteError", (error) => Effect.fail(transportError(request, error.message))))
|
.pipe(
|
||||||
|
Effect.catchTag("UnsafeCassetteError", (error) => Effect.fail(transportError(request, error.message))),
|
||||||
|
)
|
||||||
return HttpClientResponse.fromWeb(
|
return HttpClientResponse.fromWeb(
|
||||||
request,
|
request,
|
||||||
new Response(decodeResponseBody(interaction.response), interaction.response),
|
new Response(decodeResponseBody(interaction.response), interaction.response),
|
||||||
|
|||||||
@@ -326,7 +326,10 @@ describe("http-recorder", () => {
|
|||||||
|
|
||||||
test("auto mode records to disk when the cassette is missing", async () => {
|
test("auto mode records to disk when the cassette is missing", async () => {
|
||||||
const directory = fs.mkdtempSync(path.join(os.tmpdir(), "http-recorder-auto-record-"))
|
const directory = fs.mkdtempSync(path.join(os.tmpdir(), "http-recorder-auto-record-"))
|
||||||
using server = Bun.serve({ port: 0, fetch: () => new Response('{"reply":"recorded"}', { headers: { "content-type": "application/json" } }) })
|
using server = Bun.serve({
|
||||||
|
port: 0,
|
||||||
|
fetch: () => new Response('{"reply":"recorded"}', { headers: { "content-type": "application/json" } }),
|
||||||
|
})
|
||||||
const url = `http://127.0.0.1:${server.port}/echo`
|
const url = `http://127.0.0.1:${server.port}/echo`
|
||||||
// CI=true forces replay; clear it so we exercise the local-dev auto-record path.
|
// CI=true forces replay; clear it so we exercise the local-dev auto-record path.
|
||||||
const previous = process.env.CI
|
const previous = process.env.CI
|
||||||
@@ -370,10 +373,18 @@ describe("http-recorder", () => {
|
|||||||
test("Cassette.list enumerates recorded cassette names", async () => {
|
test("Cassette.list enumerates recorded cassette names", async () => {
|
||||||
const directory = fs.mkdtempSync(path.join(os.tmpdir(), "http-recorder-list-"))
|
const directory = fs.mkdtempSync(path.join(os.tmpdir(), "http-recorder-list-"))
|
||||||
await seedCassetteDirectory(directory, "alpha/one", [
|
await seedCassetteDirectory(directory, "alpha/one", [
|
||||||
{ transport: "http", request: { method: "GET", url: "https://x.test/a", headers: {}, body: "" }, response: { status: 200, headers: {}, body: "a" } },
|
{
|
||||||
|
transport: "http",
|
||||||
|
request: { method: "GET", url: "https://x.test/a", headers: {}, body: "" },
|
||||||
|
response: { status: 200, headers: {}, body: "a" },
|
||||||
|
},
|
||||||
])
|
])
|
||||||
await seedCassetteDirectory(directory, "beta", [
|
await seedCassetteDirectory(directory, "beta", [
|
||||||
{ transport: "http", request: { method: "GET", url: "https://x.test/b", headers: {}, body: "" }, response: { status: 200, headers: {}, body: "b" } },
|
{
|
||||||
|
transport: "http",
|
||||||
|
request: { method: "GET", url: "https://x.test/b", headers: {}, body: "" },
|
||||||
|
response: { status: 200, headers: {}, body: "b" },
|
||||||
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
const names = await Effect.runPromise(
|
const names = await Effect.runPromise(
|
||||||
@@ -415,7 +426,9 @@ describe("http-recorder", () => {
|
|||||||
transport: "websocket",
|
transport: "websocket",
|
||||||
open: { url: "wss://example.test/binary", headers: {} },
|
open: { url: "wss://example.test/binary", headers: {} },
|
||||||
client: [],
|
client: [],
|
||||||
server: [{ kind: "binary", body: Buffer.from(binaryServer).toString("base64"), bodyEncoding: "base64" }],
|
server: [
|
||||||
|
{ kind: "binary", body: Buffer.from(binaryServer).toString("base64"), bodyEncoding: "base64" },
|
||||||
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}),
|
}),
|
||||||
|
|||||||
Reference in New Issue
Block a user