mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-18 19:50:38 +09:00
fix: harden heartbeat and adapter runtime workflows
This commit is contained in:
parent
548721248e
commit
c566a9236c
48 changed files with 14922 additions and 600 deletions
|
|
@ -1,8 +1,6 @@
|
|||
import express from "express";
|
||||
import request from "supertest";
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { approvalRoutes } from "../routes/approvals.js";
|
||||
import { errorHandler } from "../middleware/index.js";
|
||||
|
||||
const mockApprovalService = vi.hoisted(() => ({
|
||||
list: vi.fn(),
|
||||
|
|
@ -39,7 +37,11 @@ vi.mock("../services/index.js", () => ({
|
|||
secretService: () => mockSecretService,
|
||||
}));
|
||||
|
||||
function createApp(actorOverrides: Record<string, unknown> = {}) {
|
||||
async function createApp(actorOverrides: Record<string, unknown> = {}) {
|
||||
const [{ approvalRoutes }, { errorHandler }] = await Promise.all([
|
||||
import("../routes/approvals.js"),
|
||||
import("../middleware/index.js"),
|
||||
]);
|
||||
const app = express();
|
||||
app.use(express.json());
|
||||
app.use((req, _res, next) => {
|
||||
|
|
@ -58,7 +60,11 @@ function createApp(actorOverrides: Record<string, unknown> = {}) {
|
|||
return app;
|
||||
}
|
||||
|
||||
function createAgentApp() {
|
||||
async function createAgentApp() {
|
||||
const [{ approvalRoutes }, { errorHandler }] = await Promise.all([
|
||||
import("../routes/approvals.js"),
|
||||
import("../middleware/index.js"),
|
||||
]);
|
||||
const app = express();
|
||||
app.use(express.json());
|
||||
app.use((req, _res, next) => {
|
||||
|
|
@ -78,7 +84,8 @@ function createAgentApp() {
|
|||
|
||||
describe("approval routes idempotent retries", () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
vi.resetModules();
|
||||
vi.resetAllMocks();
|
||||
mockHeartbeatService.wakeup.mockResolvedValue({ id: "wake-1" });
|
||||
mockIssueApprovalService.listIssuesForApproval.mockResolvedValue([{ id: "issue-1" }]);
|
||||
mockLogActivity.mockResolvedValue(undefined);
|
||||
|
|
@ -105,7 +112,7 @@ describe("approval routes idempotent retries", () => {
|
|||
applied: false,
|
||||
});
|
||||
|
||||
const res = await request(createApp())
|
||||
const res = await request(await createApp())
|
||||
.post("/api/approvals/approval-1/approve")
|
||||
.send({});
|
||||
|
||||
|
|
@ -134,7 +141,7 @@ describe("approval routes idempotent retries", () => {
|
|||
applied: false,
|
||||
});
|
||||
|
||||
const res = await request(createApp())
|
||||
const res = await request(await createApp())
|
||||
.post("/api/approvals/approval-1/reject")
|
||||
.send({});
|
||||
|
||||
|
|
@ -151,7 +158,7 @@ describe("approval routes idempotent retries", () => {
|
|||
payload: {},
|
||||
});
|
||||
|
||||
const res = await request(createApp())
|
||||
const res = await request(await createApp())
|
||||
.post("/api/approvals/approval-2/approve")
|
||||
.send({});
|
||||
|
||||
|
|
@ -168,7 +175,7 @@ describe("approval routes idempotent retries", () => {
|
|||
payload: {},
|
||||
});
|
||||
|
||||
const res = await request(createApp())
|
||||
const res = await request(await createApp())
|
||||
.post("/api/approvals/approval-3/request-revision")
|
||||
.send({ decisionNote: "Need changes" });
|
||||
|
||||
|
|
@ -192,7 +199,7 @@ describe("approval routes idempotent retries", () => {
|
|||
updatedAt: new Date("2026-04-06T00:00:00.000Z"),
|
||||
});
|
||||
|
||||
const res = await request(createAgentApp())
|
||||
const res = await request(await createAgentApp())
|
||||
.post("/api/companies/company-1/approvals")
|
||||
.send({
|
||||
type: "request_board_approval",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue