feat: add SQS + EventBridge
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
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'))
|
||||
})
|
||||
Reference in New Issue
Block a user