91 lines
2.4 KiB
TypeScript
91 lines
2.4 KiB
TypeScript
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);
|
|
});
|
|
});
|