mirror of
https://github.com/nowcommunity/nowdatabase.git
synced 2026-10-12 19:13:52 +03:00
Skip filtered lookup for empty occurrence exports
This commit is contained in:
@@ -82,6 +82,24 @@ describe('DwC-A occurrence export (admin-only)', () => {
|
||||
expect(occurrenceCsv).not.toContain('NOW:OCC:24750:')
|
||||
})
|
||||
|
||||
it('uses the unfiltered export path for empty POST filters', async () => {
|
||||
const loginResult = await send<{ token: string }>('user/login', 'POST', { username: 'testSu', password: 'test' })
|
||||
expect(loginResult.status).toEqual(200)
|
||||
|
||||
const result = await request(app)
|
||||
.post('/occurrence/export/dwc-archive')
|
||||
.set('authorization', `bearer ${loginResult.body.token}`)
|
||||
.send({ columnFilters: [], sorting: [] })
|
||||
.buffer(true)
|
||||
.parse(parseBinary)
|
||||
|
||||
expect(result.status).toEqual(200)
|
||||
const zip = await JSZip.loadAsync(result.body as unknown as Buffer)
|
||||
const occurrenceCsv = await zip.file('occurrence.csv')!.async('string')
|
||||
expect(occurrenceCsv).toContain('NOW:OCC:21050:')
|
||||
expect(occurrenceCsv).toContain('NOW:OCC:24750:')
|
||||
})
|
||||
|
||||
it('returns an empty filtered DwC-DP ZIP archive for POST requests', async () => {
|
||||
const loginResult = await send<{ token: string }>('user/login', 'POST', { username: 'testSu', password: 'test' })
|
||||
expect(loginResult.status).toEqual(200)
|
||||
|
||||
@@ -32,6 +32,12 @@ const defaultCrossSearchExportFilters = {
|
||||
sorting: [],
|
||||
} satisfies CrossSearchRequestParameters
|
||||
|
||||
const hasEmptyExportFilters = (parameters: Partial<CrossSearchRequestParameters>): boolean => {
|
||||
const columnFilters = parameters.columnFilters ?? defaultCrossSearchExportFilters.columnFilters
|
||||
const sorting = parameters.sorting ?? defaultCrossSearchExportFilters.sorting
|
||||
return Array.isArray(columnFilters) && columnFilters.length === 0 && Array.isArray(sorting) && sorting.length === 0
|
||||
}
|
||||
|
||||
class ExportFilterValidationError extends Error {
|
||||
validationErrors: ValidationObject[]
|
||||
|
||||
@@ -44,6 +50,7 @@ class ExportFilterValidationError extends Error {
|
||||
const resolveOccurrenceKeysForExport = async (req: Request): Promise<DwcOccurrenceKey[] | undefined> => {
|
||||
if (req.method === 'GET') return undefined
|
||||
const body = req.body as Partial<CrossSearchRequestParameters> | undefined
|
||||
if (!body || hasEmptyExportFilters(body)) return undefined
|
||||
const result = await getFilteredCrossSearchOccurrenceKeys(req.user, {
|
||||
columnFilters: body?.columnFilters ?? defaultCrossSearchExportFilters.columnFilters,
|
||||
sorting: body?.sorting ?? defaultCrossSearchExportFilters.sorting,
|
||||
|
||||
Reference in New Issue
Block a user