feat: align SDK with updated OpenAPI spec and add missing unit tests
- Update generated types from new openapi.yaml (capsule stats, usage, metrics, pause/resume lifecycle, host/channel management, auth flow) - Add Capsule pause/resume/ping/getMetrics lifecycle methods - Add Capsule.waitForReady abort signal support - Add PtyManager.connect and PtySession disposal - Fix HttpClient empty-body response handling (content-length: 0) - Add streamProcess() to CommandManager for background process streams - Add integration tests for capsule lifecycle, git, and PTY features - Add unit tests for AsyncQueue error paths, PtySession.close, Git.checkout without create, Git.add single string, Notebook.execCell error case, and PtyStartOptions fields
This commit is contained in:
@ -9,11 +9,12 @@ describe("PtyManager", () => {
|
||||
});
|
||||
const sent: unknown[] = [];
|
||||
let onMessage: ((message: unknown) => void) | undefined;
|
||||
const close = vi.fn();
|
||||
vi.spyOn(capsule.client.capsules, "ptySession").mockImplementation(
|
||||
async (_id, opts) => {
|
||||
onMessage = opts.onMessage;
|
||||
return {
|
||||
close: vi.fn(),
|
||||
close,
|
||||
get isClosed() {
|
||||
return false;
|
||||
},
|
||||
@ -49,6 +50,9 @@ describe("PtyManager", () => {
|
||||
type: "output",
|
||||
},
|
||||
});
|
||||
|
||||
await session[Symbol.asyncDispose]();
|
||||
expect(close).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
it("connects to an existing PTY tag", async () => {
|
||||
@ -68,4 +72,60 @@ describe("PtyManager", () => {
|
||||
|
||||
expect(sent).toEqual([{ tag: "pty-tag", type: "connect" }]);
|
||||
});
|
||||
|
||||
it("closes the connection when close() is called directly", async () => {
|
||||
const capsule = new Capsule("cap_1", {
|
||||
baseUrl: "https://api.example.com",
|
||||
});
|
||||
const close = vi.fn();
|
||||
vi.spyOn(capsule.client.capsules, "ptySession").mockResolvedValue({
|
||||
close,
|
||||
get isClosed() {
|
||||
return false;
|
||||
},
|
||||
send: vi.fn(),
|
||||
} as never);
|
||||
|
||||
const session = await capsule.pty.start();
|
||||
session.close();
|
||||
|
||||
expect(close).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
it("sends all PtyStartOptions fields in the start message", async () => {
|
||||
const capsule = new Capsule("cap_1", {
|
||||
baseUrl: "https://api.example.com",
|
||||
});
|
||||
const sent: unknown[] = [];
|
||||
vi.spyOn(capsule.client.capsules, "ptySession").mockResolvedValue({
|
||||
close: vi.fn(),
|
||||
get isClosed() {
|
||||
return false;
|
||||
},
|
||||
send: (message: unknown) => sent.push(message),
|
||||
} as never);
|
||||
|
||||
await capsule.pty.start({
|
||||
cmd: "/bin/bash",
|
||||
args: ["--login"],
|
||||
cols: 120,
|
||||
rows: 40,
|
||||
envs: { TERM: "xterm-256color" },
|
||||
cwd: "/home/user",
|
||||
user: "user",
|
||||
});
|
||||
|
||||
expect(sent).toEqual([
|
||||
{
|
||||
type: "start",
|
||||
cmd: "/bin/bash",
|
||||
args: ["--login"],
|
||||
cols: 120,
|
||||
rows: 40,
|
||||
envs: { TERM: "xterm-256color" },
|
||||
cwd: "/home/user",
|
||||
user: "user",
|
||||
},
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user