mirror of
https://github.com/nowcommunity/nowdatabase.git
synced 2026-10-12 19:13:52 +03:00
Fix clearing species comment during edits
This commit is contained in:
@@ -118,8 +118,15 @@ export const WriteButton = <T,>({
|
||||
const convertedEditData = convertSpeciesTaxonomyFields(editData as EditDataType<Species>)
|
||||
const convertedOriginalData = convertSpeciesTaxonomyFields(data as EditDataType<Species>)
|
||||
const taxonomyHasChanged = mode.new || hasTaxonomyChanges(convertedEditData, convertedOriginalData)
|
||||
const sanitizedEditData =
|
||||
'sp_comment' in convertedEditData
|
||||
? {
|
||||
...convertedEditData,
|
||||
sp_comment: convertedEditData.sp_comment === '' ? null : convertedEditData.sp_comment,
|
||||
}
|
||||
: convertedEditData
|
||||
|
||||
speciesEditData = convertedEditData
|
||||
speciesEditData = sanitizedEditData
|
||||
|
||||
if (taxonomyHasChanged) {
|
||||
if (!speciesData) {
|
||||
@@ -139,7 +146,7 @@ export const WriteButton = <T,>({
|
||||
}
|
||||
|
||||
notify('', undefined, 0)
|
||||
setEditData(convertedEditData as EditDataType<T>)
|
||||
setEditData(sanitizedEditData as EditDataType<T>)
|
||||
|
||||
if (hasStagingMode) {
|
||||
setMode(mode.new ? 'staging-new' : 'staging-edit')
|
||||
|
||||
@@ -87,10 +87,14 @@ const baseSpecies: Species = {
|
||||
locomo2: '',
|
||||
locomo3: '',
|
||||
sp_author: '',
|
||||
sp_comment: '',
|
||||
sp_comment: 'Existing comment',
|
||||
}
|
||||
|
||||
const renderButton = (editData: EditDataType<Species>, onWrite = jest.fn(() => Promise.resolve())) => {
|
||||
const renderButton = (
|
||||
editData: EditDataType<Species>,
|
||||
onWrite = jest.fn(() => Promise.resolve()),
|
||||
overrides?: Partial<DetailContextType<Species>>
|
||||
) => {
|
||||
mockUseDetailContext.mockReturnValue({
|
||||
data: baseSpecies,
|
||||
mode: modeEdit,
|
||||
@@ -105,6 +109,7 @@ const renderButton = (editData: EditDataType<Species>, onWrite = jest.fn(() => P
|
||||
validator,
|
||||
fieldsWithErrors: {},
|
||||
setFieldsWithErrors: jest.fn(),
|
||||
...overrides,
|
||||
})
|
||||
|
||||
mockUseGetAllSpeciesQuery.mockReturnValue({ data: [baseSpecies] } as never)
|
||||
@@ -147,4 +152,20 @@ describe('WriteButton taxonomy handling', () => {
|
||||
expect(onWrite).not.toHaveBeenCalled()
|
||||
expect(mockNotify).toHaveBeenCalledWith(expect.stringContaining('taxon already exists'), 'error', null)
|
||||
})
|
||||
|
||||
it('converts a cleared comment field to null so it can be persisted', async () => {
|
||||
const onWrite = jest.fn(() => Promise.resolve())
|
||||
const setEditData = jest.fn()
|
||||
|
||||
renderButton({ ...baseSpecies, sp_comment: '' } as EditDataType<Species>, onWrite, { setEditData })
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: /save changes/i }))
|
||||
|
||||
await waitFor(() => {
|
||||
expect(onWrite).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
expect(onWrite).toHaveBeenCalledWith(expect.objectContaining({ sp_comment: null }), expect.any(Function))
|
||||
expect(setEditData).toHaveBeenCalledWith(expect.objectContaining({ sp_comment: null }))
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user