Files
supabase/apps/studio/components/interfaces/Database/Functions/CreateFunction/CreateFunctionConfigParamsSection.test.tsx
Danny White 70c4659452 chore(studio): reuse key-value field array for params (#44058)
## What kind of change does this PR introduce?

Chore that references DEPR-394.

## What is the current behavior?

This stack is consolidating RHF key/value array UIs in smaller
reviewable steps.

After PR 1, Database Webhooks HTTP parameters and Database Functions
configuration parameters still use separate bespoke implementations.

## What is the new behavior?

- reuses the shared `KeyValueFieldArray` for Database Webhooks HTTP
parameters
- reuses the shared `KeyValueFieldArray` for Database Functions
configuration parameters
- keeps existing form shapes and submission logic intact
- adds focused tests for those two follow-up consumers

## Additional context

This is PR 2 of a 3-PR stack for DEPR-394.

Base PR: #43938
2026-03-25 11:39:36 +11:00

52 lines
1.6 KiB
TypeScript

import { render, screen } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import { useForm } from 'react-hook-form'
import { describe, expect, it } from 'vitest'
import { Form_Shadcn_ } from 'ui'
import { CreateFunctionConfigParamsSection } from './CreateFunctionConfigParamsSection'
type ConfigParamsFormValues = {
config_params: Array<{ name: string; value: string }>
}
const CreateFunctionConfigParamsHarness = () => {
const form = useForm<ConfigParamsFormValues>({
defaultValues: {
config_params: [{ name: 'search_path', value: 'public' }],
},
})
return (
<Form_Shadcn_ {...form}>
<CreateFunctionConfigParamsSection />
</Form_Shadcn_>
)
}
describe('CreateFunctionConfigParamsSection', () => {
it('appends a new config parameter row with name and value fields', async () => {
const user = userEvent.setup()
render(<CreateFunctionConfigParamsHarness />)
await user.click(screen.getByRole('button', { name: 'Add a new config' }))
expect(screen.getAllByPlaceholderText('parameter_name')).toHaveLength(2)
expect(screen.getAllByPlaceholderText('parameter_value')).toHaveLength(2)
})
it('removes an existing config parameter row', async () => {
const user = userEvent.setup()
render(<CreateFunctionConfigParamsHarness />)
expect(screen.getByDisplayValue('search_path')).toBeInTheDocument()
await user.click(screen.getByRole('button', { name: 'Remove configuration parameter' }))
expect(screen.queryByDisplayValue('search_path')).not.toBeInTheDocument()
})
})