Fix QA validation issues and add M7.1 security fixes (#318)
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
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:
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user