Spaces:
Paused
Paused
| import { beforeEach, describe, expect, it, vi } from "vitest"; | |
| import { companyService } from "../services/companies.ts"; | |
| import { agentService } from "../services/agents.ts"; | |
| function createSelectSequenceDb(results: unknown[]) { | |
| const pending = [...results]; | |
| const chain = { | |
| from: vi.fn(() => chain), | |
| where: vi.fn(() => chain), | |
| leftJoin: vi.fn(() => chain), | |
| groupBy: vi.fn(() => chain), | |
| then: vi.fn((resolve: (value: unknown[]) => unknown) => Promise.resolve(resolve(pending.shift() ?? []))), | |
| }; | |
| return { | |
| db: { | |
| select: vi.fn(() => chain), | |
| }, | |
| }; | |
| } | |
| describe("monthly spend hydration", () => { | |
| beforeEach(() => { | |
| vi.clearAllMocks(); | |
| }); | |
| it("recomputes company spentMonthlyCents from the current utc month instead of returning stale stored values", async () => { | |
| const dbStub = createSelectSequenceDb([ | |
| [{ | |
| id: "company-1", | |
| name: "Paperclip", | |
| description: null, | |
| status: "active", | |
| issuePrefix: "PAP", | |
| issueCounter: 1, | |
| budgetMonthlyCents: 5000, | |
| spentMonthlyCents: 999999, | |
| requireBoardApprovalForNewAgents: false, | |
| brandColor: null, | |
| logoAssetId: null, | |
| createdAt: new Date(), | |
| updatedAt: new Date(), | |
| }], | |
| [{ | |
| companyId: "company-1", | |
| spentMonthlyCents: 420, | |
| }], | |
| ]); | |
| const companies = companyService(dbStub.db as any); | |
| const [company] = await companies.list(); | |
| expect(company.spentMonthlyCents).toBe(420); | |
| }); | |
| it("recomputes agent spentMonthlyCents from the current utc month instead of returning stale stored values", async () => { | |
| const dbStub = createSelectSequenceDb([ | |
| [{ | |
| id: "agent-1", | |
| companyId: "company-1", | |
| name: "Budget Agent", | |
| role: "general", | |
| title: null, | |
| reportsTo: null, | |
| capabilities: null, | |
| adapterType: "claude-local", | |
| adapterConfig: {}, | |
| runtimeConfig: {}, | |
| budgetMonthlyCents: 5000, | |
| spentMonthlyCents: 999999, | |
| metadata: null, | |
| permissions: null, | |
| status: "idle", | |
| pauseReason: null, | |
| pausedAt: null, | |
| createdAt: new Date(), | |
| updatedAt: new Date(), | |
| }], | |
| [{ | |
| agentId: "agent-1", | |
| spentMonthlyCents: 175, | |
| }], | |
| ]); | |
| const agents = agentService(dbStub.db as any); | |
| const agent = await agents.getById("agent-1"); | |
| expect(agent?.spentMonthlyCents).toBe(175); | |
| }); | |
| }); | |