Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

extensions/continuity/__tests__/harness.test.ts

Raw
import path from "node:path";
import { afterEach, describe, expect, it, vi } from "vitest";
import { createTestSession, type TestSession } from "../../../test/harness";

describe("continuity pi-test-harness", () => {
	let t: TestSession | undefined;

	afterEach(() => {
		t?.dispose();
		t = undefined;
	});

	it("loads through the real Pi extension runtime", async () => {
		const extensionPath = path.resolve(import.meta.dirname, "../index.ts");
		t = await createTestSession({ extensions: [extensionPath] });

		expect(t.session.extensionRunner.extensions).toHaveLength(1);
		expect(t.session.extensionRunner.extensions[0].path).toBe(extensionPath);
	});

	it("dispatches a hidden follow-up through the real Pi binding", async () => {
		const extensionPath = path.resolve(import.meta.dirname, "../index.ts");
		t = await createTestSession({ extensions: [extensionPath] });
		const send = vi
			.spyOn(t.session, "sendCustomMessage")
			.mockResolvedValue(undefined);

		await t.session.extensionRunner.emit({
			type: "session_compact",
			compactionEntry: { id: "compact-real" },
			fromExtension: false,
			reason: "manual",
			willRetry: false,
		});
		await new Promise((resolve) => setTimeout(resolve, 10));

		expect(send).toHaveBeenCalledOnce();
		expect(send).toHaveBeenCalledWith(
			expect.objectContaining({
				customType: "continuity-resume",
				display: false,
			}),
			{ triggerTurn: true, deliverAs: "followUp" },
		);
	});
});