import { fireEvent, render, screen } from '@testing-library/react'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { DeleteConfirm } from './delete-confirm'
const mockRefetch = vi.fn()
const mockDelete = vi.fn()
const mockToast = vi.fn()
vi.mock('./use-subscription-list', () => ({
useSubscriptionList: () => ({ refetch: mockRefetch }),
}))
vi.mock('@/service/use-triggers', () => ({
useDeleteTriggerSubscription: () => ({ mutate: mockDelete, isPending: false }),
}))
vi.mock('@/app/components/base/toast', () => ({
default: {
notify: (args: { type: string, message: string }) => mockToast(args),
},
}))
beforeEach(() => {
vi.clearAllMocks()
mockDelete.mockImplementation((_id: string, options?: { onSuccess?: () => void }) => {
options?.onSuccess?.()
})
})
describe('DeleteConfirm', () => {
it('should prevent deletion when workflows in use and input mismatch', () => {
render(
,
)
fireEvent.click(screen.getByRole('button', { name: /pluginTrigger\.subscription\.list\.item\.actions\.deleteConfirm\.confirm/ }))
expect(mockDelete).not.toHaveBeenCalled()
expect(mockToast).toHaveBeenCalledWith(expect.objectContaining({ type: 'error' }))
})
it('should allow deletion after matching input name', () => {
const onClose = vi.fn()
render(
,
)
fireEvent.change(
screen.getByPlaceholderText(/pluginTrigger\.subscription\.list\.item\.actions\.deleteConfirm\.confirmInputPlaceholder/),
{ target: { value: 'Subscription One' } },
)
fireEvent.click(screen.getByRole('button', { name: /pluginTrigger\.subscription\.list\.item\.actions\.deleteConfirm\.confirm/ }))
expect(mockDelete).toHaveBeenCalledWith('sub-1', expect.any(Object))
expect(mockRefetch).toHaveBeenCalledTimes(1)
expect(onClose).toHaveBeenCalledWith(true)
})
it('should show error toast when delete fails', () => {
mockDelete.mockImplementation((_id: string, options?: { onError?: (error: Error) => void }) => {
options?.onError?.(new Error('network error'))
})
render(
,
)
fireEvent.click(screen.getByRole('button', { name: /pluginTrigger\.subscription\.list\.item\.actions\.deleteConfirm\.confirm/ }))
expect(mockToast).toHaveBeenCalledWith(expect.objectContaining({ type: 'error', message: 'network error' }))
})
})