|
1 | 1 | import { describe, expect } from "bun:test" |
2 | 2 | import path from "path" |
3 | 3 | import * as fs from "fs/promises" |
| 4 | +import { PermissionV1 } from "@opencode-ai/core/v1/permission" |
4 | 5 | import { LayerNode } from "@opencode-ai/core/effect/layer-node" |
5 | | -import { Cause, Effect, Exit, Layer } from "effect" |
| 6 | +import { Cause, Effect, Exit, Layer, Schema } from "effect" |
6 | 7 | import { ApplyPatchTool } from "../../src/tool/apply_patch" |
7 | 8 | import { LSP } from "@/lsp/lsp" |
8 | 9 | import { FSUtil } from "@opencode-ai/core/fs-util" |
@@ -107,6 +108,25 @@ describe("tool.apply_patch freeform", () => { |
107 | 108 | }), |
108 | 109 | ) |
109 | 110 |
|
| 111 | + it.instance( |
| 112 | + "produces JSON-encodable permission metadata", |
| 113 | + () => |
| 114 | + Effect.gen(function* () { |
| 115 | + const { ctx, calls } = makeCtx() |
| 116 | + yield* execute({ patchText: "*** Begin Patch\n*** Add File: new.txt\n+created\n*** End Patch" }, ctx) |
| 117 | + |
| 118 | + expect(() => { |
| 119 | + const request = Schema.encodeUnknownSync(PermissionV1.Request)({ |
| 120 | + id: PermissionV1.ID.ascending(), |
| 121 | + sessionID: baseCtx.sessionID, |
| 122 | + ...calls[0], |
| 123 | + }) |
| 124 | + Schema.encodeUnknownSync(Schema.Json)(request) |
| 125 | + }).not.toThrow() |
| 126 | + }), |
| 127 | + { git: true }, |
| 128 | + ) |
| 129 | + |
110 | 130 | it.instance( |
111 | 131 | "applies add/update/delete in one patch", |
112 | 132 | () => |
|
0 commit comments