mirror of
https://github.com/Kilo-Org/kilocode.git
synced 2026-09-21 05:52:35 +08:00
test(cli): remove runtime-coupled permission setup
This commit is contained in:
@@ -1,10 +1,6 @@
|
||||
import { afterEach, describe, expect, test } from "bun:test"
|
||||
import { Flag } from "@opencode-ai/core/flag/flag"
|
||||
import { AppRuntime } from "../../../src/effect/app-runtime"
|
||||
import { Permission } from "../../../src/permission"
|
||||
import { PermissionID } from "../../../src/permission/schema"
|
||||
import { WithInstance } from "../../../src/project/with-instance"
|
||||
import { Session } from "../../../src/session/session"
|
||||
import { tmpdir } from "../../fixture/fixture"
|
||||
|
||||
const original = Flag.KILO_EXPERIMENTAL_HTTPAPI
|
||||
@@ -19,10 +15,6 @@ async function app(experimental = false) {
|
||||
return experimental ? Server.Default().app : Server.Legacy().app
|
||||
}
|
||||
|
||||
const ask = (input: Permission.AskInput) => AppRuntime.runPromise(Permission.Service.use((svc) => svc.ask(input)))
|
||||
const reply = (input: Permission.ReplyInput) => AppRuntime.runPromise(Permission.Service.use((svc) => svc.reply(input)))
|
||||
const requests = () => AppRuntime.runPromise(Permission.Service.use((svc) => svc.list()))
|
||||
|
||||
describe("POST /permission/:requestID/reply", () => {
|
||||
test("returns 404 when requestID is not pending", async () => {
|
||||
await using tmp = await tmpdir({ git: true })
|
||||
@@ -46,87 +38,6 @@ describe("POST /permission/:requestID/reply", () => {
|
||||
})
|
||||
})
|
||||
|
||||
test("returns 200 for an accepted reply", async () => {
|
||||
await using tmp = await tmpdir({ git: true })
|
||||
|
||||
await WithInstance.provide({
|
||||
directory: tmp.path,
|
||||
fn: async () => {
|
||||
const server = await app()
|
||||
const session = await Session.create({})
|
||||
|
||||
const asking = ask({
|
||||
id: PermissionID.make("permission_accepted_http"),
|
||||
sessionID: session.id,
|
||||
permission: "bash",
|
||||
patterns: ["ls"],
|
||||
metadata: {},
|
||||
always: [],
|
||||
ruleset: [],
|
||||
})
|
||||
|
||||
for (let i = 0; i < 100; i++) {
|
||||
const list = await requests()
|
||||
if (list.length > 0) break
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
}
|
||||
|
||||
const response = await server.request("/permission/permission_accepted_http/reply", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json", "x-kilo-directory": tmp.path },
|
||||
body: JSON.stringify({ reply: "once" }),
|
||||
})
|
||||
expect(response.status).toBe(200)
|
||||
expect(await response.json()).toBe(true)
|
||||
|
||||
await asking
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
test("returns 404 when replying to an already-answered request (double-reply)", async () => {
|
||||
await using tmp = await tmpdir({ git: true })
|
||||
|
||||
await WithInstance.provide({
|
||||
directory: tmp.path,
|
||||
fn: async () => {
|
||||
const server = await app()
|
||||
const session = await Session.create({})
|
||||
|
||||
const asking = ask({
|
||||
id: PermissionID.make("permission_double_http"),
|
||||
sessionID: session.id,
|
||||
permission: "bash",
|
||||
patterns: ["pwd"],
|
||||
metadata: {},
|
||||
always: [],
|
||||
ruleset: [],
|
||||
})
|
||||
|
||||
for (let i = 0; i < 100; i++) {
|
||||
const list = await requests()
|
||||
if (list.length > 0) break
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
}
|
||||
|
||||
const first = await server.request("/permission/permission_double_http/reply", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json", "x-kilo-directory": tmp.path },
|
||||
body: JSON.stringify({ reply: "once" }),
|
||||
})
|
||||
expect(first.status).toBe(200)
|
||||
await asking
|
||||
|
||||
const second = await server.request("/permission/permission_double_http/reply", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json", "x-kilo-directory": tmp.path },
|
||||
body: JSON.stringify({ reply: "once" }),
|
||||
})
|
||||
expect(second.status).toBe(404)
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
test("returns 404 for unknown replies when experimental HttpApi is enabled", async () => {
|
||||
await using tmp = await tmpdir({ git: true })
|
||||
|
||||
@@ -168,46 +79,4 @@ describe("POST /permission/:requestID/always-rules", () => {
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
test("returns 200 for an accepted save", async () => {
|
||||
await using tmp = await tmpdir({ git: true })
|
||||
|
||||
await WithInstance.provide({
|
||||
directory: tmp.path,
|
||||
fn: async () => {
|
||||
const server = await app()
|
||||
const session = await Session.create({})
|
||||
|
||||
const asking = ask({
|
||||
id: PermissionID.make("permission_always_http"),
|
||||
sessionID: session.id,
|
||||
permission: "bash",
|
||||
patterns: ["npm install"],
|
||||
metadata: { rules: ["npm *", "npm install"] },
|
||||
always: ["npm install *"],
|
||||
ruleset: [],
|
||||
})
|
||||
|
||||
for (let i = 0; i < 100; i++) {
|
||||
const list = await requests()
|
||||
if (list.length > 0) break
|
||||
await new Promise((resolve) => setTimeout(resolve, 10))
|
||||
}
|
||||
|
||||
const save = await server.request("/permission/permission_always_http/always-rules", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json", "x-kilo-directory": tmp.path },
|
||||
body: JSON.stringify({ approvedAlways: ["npm install"] }),
|
||||
})
|
||||
expect(save.status).toBe(200)
|
||||
expect(await save.json()).toBe(true)
|
||||
|
||||
await reply({
|
||||
requestID: PermissionID.make("permission_always_http"),
|
||||
reply: "once",
|
||||
})
|
||||
await asking
|
||||
},
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user