feat: Cloudformation + RDS

This commit is contained in:
Zakaria
2026-09-30 17:43:42 -04:00
parent 548a15d7ec
commit 7764ea0dc1
411 changed files with 10182 additions and 1063 deletions
@@ -37,11 +37,11 @@ describe('WorkflowExecutionDebugger', () => {
renderPanel()
await user.click(await screen.findByText('run-1'))
expect(await screen.findByText((_, element) => element?.tagName === 'SUMMARY' && element.textContent?.includes('ExecutionStarted') === true)).toBeInTheDocument()
expect(await screen.findByText((_, element) => element?.tagName === 'SUMMARY' && element.textContent?.includes('ExecutionSucceeded') === true)).toBeInTheDocument()
expect(await screen.findByText('ExecutionStarted')).toBeInTheDocument()
expect(await screen.findByText('ExecutionSucceeded')).toBeInTheDocument()
expect(getWorkflowExecutionHistory).toHaveBeenNthCalledWith(1, machine.id, executionArn, undefined, expect.any(AbortSignal))
expect(getWorkflowExecutionHistory).toHaveBeenNthCalledWith(2, machine.id, executionArn, 'next', expect.any(AbortSignal))
expect(screen.getAllByText((_, element) => element?.tagName === 'SUMMARY' && element.textContent?.includes('ExecutionStarted') === true)).toHaveLength(1)
expect(screen.getAllByText('ExecutionStarted')).toHaveLength(1)
expect(screen.queryByRole('button', {name: 'Load more history'})).not.toBeInTheDocument()
fireEvent.change(screen.getByLabelText('JSON input'), {target: {value: '{"orderId":"1"}'}})
await user.click(screen.getByRole('button', {name: 'Start execution'}))
@@ -87,7 +87,7 @@ describe('WorkflowExecutionDebugger', () => {
await user.click(await screen.findByText('run-1'))
expect(await screen.findByText('Unable to load the next history page')).toBeInTheDocument()
expect(screen.getByText((_, element) => element?.tagName === 'SUMMARY' && element.textContent?.includes('ExecutionStarted') === true)).toBeInTheDocument()
expect(screen.getByText('ExecutionStarted')).toBeInTheDocument()
})
test('polls only the trailing history page for a running execution and appends new events', async () => {
@@ -101,9 +101,9 @@ describe('WorkflowExecutionDebugger', () => {
renderPanel()
await user.click(await screen.findByText('run-1'))
expect(await screen.findByText((_, element) => element?.tagName === 'SUMMARY' && element.textContent?.includes('TaskStateEntered') === true)).toBeInTheDocument()
expect(await screen.findByText('TaskStateEntered')).toBeInTheDocument()
expect(await screen.findByText((_, element) => element?.tagName === 'SUMMARY' && element.textContent?.includes('TaskSucceeded') === true, {}, {timeout: 3_000})).toBeInTheDocument()
expect(await screen.findByText('TaskSucceeded', {}, {timeout: 3_000})).toBeInTheDocument()
expect(getWorkflowExecutionHistory).toHaveBeenNthCalledWith(3, machine.id, executionArn, 'page-2', expect.any(AbortSignal))
expect(getWorkflowExecutionHistory).toHaveBeenCalledTimes(3)
})
@@ -123,6 +123,33 @@ describe('WorkflowExecutionDebugger', () => {
expect(await screen.findByText('History incomplete: reached the 10-page limit.')).toBeInTheDocument()
expect(getWorkflowExecutionHistory).toHaveBeenCalledTimes(10)
expect(screen.getAllByText((_, element) => element?.tagName === 'SUMMARY' && element.textContent?.includes('Event') === true)).toHaveLength(10)
expect(screen.getAllByText('Event')).toHaveLength(10)
})
test('renders state status, selected state input, definition, and state events', async () => {
const workflow: CloudResource = {...machine, metadata: {machineType: 'STANDARD', definition: JSON.stringify({StartAt: 'ChargePayment', States: {ChargePayment: {Type: 'Task', Resource: 'arn:aws:states:::lambda:invoke', Parameters: {FunctionName: 'arn:aws:lambda:us-east-1:000000000000:function:charge-payment:$LATEST'}}, PaymentFailed: {Type: 'Task', Resource: 'arn:aws:states:::sns:publish', End: true}}})}}
vi.mocked(listWorkflowExecutions).mockResolvedValue([{executionArn, name: 'run-1', status: 'SUCCEEDED', startDate: '2026-07-28T10:01:00.000Z'}])
vi.mocked(describeWorkflowExecution).mockResolvedValue({executionArn, name: 'run-1', status: 'SUCCEEDED', startDate: '2026-07-28T10:01:00.000Z', stateMachineArn: machine.id, input: '{"orderId":"1"}'})
vi.mocked(getWorkflowExecutionHistory).mockResolvedValue({events: [
{id: 1, type: 'TaskStateEntered', timestamp: '2026-07-28T10:01:00.000Z', stateEnteredEventDetails: {name: 'ChargePayment', input: '{"orderId":"1"}'}},
{id: 2, previousEventId: 1, type: 'TaskFailed', taskFailedEventDetails: {error: 'Exception'}},
{id: 3, previousEventId: 2, type: 'TaskStateExited', stateExitedEventDetails: {name: 'ChargePayment'}},
{id: 4, type: 'TaskStateEntered', timestamp: '2026-07-28T10:01:01.000Z', stateEnteredEventDetails: {name: 'PaymentFailed', input: '{"orderId":"1"}'}},
{id: 5, previousEventId: 4, type: 'TaskSucceeded', taskSucceededEventDetails: {output: '{"messageId":"1"}'}},
{id: 6, previousEventId: 5, type: 'TaskStateExited', stateExitedEventDetails: {name: 'PaymentFailed', output: '{"messageId":"1"}'}},
]})
const client = new QueryClient({defaultOptions: {queries: {retry: false}}})
const user = userEvent.setup()
render(<QueryClientProvider client={client}><WorkflowExecutionDebugger resource={workflow} runtimeReachable={true}/></QueryClientProvider>)
await user.click(await screen.findByText('run-1'))
expect(await screen.findByText('Caught error')).toBeInTheDocument()
await user.click(screen.getAllByRole('button', {name: /ChargePayment/})[0])
expect(screen.getByRole('link', {name: 'Open logs'})).toHaveAttribute('href', '/cloud-explorer/aws/logs?resource=%2Faws%2Flambda%2Fcharge-payment')
expect(screen.getByText('{"orderId":"1"}')).toBeInTheDocument()
await user.click(screen.getByRole('tab', {name: 'definition'}))
expect(screen.getByText((_, element) => element?.tagName === 'PRE' && element.textContent?.includes('arn:aws:states:::lambda:invoke') === true)).toBeInTheDocument()
await user.click(screen.getByRole('tab', {name: 'events'}))
expect(screen.getAllByText('TaskFailed')).toHaveLength(2)
})
})