+ List: ({ children, actions, ...props }) => (
+
+ {actions}
{children}
),
@@ -59,11 +72,18 @@ vi.mock('./ToggleEnabledSwitch', () => ({
default: () =>
,
}))
+// Mock httpClient
+const mockHttpClient = vi.fn()
+vi.mock('../dataProvider', () => ({
+ httpClient: (...args) => mockHttpClient(...args),
+}))
+
import PluginList from './PluginList'
describe('PluginList', () => {
beforeEach(() => {
vi.clearAllMocks()
+ mockHttpClient.mockResolvedValue({})
})
it('renders the list component', () => {
@@ -75,4 +95,46 @@ describe('PluginList', () => {
render(
)
expect(screen.getByTestId('datagrid')).toBeInTheDocument()
})
+
+ it('renders the rescan button', () => {
+ render(
)
+ expect(screen.getByTestId('rescan-button')).toBeInTheDocument()
+ })
+
+ it('calls rescan endpoint when rescan button is clicked', async () => {
+ render(
)
+ const rescanButton = screen.getByTestId('rescan-button')
+
+ fireEvent.click(rescanButton)
+
+ await waitFor(() => {
+ expect(mockHttpClient).toHaveBeenCalledWith('/api/plugin/rescan', {
+ method: 'POST',
+ })
+ })
+ })
+
+ it('calls refresh after successful rescan', async () => {
+ render(
)
+ const rescanButton = screen.getByTestId('rescan-button')
+
+ fireEvent.click(rescanButton)
+
+ await waitFor(() => {
+ expect(mockRefresh).toHaveBeenCalled()
+ })
+ })
+
+ it('shows error notification on rescan failure', async () => {
+ mockHttpClient.mockRejectedValue(new Error('Network error'))
+
+ render(
)
+ const rescanButton = screen.getByTestId('rescan-button')
+
+ fireEvent.click(rescanButton)
+
+ await waitFor(() => {
+ expect(mockNotify).toHaveBeenCalledWith('Network error', { type: 'warning' })
+ })
+ })
})