Fix QA validation issues and add M7.1 security fixes (#318)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed

Co-authored-by: Jason Woltje <jason@diversecanvas.com>
Co-committed-by: Jason Woltje <jason@diversecanvas.com>
This commit was merged in pull request #318.
This commit is contained in:
2026-02-04 03:08:09 +00:00
committed by jason.woltje
parent 482507ce4d
commit a1973e6419
178 changed files with 4902 additions and 74 deletions

View File

@@ -241,6 +241,7 @@ describe("RunnerJobsController", () => {
it("should stream events via SSE", async () => {
const jobId = "job-123";
const workspaceId = "workspace-123";
const lastEventId = undefined;
// Mock response object
const mockRes = {
@@ -270,20 +271,22 @@ describe("RunnerJobsController", () => {
mockRunnerJobsService.streamEvents.mockResolvedValue(mockEvents);
await controller.streamEvents(jobId, workspaceId, mockRes as never);
await controller.streamEvents(jobId, workspaceId, lastEventId, mockRes as never);
// Verify headers are set
expect(mockRes.setHeader).toHaveBeenCalledWith("Content-Type", "text/event-stream");
expect(mockRes.setHeader).toHaveBeenCalledWith("Cache-Control", "no-cache");
expect(mockRes.setHeader).toHaveBeenCalledWith("Connection", "keep-alive");
expect(mockRes.setHeader).toHaveBeenCalledWith("X-Accel-Buffering", "no");
// Verify service was called
expect(service.streamEvents).toHaveBeenCalledWith(jobId, workspaceId, mockRes);
expect(service.streamEvents).toHaveBeenCalledWith(jobId, workspaceId, mockRes, lastEventId);
});
it("should handle errors during streaming", async () => {
const jobId = "job-123";
const workspaceId = "workspace-123";
const lastEventId = undefined;
const mockRes = {
setHeader: vi.fn(),
@@ -294,11 +297,33 @@ describe("RunnerJobsController", () => {
const error = new Error("Job not found");
mockRunnerJobsService.streamEvents.mockRejectedValue(error);
await controller.streamEvents(jobId, workspaceId, mockRes as never);
await controller.streamEvents(jobId, workspaceId, lastEventId, mockRes as never);
// Verify error is written to stream
expect(mockRes.write).toHaveBeenCalledWith(expect.stringContaining("Job not found"));
expect(mockRes.write).toHaveBeenCalledWith("event: error\n");
expect(mockRes.write).toHaveBeenCalledWith(
expect.stringContaining('"error":"Job not found"')
);
expect(mockRes.end).toHaveBeenCalled();
});
it("should support reconnection with Last-Event-ID header", async () => {
const jobId = "job-123";
const workspaceId = "workspace-123";
const lastEventId = "event-5";
const mockRes = {
setHeader: vi.fn(),
write: vi.fn(),
end: vi.fn(),
};
mockRunnerJobsService.streamEvents.mockResolvedValue([]);
await controller.streamEvents(jobId, workspaceId, lastEventId, mockRes as never);
// Verify service was called with lastEventId for reconnection
expect(service.streamEvents).toHaveBeenCalledWith(jobId, workspaceId, mockRes, lastEventId);
});
});
});