Skip to content

Commit 2405a19

Browse files
committed
fix(quickbooks): migrate provider operations
1 parent 5b4a0eb commit 2405a19

17 files changed

Lines changed: 595 additions & 538 deletions

apps/sim/lib/internal/quickbooks/execute-tool.test.ts

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,18 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'
66

77
const mocks = vi.hoisted(() => ({
88
addAttachment: vi.fn(),
9+
createBillPayment: vi.fn(),
910
downloadDocument: vi.fn(),
11+
updateBill: vi.fn(),
12+
updateBillPayment: vi.fn(),
13+
updateCreditMemo: vi.fn(),
14+
updateCustomerPayment: vi.fn(),
15+
updateEmployee: vi.fn(),
16+
updateItem: vi.fn(),
17+
updatePurchase: vi.fn(),
18+
updatePurchaseOrder: vi.fn(),
19+
updateVendor: vi.fn(),
20+
updateVendorCredit: vi.fn(),
1021
}))
1122

1223
vi.mock('@/lib/internal/quickbooks/operations', () => ({
@@ -22,6 +33,20 @@ vi.mock('@/lib/internal/quickbooks/operations', () => ({
2233
executeQuickBooksDownloadDocument: mocks.downloadDocument,
2334
}))
2435

36+
vi.mock('@/lib/internal/quickbooks/provider-operations', () => ({
37+
executeQuickBooksCreateBillPaymentOperation: mocks.createBillPayment,
38+
executeQuickBooksUpdateBillOperation: mocks.updateBill,
39+
executeQuickBooksUpdateBillPaymentOperation: mocks.updateBillPayment,
40+
executeQuickBooksUpdateCreditMemoOperation: mocks.updateCreditMemo,
41+
executeQuickBooksUpdateCustomerPaymentOperation: mocks.updateCustomerPayment,
42+
executeQuickBooksUpdateEmployeeOperation: mocks.updateEmployee,
43+
executeQuickBooksUpdateItemOperation: mocks.updateItem,
44+
executeQuickBooksUpdatePurchaseOperation: mocks.updatePurchase,
45+
executeQuickBooksUpdatePurchaseOrderOperation: mocks.updatePurchaseOrder,
46+
executeQuickBooksUpdateVendorCreditOperation: mocks.updateVendorCredit,
47+
executeQuickBooksUpdateVendorOperation: mocks.updateVendor,
48+
}))
49+
2550
import { executeQuickBooksTool } from '@/lib/internal/quickbooks/execute-tool'
2651
import type { InternalToolOperationCall } from '@/lib/internal/tool-operations/types'
2752

@@ -50,6 +75,55 @@ describe('executeQuickBooksTool', () => {
5075
vi.clearAllMocks()
5176
mocks.addAttachment.mockResolvedValue({ attachmentId: 'attachment-1' })
5277
mocks.downloadDocument.mockResolvedValue({ attachmentId: 'attachment-1' })
78+
for (const operation of [
79+
mocks.createBillPayment,
80+
mocks.updateBill,
81+
mocks.updateBillPayment,
82+
mocks.updateCreditMemo,
83+
mocks.updateCustomerPayment,
84+
mocks.updateEmployee,
85+
mocks.updateItem,
86+
mocks.updatePurchase,
87+
mocks.updatePurchaseOrder,
88+
mocks.updateVendor,
89+
mocks.updateVendorCredit,
90+
]) {
91+
operation.mockResolvedValue({ success: true, output: { id: 'entity-1' } })
92+
}
93+
})
94+
95+
it.each([
96+
['quickbooks_create_bill_payment', mocks.createBillPayment],
97+
['quickbooks_update_bill', mocks.updateBill],
98+
['quickbooks_update_bill_payment', mocks.updateBillPayment],
99+
['quickbooks_update_credit_memo', mocks.updateCreditMemo],
100+
['quickbooks_update_customer_payment', mocks.updateCustomerPayment],
101+
['quickbooks_update_employee', mocks.updateEmployee],
102+
['quickbooks_update_item', mocks.updateItem],
103+
['quickbooks_update_purchase', mocks.updatePurchase],
104+
['quickbooks_update_purchase_order', mocks.updatePurchaseOrder],
105+
['quickbooks_update_vendor', mocks.updateVendor],
106+
['quickbooks_update_vendor_credit', mocks.updateVendorCredit],
107+
])('dispatches %s through its internal provider operation', async (toolId, operation) => {
108+
const controller = new AbortController()
109+
const operationRequest = request({
110+
toolId,
111+
input: { accessToken: 'token', realmId: '123', entityId: 'entity-1' },
112+
signal: controller.signal,
113+
})
114+
115+
const response = await executeQuickBooksTool(operationRequest)
116+
117+
expect(response.status).toBe(200)
118+
await expect(response.json()).resolves.toEqual({
119+
success: true,
120+
output: { id: 'entity-1' },
121+
})
122+
expect(operation).toHaveBeenCalledWith(
123+
operationRequest.input,
124+
controller.signal,
125+
operationRequest.context
126+
)
53127
})
54128

55129
it('dispatches downloads with trusted execution context', async () => {

apps/sim/lib/internal/quickbooks/execute-tool.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,20 @@ import {
1212
QuickBooksInternalOperationError,
1313
type QuickBooksOperationContext,
1414
} from '@/lib/internal/quickbooks/operations'
15+
import {
16+
executeQuickBooksCreateBillPaymentOperation,
17+
executeQuickBooksUpdateBillOperation,
18+
executeQuickBooksUpdateBillPaymentOperation,
19+
executeQuickBooksUpdateCreditMemoOperation,
20+
executeQuickBooksUpdateCustomerPaymentOperation,
21+
executeQuickBooksUpdateEmployeeOperation,
22+
executeQuickBooksUpdateItemOperation,
23+
executeQuickBooksUpdatePurchaseOperation,
24+
executeQuickBooksUpdatePurchaseOrderOperation,
25+
executeQuickBooksUpdateVendorCreditOperation,
26+
executeQuickBooksUpdateVendorOperation,
27+
} from '@/lib/internal/quickbooks/provider-operations'
28+
import { executeToolOperationImplementation } from '@/lib/internal/tool-operations/execute'
1529
import type {
1630
InternalToolOperationCall,
1731
InternalToolOperationHandler,
@@ -63,6 +77,46 @@ function operationContext(request: InternalToolOperationCall): QuickBooksOperati
6377

6478
export const executeQuickBooksTool: InternalToolOperationHandler = async (request) => {
6579
request.signal?.throwIfAborted()
80+
switch (request.toolId) {
81+
case 'quickbooks_create_bill_payment':
82+
return executeToolOperationImplementation(
83+
executeQuickBooksCreateBillPaymentOperation,
84+
request
85+
)
86+
case 'quickbooks_update_bill':
87+
return executeToolOperationImplementation(executeQuickBooksUpdateBillOperation, request)
88+
case 'quickbooks_update_bill_payment':
89+
return executeToolOperationImplementation(
90+
executeQuickBooksUpdateBillPaymentOperation,
91+
request
92+
)
93+
case 'quickbooks_update_credit_memo':
94+
return executeToolOperationImplementation(executeQuickBooksUpdateCreditMemoOperation, request)
95+
case 'quickbooks_update_customer_payment':
96+
return executeToolOperationImplementation(
97+
executeQuickBooksUpdateCustomerPaymentOperation,
98+
request
99+
)
100+
case 'quickbooks_update_employee':
101+
return executeToolOperationImplementation(executeQuickBooksUpdateEmployeeOperation, request)
102+
case 'quickbooks_update_item':
103+
return executeToolOperationImplementation(executeQuickBooksUpdateItemOperation, request)
104+
case 'quickbooks_update_purchase':
105+
return executeToolOperationImplementation(executeQuickBooksUpdatePurchaseOperation, request)
106+
case 'quickbooks_update_purchase_order':
107+
return executeToolOperationImplementation(
108+
executeQuickBooksUpdatePurchaseOrderOperation,
109+
request
110+
)
111+
case 'quickbooks_update_vendor':
112+
return executeToolOperationImplementation(executeQuickBooksUpdateVendorOperation, request)
113+
case 'quickbooks_update_vendor_credit':
114+
return executeToolOperationImplementation(
115+
executeQuickBooksUpdateVendorCreditOperation,
116+
request
117+
)
118+
}
119+
66120
if (!isQuickBooksFileToolId(request.toolId)) {
67121
return Response.json(
68122
{ success: false, error: `Unsupported QuickBooks tool: ${request.toolId}` },

0 commit comments

Comments
 (0)