Skip to content

Commit 241ddfd

Browse files
Bill LeoutsakosBill Leoutsakos
authored andcommitted
feat(integrations): expand Oracle Fusion HCM to payroll talent and time
1 parent 1d01160 commit 241ddfd

82 files changed

Lines changed: 12675 additions & 64 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

apps/docs/content/docs/integrations/oracle_fusion_hcm.mdx

Lines changed: 2110 additions & 23 deletions
Large diffs are not rendered by default.

apps/sim/blocks/blocks/oracle_fusion_hcm.ts

Lines changed: 1418 additions & 23 deletions
Large diffs are not rendered by default.

apps/sim/lib/internal/oracle-fusion-hcm/execute-tool.test.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,15 @@ import type { InternalToolOperationCall } from '@/lib/internal/tool-operations/t
66
const TEST_ACCESS_TOKEN = 'test-access-token'
77

88
const mocks = vi.hoisted(() => ({
9+
createAssignedPayroll: vi.fn(),
10+
updateAssignedPayroll: vi.fn(),
11+
createElementEntry: vi.fn(),
12+
updateElementEntryValue: vi.fn(),
13+
createSalary: vi.fn(),
14+
correctSalary: vi.fn(),
15+
createTimeEntry: vi.fn(),
16+
updateTimeEntry: vi.fn(),
17+
deleteTimeEntry: vi.fn(),
918
listWorkers: vi.fn(),
1019
getWorker: vi.fn(),
1120
listWorkerAssignments: vi.fn(),
@@ -27,6 +36,15 @@ const mocks = vi.hoisted(() => ({
2736
}))
2837

2938
vi.mock('@/lib/internal/oracle-fusion-hcm/operations', () => ({
39+
executeOracleFusionHcmCreateAssignedPayroll: mocks.createAssignedPayroll,
40+
executeOracleFusionHcmUpdateAssignedPayroll: mocks.updateAssignedPayroll,
41+
executeOracleFusionHcmCreateElementEntry: mocks.createElementEntry,
42+
executeOracleFusionHcmUpdateElementEntryValue: mocks.updateElementEntryValue,
43+
executeOracleFusionHcmCreateSalary: mocks.createSalary,
44+
executeOracleFusionHcmCorrectSalary: mocks.correctSalary,
45+
executeOracleFusionHcmCreateTimeEntry: mocks.createTimeEntry,
46+
executeOracleFusionHcmUpdateTimeEntry: mocks.updateTimeEntry,
47+
executeOracleFusionHcmDeleteTimeEntry: mocks.deleteTimeEntry,
3048
executeOracleFusionHcmListWorkers: mocks.listWorkers,
3149
executeOracleFusionHcmGetWorker: mocks.getWorker,
3250
executeOracleFusionHcmListWorkerAssignments: mocks.listWorkerAssignments,
@@ -64,6 +82,25 @@ function invokeHcmTool(overrides: Partial<InternalToolOperationCall>) {
6482
}
6583

6684
describe('Oracle Fusion HCM tool dispatch', () => {
85+
it('marks ambiguous mutation failures non-retryable without exposing provider details', async () => {
86+
mocks.createSalary.mockRejectedValueOnce(new OracleFusionProviderError('Oracle Fusion HCM request timed out', 504))
87+
const response = await invokeHcmTool({
88+
toolId: 'oracle_fusion_hcm_create_salary',
89+
input: { ...auth, assignmentId: '1', salaryBasisId: '2', salaryAmount: 1200, dateFrom: '2026-01-01', dateTo: '4712-12-31' },
90+
})
91+
expect(response.status).toBe(504)
92+
expect(await response.json()).toEqual({ success: false, error: 'Oracle Fusion HCM request timed out', retryable: false })
93+
expect(mocks.createSalary).toHaveBeenCalledOnce()
94+
})
95+
96+
it('rejects a time update missing its version before dispatch', async () => {
97+
const response = await invokeHcmTool({
98+
toolId: 'oracle_fusion_hcm_update_time_entry',
99+
input: { ...auth, personNumber: '0007', timeRecordId: '2', measure: 8, referenceDate: '2026-01-01' },
100+
})
101+
expect(response.status).toBe(400)
102+
expect(mocks.updateTimeEntry).not.toHaveBeenCalled()
103+
})
67104
beforeEach(() => {
68105
vi.clearAllMocks()
69106
for (const mock of Object.values(mocks)) {

0 commit comments

Comments
 (0)