54 lines
2.5 KiB
TypeScript
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'))
|
|
})
|