Files
floci-ui/packages/frontend/src/components/ScheduledLambdaTriggerPanel.test.tsx
T
2026-09-24 22:34:04 -04:00

54 lines
2.5 KiB
TypeScript

import {QueryClient, QueryClientProvider} from '@tanstack/react-query'
import {render, screen, waitFor} from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import {expect, test, vi} from 'vitest'
import {ScheduledLambdaTriggerPanel} from './ScheduledLambdaTriggerPanel'
import type {CloudResource} from '@/types/resource'
const apiMocks = vi.hoisted(() => ({
createEventBridgeLambdaTrigger: vi.fn(),
deleteEventBridgeLambdaTrigger: vi.fn(),
listEventBridgeLambdaTriggers: vi.fn(),
}))
vi.mock('@/api/cloudProxyClient', () => apiMocks)
const lambda: CloudResource = {
id: 'reporter', name: 'reporter', cloud: 'aws', service: 'serverless', type: 'lambda',
region: null, createdAt: null, metadata: {},
}
function renderPanel() {
const queryClient = new QueryClient({defaultOptions: {queries: {retry: false}}})
render(<QueryClientProvider client={queryClient}><ScheduledLambdaTriggerPanel cloud="aws" resource={lambda} runtimeReachable/></QueryClientProvider>)
}
test('creates a scheduled EventBridge Lambda trigger', async () => {
apiMocks.listEventBridgeLambdaTriggers.mockResolvedValue([])
apiMocks.createEventBridgeLambdaTrigger.mockResolvedValue({id: 'hourly-report', ruleName: 'hourly-report', scheduleExpression: 'rate(1 hour)'})
const user = userEvent.setup()
renderPanel()
await user.type(screen.getByLabelText(/rule name/i), 'hourly-report')
await user.clear(screen.getByLabelText(/schedule expression/i))
await user.type(screen.getByLabelText(/schedule expression/i), 'rate(1 hour)')
await user.click(screen.getByRole('button', {name: 'Add schedule'}))
await waitFor(() => expect(apiMocks.createEventBridgeLambdaTrigger).toHaveBeenCalledWith('aws', 'reporter', {
ruleName: 'hourly-report', scheduleExpression: 'rate(1 hour)',
}))
})
test('confirms before deleting a scheduled trigger', async () => {
apiMocks.listEventBridgeLambdaTriggers.mockResolvedValue([{id: 'hourly-report', ruleName: 'hourly-report', scheduleExpression: 'rate(1 hour)', state: 'ENABLED'}])
apiMocks.deleteEventBridgeLambdaTrigger.mockResolvedValue(undefined)
const user = userEvent.setup()
renderPanel()
await user.click(await screen.findByRole('button', {name: 'Remove schedule hourly-report'}))
expect(screen.getByText('Remove schedule?')).toBeVisible()
await user.click(screen.getByRole('button', {name: 'Remove'}))
await waitFor(() => expect(apiMocks.deleteEventBridgeLambdaTrigger).toHaveBeenCalledWith('aws', 'reporter', 'hourly-report'))
})