feat(GRO-106): inbound Telnyx webhook + persistence #378

Merged
groombook-engineer[bot] merged 11 commits from feat/GRO-106-inbound-webhook into dev 2026-05-11 00:43:40 +00:00
Showing only changes of commit 3746c098b5 - Show all commits
@@ -221,18 +221,8 @@ describe("handleMessageReceived", () => {
}); });
it("creates conversation and message for valid inbound", async () => { it("creates conversation and message for valid inbound", async () => {
const businessLookup = { mockDb.select
from: vi.fn().mockReturnValue({ .mockReturnValueOnce({
where: vi.fn().mockReturnValue({
limit: vi.fn().mockReturnValue([{ id: "biz-1" }]),
}),
}),
};
let selectCallCount = 0;
mockDb.select.mockImplementation(() => {
selectCallCount++;
if (selectCallCount === 1) return businessLookup;
return {
from: vi.fn().mockReturnValue({ from: vi.fn().mockReturnValue({
where: vi.fn().mockReturnValue({ where: vi.fn().mockReturnValue({
limit: vi.fn().mockReturnValue([{ id: "biz-1" }]), limit: vi.fn().mockReturnValue([{ id: "biz-1" }]),
@@ -245,18 +235,18 @@ describe("handleMessageReceived", () => {
limit: vi.fn().mockReturnValue([]), limit: vi.fn().mockReturnValue([]),
}), }),
}), }),
}; });
}); mockDb.insert
mockDb.insert.mockReturnValueOnce({ .mockReturnValueOnce({
values: vi.fn().mockReturnValue({ values: vi.fn().mockReturnValue({
returning: vi.fn().mockReturnValue([{ id: "client-new" }]), returning: vi.fn().mockReturnValue([{ id: "client-new" }]),
}), }),
}); })
mockDb.insert.mockReturnValueOnce({ .mockReturnValueOnce({
values: vi.fn().mockReturnValue({ values: vi.fn().mockReturnValue({
returning: vi.fn().mockReturnValue([{ id: "conv-new", clientId: "client-new" }]), returning: vi.fn().mockReturnValue([{ id: "conv-new", clientId: "client-new" }]),
}), }),
}); });
mockDb.update.mockReturnValueOnce({ mockDb.update.mockReturnValueOnce({
set: vi.fn().mockReturnValue({ set: vi.fn().mockReturnValue({
where: vi.fn().mockReturnValue({}), where: vi.fn().mockReturnValue({}),